如何重绘对话框当中的disable的控件? 请教下针对当前enable的控件我可以使用onctlcolor方法进行重绘,但是遇到当且Disable的空间该如何绘制呢?如图所示,我仅仅重绘了enable的Edit控件,但是如果当前状态下不可用,那该Edit控件又变成了默认的背景色了.而这是我所不希望的。希望给与指点,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hiphotos.baidu.com/jiangshan2%5F0/pic/item/faa2adfdc64ba43409244dad.jpeg 重载控件类,以BUTTON为例void CBVButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){ // TODO: Add your message handler code here and/or call default CRect rcBton; CDC *pDC; UINT state; UINT action; UINT CtrID; CBitmap bitmap; CBitmap *pOldBitmap; CDC dcMem; BITMAP s_Bmp; rcBton.CopyRect(&lpDrawItemStruct->rcItem); pDC = CDC::FromHandle(lpDrawItemStruct->hDC); state = lpDrawItemStruct->itemState; action = lpDrawItemStruct->itemAction; CtrID = lpDrawItemStruct->CtlID; dcMem.CreateCompatibleDC(pDC); pDC->SetBkMode(TRANSPARENT); if (state & ODS_DISABLED) //禁用状态 { if (bitmap.LoadBitmap(BMP_DISABLED) { pOldBitmap = dcMem.SelectObject(&bitmap); bitmap.GetBitmap(&s_Bmp); TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(), dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255)); dcMem.SelectObject(pOldBitmap); } } else if (m_bMouseOver == TRUE) { if (state & ODS_SELECTED) //选中 { if (bitmap.LoadBitmap(BMP_SELECTED)) { pOldBitmap = dcMem.SelectObject(&bitmap); bitmap.GetBitmap(&s_Bmp); TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(), dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255)); dcMem.SelectObject(pOldBitmap); } } else if (bitmap.LoadBitmap(BMP_MOUSEHOVE) //光标在button上 { pOldBitmap = dcMem.SelectObject(&bitmap); bitmap.GetBitmap(&s_Bmp); TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(), dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255)); dcMem.SelectObject(pOldBitmap); } } else { if (bitmap.LoadBitmap(BMP_NORMAL) //普通状态 { pOldBitmap = dcMem.SelectObject(&bitmap); bitmap.GetBitmap(&s_Bmp); TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(), dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255)); dcMem.SelectObject(pOldBitmap); } } VERIFY(dcMem.DeleteDC());} 星火杯--加减乘除游戏 vc++编写的界面 下载源码学习 如何将图片与按钮控件融为一体 windows找不到文件 请问有没有什么办法不用timer,在OnInitDialog完毕后立即发生的方法? 如何在软件中内置IE,用来显示HTML文件? VC入门?? 这是一个非技术问题!但对我很重要! 请问怎样把RGB彩色转换成等价的灰了? 软件发布:超级文件分割器!功能强大,欢迎大家多提意见,发表建议和up的朋友免费获得注册码! 多视真多事儿! sig_atomic_t的线程安全是谁保证的? 将OpenGL场景存入位图在保存为avi的一帧
{
// TODO: Add your message handler code here and/or call default
CRect rcBton;
CDC *pDC; UINT state;
UINT action;
UINT CtrID; CBitmap bitmap;
CBitmap *pOldBitmap;
CDC dcMem;
BITMAP s_Bmp; rcBton.CopyRect(&lpDrawItemStruct->rcItem);
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
state = lpDrawItemStruct->itemState;
action = lpDrawItemStruct->itemAction;
CtrID = lpDrawItemStruct->CtlID; dcMem.CreateCompatibleDC(pDC); pDC->SetBkMode(TRANSPARENT); if (state & ODS_DISABLED) //禁用状态
{
if (bitmap.LoadBitmap(BMP_DISABLED)
{
pOldBitmap = dcMem.SelectObject(&bitmap);
bitmap.GetBitmap(&s_Bmp);
TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
dcMem.SelectObject(pOldBitmap);
}
}
else if (m_bMouseOver == TRUE)
{
if (state & ODS_SELECTED) //选中
{
if (bitmap.LoadBitmap(BMP_SELECTED))
{
pOldBitmap = dcMem.SelectObject(&bitmap);
bitmap.GetBitmap(&s_Bmp);
TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
dcMem.SelectObject(pOldBitmap);
}
}
else if (bitmap.LoadBitmap(BMP_MOUSEHOVE) //光标在button上
{
pOldBitmap = dcMem.SelectObject(&bitmap);
bitmap.GetBitmap(&s_Bmp);
TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
dcMem.SelectObject(pOldBitmap);
}
}
else
{
if (bitmap.LoadBitmap(BMP_NORMAL) //普通状态
{
pOldBitmap = dcMem.SelectObject(&bitmap);
bitmap.GetBitmap(&s_Bmp);
TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
dcMem.SelectObject(pOldBitmap);
}
} VERIFY(dcMem.DeleteDC());
}