⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcdmlist.cpp

📁 《Windows CE 权威指南》(作者:(美)CHRIS MUENCH
💻 CPP
字号:
// PCDMList.cpp : Implementation of CPCDMList

#include "stdafx.h"
#include "PCDMUI.h"
#include "PCDMList.h"

/////////////////////////////////////////////////////////////////////////////
// CPCDMList
// <BOOK_ADDON STEP5 Chapter 7.4.2> *****************************************
LRESULT CPCDMList::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
RECT rc;

		GetClientRect(&rc);
		TCHAR tStrWndName[100];
#ifdef UNDER_CE
		m_iLVCID=Random()%100;
#else
		m_iLVCID=rand()*100;
#endif
		wsprintf(tStrWndName,TEXT("PCDMList%d"),m_iLVCID);
		m_hwndLVC = CreateWindowEx(0, WC_LISTVIEW, tStrWndName,
					LVS_REPORT|LVS_SINGLESEL|WS_VISIBLE | 
					WS_CHILD | WS_BORDER | WS_VSCROLL,
					rc.left,rc.top, rc.right, 
					rc.bottom, 	m_hWnd, (HMENU)m_iLVCID,
					_Module.m_hInst, NULL);
		if (m_hwndLVC)
			ListView_SetExtendedListViewStyle(m_hwndLVC,
			LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	return S_OK;
}

STDMETHODIMP CPCDMList::AddColumn(long Size, BSTR Caption)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	if (!m_hwndLVC)
		return S_OK;
	LVCOLUMN lvCol;
	lvCol.mask= LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVCF_SUBITEM;
	lvCol.pszText=Caption;
	lvCol.cx=Size;
	lvCol.fmt= LVCFMT_LEFT;
	lvCol.iSubItem=m_iColCnt;
	SendMessage(m_hwndLVC, LVM_INSERTCOLUMN, 
				m_iColCnt, (LPARAM)&lvCol);
	m_iColCnt++;

	return S_OK;
}

STDMETHODIMP CPCDMList::AddItem(long Row, long Column, long lParam, BSTR Caption)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	if (!m_hwndLVC)
		return S_OK;
	LVFINDINFO lvf;
	LVITEM pitem;
	memset((void *)&pitem,0,sizeof(LVITEM));
	int id;

	lvf.flags=LVFI_PARAM;
	lvf.lParam=lParam;
	lvf.vkDirection=VK_DOWN ;
	if ((id=ListView_FindItem(m_hwndLVC,-1,&lvf))<0)
	{
		pitem.mask=LVIF_TEXT | LVIF_PARAM;
		pitem.iItem=Row;
		pitem.iSubItem=0;
		pitem.pszText=Caption;
		pitem.lParam=lParam;
		id=ListView_InsertItem(m_hwndLVC,&pitem);
	}
	else
	{
		pitem.mask=LVIF_TEXT;
		pitem.iItem=id;
		pitem.iSubItem=Column;
		pitem.pszText=Caption;
		id=ListView_SetItem(m_hwndLVC,&pitem);
	}

	return S_OK;
}

STDMETHODIMP CPCDMList::GetItem(long Row, long Column, long lParam, BSTR *Caption)
{
TCHAR theContent[100]; // Be careful here! 
     // For simplicity its just hard coded

	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	LVITEM	tLVI;
	memset((void *)&tLVI,0,sizeof(LVITEM));
	memset((void *)theContent,0,sizeof(TCHAR)*100);
	tLVI.iItem=Row;
	tLVI.iSubItem=Column;
	tLVI.mask=LVIF_TEXT;
	tLVI.pszText=theContent;
	tLVI.cchTextMax=100;
	ListView_GetItem(m_hwndLVC,&tLVI);
	*Caption=SysAllocString(theContent);

	return S_OK;
}

STDMETHODIMP CPCDMList::Reset()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	if (!m_hwndLVC)
		return S_OK;
	ListView_DeleteAllItems(m_hwndLVC);

	return S_OK;
}

STDMETHODIMP CPCDMList::DeleteRow(long Row)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	if (!m_hwndLVC)
		return S_OK;
	LVFINDINFO lvf;
	int id;

	lvf.flags=LVFI_PARAM;
	lvf.lParam=Row;
	lvf.vkDirection=VK_DOWN ;
	if ((id=ListView_FindItem(m_hwndLVC,-1,&lvf))>=0)
	{
		ListView_DeleteItem(m_hwndLVC,id);
		//SortRows: In case a row gets deleted 
	}


	return S_OK;
}

LRESULT CPCDMList::OnClickLVC(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
	if (idCtrl==m_iLVCID)
	{
		NM_LISTVIEW* pLvdi = (NM_LISTVIEW*) pnmh;
		if (pLvdi->iItem>=0)
		{
			LVITEM	tLVI;
			tLVI.iItem=pLvdi->iItem;
			tLVI.iSubItem=0;
			tLVI.mask=LVIF_PARAM;
			ListView_GetItem(m_hwndLVC,&tLVI);
			Fire_RowSelected(pLvdi->iItem,
							 pLvdi->iSubItem,
							 tLVI.lParam);
		}
	}
	return S_OK;
}

STDMETHODIMP CPCDMList::SendCommand(long Msg, long wParam, long lParam, long *result)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())

	*result=::SendMessage(m_hwndLVC,Msg,wParam,lParam);
	return S_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -