我想实现的功能是给ListCtrl控件的一个子项换背景颜色。下面是我的代码:
LRESULT CMyDlg::OnCustomDrawList(LPARAM lParam)
{ LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;switch (pnm->hdr.code)
{
case NM_CUSTOMDRAW: LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; switch(lplvcd->nmcd.dwDrawStage)
{ case CDDS_PREPAINT :
return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT:
return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
if(lplvcd->nmcd.dwItemSpec==1)
{
lplvcd->clrText = RGB(0, 0, 0);
lplvcd->clrTextBk = RGB( 245, 210, 10 );
}
return CDRF_NEWFONT; return CDRF_NEWFONT;
} }
}先请大虾给看看写的对不??
另外,该怎样利用消息映射机制来调用该函数啊??我写好了却不会调用,真是郁闷!
LRESULT CMyDlg::OnCustomDrawList(LPARAM lParam)
{ LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;switch (pnm->hdr.code)
{
case NM_CUSTOMDRAW: LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; switch(lplvcd->nmcd.dwDrawStage)
{ case CDDS_PREPAINT :
return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT:
return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
if(lplvcd->nmcd.dwItemSpec==1)
{
lplvcd->clrText = RGB(0, 0, 0);
lplvcd->clrTextBk = RGB( 245, 210, 10 );
}
return CDRF_NEWFONT; return CDRF_NEWFONT;
} }
}先请大虾给看看写的对不??
另外,该怎样利用消息映射机制来调用该函数啊??我写好了却不会调用,真是郁闷!
解决方案 »
- 当Mesh读取.x文件模型后进行缩放后,光照效果变化很大,缩小的变得很亮 放大的变暗,请问如何解决?
- 大家是怎么读txt文件的,textout?? 如果文件很大的话读取速度很慢,而且拖动滚动条的时候还要重新txtout整个文件!
- 大虾们,listctrl问题!!!
- 求算法。已知圆外一点求切点
- 窗口切分问题:如何让工具栏上一按纽同时控制切分出来的多个窗口?
- 关于使用Assert宏的疑问。
- 这个函数什么用啊
- 在Com里面怎么用activex控件?
- http代理服务器用户名和密码数据包的结构 有高手知道吗
- 请问那个滑动条(slider)控件怎么用,我想用它做个图片放大镜??
- 不知为什么耗内存?初学,请多帮忙!
- 如何隐藏对话框?
.CPPBEGIN_MESSAGE_MAP(CEditDlg, CDialog)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_MENULIST, OnCustomdrawMenuList)
END_MESSAGE_MAP()
void CEditDlg::OnCustomdrawMenuList( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = 0; if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
//// custome draw /////////////////
LVITEM rItem;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
CDC* pDC = CDC::FromHandle ( pLVCD->nmcd.hdc );
COLORREF crBkgnd;
BOOL bListHasFocus;
CRect rcItem;
CRect rcText;
CString sText;
UINT uFormat;
bListHasFocus = ( m_MenuList.GetSafeHwnd() == ::GetFocus() ); ZeroMemory ( &rItem, sizeof(LVITEM) );
rItem.mask = LVIF_IMAGE | LVIF_STATE;
rItem.iItem = nItem;
rItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
m_MenuList.GetItem ( &rItem ); m_MenuList.GetItemRect ( nItem, &rcItem, LVIR_ICON ); // Draw the icon.
uFormat = ILD_TRANSPARENT | ILD_MASK; if ( ( rItem.state & LVIS_SELECTED ) && bListHasFocus )
uFormat |= ILD_FOCUS; m_MenuImageList.Draw( pDC, rItem.iImage, rcItem.TopLeft(), uFormat ); // Draw the Text
for( int i=0;i<3;i++ )
{
m_MenuList.GetSubItemRect( nItem, i,LVIR_LABEL,rcItem ); /////Draw Back
if( rItem.state & LVIS_SELECTED )
{
crBkgnd = GetSysColor ( COLOR_HIGHLIGHT );
pDC->SetTextColor ( GetSysColor ( COLOR_HIGHLIGHTTEXT ));
}
else
{
crBkgnd = GetSysColor ( COLOR_WINDOW );
pDC->SetTextColor ( GetSysColor ( COLOR_BTNTEXT ));
}
pDC->FillSolidRect ( rcItem, crBkgnd );
pDC->SetBkMode ( TRANSPARENT );
/// end Draw Back sText = m_MenuList.GetItemText ( nItem, i );
rcText = rcItem;
rcText.left += 3;
rcText.top++;
LVCOLUMN col;
col.mask = LVCF_FMT;
m_MenuList.GetColumn( i,&col );
if( (col.fmt & LVCFMT_CENTER) == LVCFMT_CENTER )
{
pDC->DrawText ( sText, rcText, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
}
else if( (col.fmt & LVCFMT_RIGHT) == LVCFMT_RIGHT )
{
pDC->DrawText ( sText, rcText, DT_RIGHT | DT_VCENTER | DT_SINGLELINE );
}
else if( (col.fmt & LVCFMT_LEFT) == LVCFMT_LEFT )
{
pDC->DrawText ( sText, rcText, DT_LEFT | DT_VCENTER | DT_SINGLELINE );
} if ( bListHasFocus && ( rItem.state & LVIS_FOCUSED ))
{
pDC->DrawFocusRect ( rcItem );
}
} *pResult = CDRF_SKIPDEFAULT;
}}