我自定义了一个子窗口,为什么不执行DrawItem啊,该如何处理啊 rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只有owner draw的才会调用?你的子窗口如果没有owner draw,就不会调用 如果是ListView,需要设置窗体风格LVS_OWNERDRAWFIXED 有的窗口根本不会调用DrawItem的,比如CHeadCtrl类,这时你只能重载它的OnPaint函数实现自绘。 并不是所有窗口都调用DrawItem,不同的窗体类型调用不同的自绘函数。 我要对子窗口进行重绘,那可咋办啊子窗口里有个继承了CListCtrl的子类,但是不知道如何重绘子类控件啊 void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDIS) { CDC* pDC = CDC::FromHandle(lpDIS->hDC); LVITEM lvi = {0}; lvi.mask = LVIF_STATE;//|LVIF_IMAGE; lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ; lvi.iItem = lpDIS->itemID; BOOL bGet = GetItem(&lvi); BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) && ((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS)))); // 画文本背景 CRect rcBack = lpDIS->rcItem; pDC->SetBkMode(TRANSPARENT); if( bHighlight ) { pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT))); } else { if (lpDIS->itemID%2 ==0) { pDC->SetTextColor(0x0C0F80); pDC->FillRect(rcBack, &CBrush(0xEEF1E3)); } else { pDC->SetTextColor(RGB(0,128,255)); pDC->FillRect(rcBack, &CBrush(0xE3e3e3)); } } //设置字体颜色 CString str; //得到焦点大小 CRect rcFocus = lpDIS->rcItem; rcFocus.DeflateRect(1,1,1,1); if (lpDIS->itemAction & ODA_DRAWENTIRE) { //写文本 CString szText; for (int i = 0; i < /*GetColumns()*/10; i++) { //循环得到文本 CRect rcItem; if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem )) continue; szText = GetItemText( lpDIS->itemID, i ); rcItem.left += 5; rcItem.right -= 1; pDC->DrawText(szText/*szText*/, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE); } } } 我改了,但是还是不行啊,怎么才能让子窗口执行DrawItem()啊,或者间接执行也行 VC++能基于对话框作图吗? 有没有这样的api? 关于WSAAsyncSelect()进行消息响应的问题,急急急~~~~~~~~~~~ 如何解决#include moc_*.cpp的问题??? 为什么DLL中的每个导出函数都有个固定的地址,有什么目的呢? 请高手指教,怎么才能快速COM入门? 找项目合作 问一个幼稚的问题? 各位大虾请进,怎么把字符串转换成二进制, 谁提供个MFC+ACCESS2003人事管理的设计与实现下载地址 MFC ActiveX窗体背景重绘问题 ?? GetClientRect返回为空【求助】
子窗口里有个继承了CListCtrl的子类,但是不知道如何重绘子类控件啊
void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC* pDC = CDC::FromHandle(lpDIS->hDC); LVITEM lvi = {0};
lvi.mask = LVIF_STATE;//|LVIF_IMAGE;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.iItem = lpDIS->itemID;
BOOL bGet = GetItem(&lvi); BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) &&
((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS)))); // 画文本背景
CRect rcBack = lpDIS->rcItem;
pDC->SetBkMode(TRANSPARENT);
if( bHighlight )
{
pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
{
if (lpDIS->itemID%2 ==0)
{
pDC->SetTextColor(0x0C0F80);
pDC->FillRect(rcBack, &CBrush(0xEEF1E3));
}
else
{
pDC->SetTextColor(RGB(0,128,255));
pDC->FillRect(rcBack, &CBrush(0xE3e3e3));
}
} //设置字体颜色
CString str; //得到焦点大小
CRect rcFocus = lpDIS->rcItem;
rcFocus.DeflateRect(1,1,1,1); if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
//写文本
CString szText;
for (int i = 0; i < /*GetColumns()*/10; i++)
{ //循环得到文本
CRect rcItem;
if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem ))
continue;
szText = GetItemText( lpDIS->itemID, i ); rcItem.left += 5; rcItem.right -= 1;
pDC->DrawText(szText/*szText*/, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE);
}
} }