📄 pcdmlist.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 + -