分享
 
 
 

ListView Custom Draw - 不同行(列)显示不同的颜色

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

怎样使得ListView的不同行的颜色不同,或者不同列的颜色不同。在MFC中,例子比较多,但是SDK下,很少有完整的例子。

这里给出个例子,我试了挺长时间,呵呵,才开始Windows开发学习,见笑了。

碰到的困难有两个,一个是,处理完NM_CUSTOMDRAW消息后,怎样提供返回值的问题(通过SetWindowLong)。再有一个是,设置了返回值后,对话框的窗口处理函数要返回1。

#include "stdafx.h"

#include "DlgListVw.h"

typedef struct tagProxyInfo

{

char ip[20];

char port[10];

char desc[20];

} PROXYINFO, *PPROXYINFO;

PROXYINFO Proxys[] = {

{"198.26.118.46", "80", _T("美国 未知地址")},

{"198.26.118.57", "8080", _T("美国 未知地址")},

{"198.26.120.228", "80", _T("美国 未知地址")},

{"66.201.48.36", "80", _T("美国 加利福尼亚州")},

{"202.175.26.149", "80", _T("澳门 特别行政区")},

{"168.143.113.13", "8080", _T("美国 Englewood")},

{"24.252.80.76", "8000", _T("美国 Cox通信公司")},

{"210.178.220.65", "8080", _T("韩国 汉城")},

{"206.207.248.173", "80", _T("美国 WestNet")},

{"12.129.196.86", "234", _T("美国 ATT用户")}

};

#define PROXY_COUNT (sizeof(Proxys) / sizeof(Proxys[0]))

BOOL InsertListViewItems(HWND hwndListView)

{

//set the number of items in the list

ListView_SetItemCount(hwndListView, PROXY_COUNT);

LVITEM lvi;

lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;

lvi.state = 0;

lvi.stateMask = 0;

for (int idx = 0; idx < PROXY_COUNT; ++idx)

{

lvi.iItem = idx;

lvi.iSubItem = 0;

lvi.lParam = (LPARAM)&Proxys[idx];

lvi.pszText = Proxys[idx].ip;

//lvi.pszText = LPSTR_TEXTCALLBACK;

ListView_InsertItem(hwndListView, &lvi);

ListView_SetItemText(hwndListView, idx, 1, Proxys[idx].port);

ListView_SetItemText(hwndListView, idx, 2, Proxys[idx].desc);

}

return TRUE;

}

BOOL InitListView(HWND hwndListView)

{

LV_COLUMN lvColumn;

int i;

TCHAR szString[3][20] = {_T("IP"), _T("Port"), _T("描述")};

//empty the list

ListView_DeleteAllItems(hwndListView);

//initialize the columns

lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

lvColumn.fmt = LVCFMT_LEFT;

lvColumn.cx = 120;

for(i = 0; i < 3; i++)

{

lvColumn.pszText = szString[i];

ListView_InsertColumn(hwndListView, i, &lvColumn);

}

InsertListViewItems(hwndListView);

return TRUE;

}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

HWND hListView;

//NMLVDISPINFO *plvdi;

LPNMLVCUSTOMDRAW lplvcd;

int nResult = 0;

switch (message)

{

case WM_INITDIALOG:

hListView = GetDlgItem(hDlg, IDC_LIST1);

InitListView(hListView);

break;

case WM_NOTIFY:

switch(((LPNMHDR)lParam)->code)

{

/*lvi.pszText = LPSTR_TEXTCALLBACK; */

/*

case LVN_GETDISPINFO:

plvdi = (NMLVDISPINFO *)lParam;

switch (plvdi->item.iSubItem)

{

case 0:

plvdi->item.pszText = Proxys[plvdi->item.iItem].ip;

break;

case 1:

plvdi->item.pszText = Proxys[plvdi->item.iItem].port;

break;

case 2:

plvdi->item.pszText = Proxys[plvdi->item.iItem].desc;

break;

}

break;

*/

case NM_CUSTOMDRAW:

lplvcd = (LPNMLVCUSTOMDRAW)lParam;

switch(lplvcd->nmcd.dwDrawStage)

{

case CDDS_PREPAINT:

SetWindowLong(hDlg, DWL_MSGRESULT, (LONG)(CDRF_NOTIFYITEMDRAW));

nResult = 1;

break;

case CDDS_ITEMPREPAINT:

if (lplvcd->nmcd.dwItemSpec % 2 == 0)

{

lplvcd->clrTextBk = RGB(192, 192, 192) ;

}

else

{

lplvcd->clrTextBk = RGB(220, 220, 220);

}

//SetWindowLong(hDlg, DWL_MSGRESULT, (LONG)(CDRF_NOTIFYSUBITEMDRAW));

SetWindowLong(hDlg, DWL_MSGRESULT, (LONG)(CDRF_DODEFAULT));

nResult = 1; //Must return 1

break;

// Un comment the followed code, if the code avoe return CDRF_NOTIFYSUBITEMDRAW

// Changing column color

/*

case CDDS_SUBITEM | CDDS_ITEMPREPAINT:

if(lplvcd->iSubItem %2){

lplvcd->clrTextBk = RGB(255,0,0);

}

else{

lplvcd->clrTextBk = RGB(128,128,255);

}

SetWindowLong(hDlg, DWL_MSGRESULT, (LONG)(CDRF_DODEFAULT));

nResult = 1; //Muse return 1

break;

*/

}

break;

}

break;

case WM_COMMAND:

EndDialog(hDlg, LOWORD(wParam));

break;

}

return nResult;

}

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

InitCommonControls();

DialogBox(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)DlgProc);

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有