重载CompareItem:typedef struct tagCOMPAREITEMSTRUCT {
UINT CtlType;
UINT CtlID;
HWND hwndItem;
UINT itemID1;
ULONG_PTR itemData1;
UINT itemID2;
ULONG_PTR itemData2;
DWORD dwLocaleId;
} COMPAREITEMSTRUCT;
example:int CColorListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCIS)
{
COLORREF cr1 = (COLORREF)lpCIS->itemData1;
COLORREF cr2 = (COLORREF)lpCIS->itemData2;
if (cr1 == cr2)
return 0; // exact match // first do an intensity sort, lower intensities go first
int intensity1 = GetRValue(cr1) + GetGValue(cr1) + GetBValue(cr1);
int intensity2 = GetRValue(cr2) + GetGValue(cr2) + GetBValue(cr2);
if (intensity1 < intensity2)
return -1; // lower intensity goes first
else if (intensity1 > intensity2)
return 1; // higher intensity goes second // if same intensity, sort by color (blues first, reds last)
if (GetBValue(cr1) > GetBValue(cr2))
return -1;
else if (GetGValue(cr1) > GetGValue(cr2))
return -1;
else if (GetRValue(cr1) > GetRValue(cr2))
return -1;
else
return 1;
}
UINT CtlType;
UINT CtlID;
HWND hwndItem;
UINT itemID1;
ULONG_PTR itemData1;
UINT itemID2;
ULONG_PTR itemData2;
DWORD dwLocaleId;
} COMPAREITEMSTRUCT;
example:int CColorListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCIS)
{
COLORREF cr1 = (COLORREF)lpCIS->itemData1;
COLORREF cr2 = (COLORREF)lpCIS->itemData2;
if (cr1 == cr2)
return 0; // exact match // first do an intensity sort, lower intensities go first
int intensity1 = GetRValue(cr1) + GetGValue(cr1) + GetBValue(cr1);
int intensity2 = GetRValue(cr2) + GetGValue(cr2) + GetBValue(cr2);
if (intensity1 < intensity2)
return -1; // lower intensity goes first
else if (intensity1 > intensity2)
return 1; // higher intensity goes second // if same intensity, sort by color (blues first, reds last)
if (GetBValue(cr1) > GetBValue(cr2))
return -1;
else if (GetGValue(cr1) > GetGValue(cr2))
return -1;
else if (GetRValue(cr1) > GetRValue(cr2))
return -1;
else
return 1;
}
解决方案 »
- 如果一台电脑有3个串口,(实际只使用一个口就够)当数据线插入任一端口,程序中如何得到当前是哪个端口在接收数据啊?(我想如果自动识别出这个端口号,就不需手动设置了)。谢谢!
- 在qq有新的消息时,我的监视程序怎样知道呢?有提思路就给加分
- 如何停止一个已经和硬件相关联的服务
- 我只想把视图类做进dll中,可是不能实现,也没有高人告诉我怎么做?
- 请高手看一段代码,讨论一个问题
- 关于在DLL中使用资源的问题
- 帮帮忙看看http://www.csdn.net/expert/topicview1.asp吧!
- 请问改变对话框大小用什么函数?
- SetTimer(1,300,NULL)引起的问题 我查了MSDN应该有四个参数,函数重载后
- 一个关于创建进程的问题:
- ado如何删除一个日期范围的记录:
- 救救我,谁有已经封装好的ADO类?
(...*)lpCIS->itemData1的值是正确的,但是(...*)lpCIS->itemData2
转换后的的指针值却不正确,而且有一个最大的特征,就是lpCIS->itemData2
的值一直不变。你认为是什么原因呢?