void CHtListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = CDRF_DODEFAULT; if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
// 能进入这里 ////////////////////////////////////////
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
// 能进入这里 ///////////////////////////////////
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
//////////////////////////////////// 不能进入这里, 这是为什么 ? /////////////
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem; CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc);
CRect rect;
GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect);
if (GetItemState(nItem, LVIS_SELECTED))
DrawText(nItem, nSubItem, pDC, crHighLightText, crHighLight , rect);
else
DrawText(nItem, nSubItem, pDC, crText, crBkgnd, rect);
*pResult = CDRF_SKIPDEFAULT;
}
} 程序不能进入绘制SubItem的地方, 而且我查了大量的文章都没有答案, 请高手指教 !
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = CDRF_DODEFAULT; if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
// 能进入这里 ////////////////////////////////////////
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
// 能进入这里 ///////////////////////////////////
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
//////////////////////////////////// 不能进入这里, 这是为什么 ? /////////////
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem; CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc);
CRect rect;
GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect);
if (GetItemState(nItem, LVIS_SELECTED))
DrawText(nItem, nSubItem, pDC, crHighLightText, crHighLight , rect);
else
DrawText(nItem, nSubItem, pDC, crText, crBkgnd, rect);
*pResult = CDRF_SKIPDEFAULT;
}
} 程序不能进入绘制SubItem的地方, 而且我查了大量的文章都没有答案, 请高手指教 !
解决方案 »
- 多线程中如何使用非线程安全的静态库?
- MFC实现同“windows切换用户”相同的功能
- CDC在相同坐标显示文字重叠怎样解决
- 请问IViewObject::SetAdvise后,为何IAdviseSink的OnViewChange并没有被调用
- 在VC++6 + ACCESS 中怎么显示时间
- hFound=FtpFindFirstFile(hFtpConnection,NULL,&FindFileInfo,0,0);不返回,死机状态
- 怎样得到listctrl的列数?
- 一个关于消息处理函数的问题
- 请问一个文件#include 的问题?
- 怎么知道指定的TCP,UDP端口上是否用于是否正被某项服务侦听
- 请问CDialog对象如果让它可以最小化?并在标题栏显示最小化按扭?
- 拖动无标题栏窗口的——后遗症
returned CDRF_NOTIFYSUBITEMDRAW in the previous step. At
this point, you can change the background colors for the
subitem and return CDRF_NEWFONT.*/
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = CDRF_DODEFAULT;
if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
*pResult = CDRF_SKIPDEFAULT;
}
我的Email : [email protected]
但进不了(CDDS_ITEMPREPAINT | CDDS_SUBITEM), 所以就不能显示出文字.