evc 将静态文本框置为透明,该如何解决
evc 将静态文本框置为透明
窗口在OnEraseBkgnd 里刷个背影图片,在OnCtlColor里想把静态文本框IDC_MYSTATIC的背影变为透明
if(pWnd->GetDlgCtrlID()==IDC_MYSTATIC)
{
pDC->SetTextColor(RGB(255,0,0));
MessageBox(TEXT("eeee"));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
但发现静态文本框IDC_MYSTATIC的背影不是窗口那个图片的背景,而是是桌面的背景。。调试时发现它先调用了OnCtlColor
然后才调用OnEraseBkgnd ,望高人指点,谢谢~
备注:
开发工具evc 4.0
平台wince 5.0
------解决方案--------------------
可能句柄传错了
------解决方案--------------------
三办法:
一、不要在OnEraseBkgnd里画背景
二、重新写个透明的静态控件类
三、不要用静态控件,直接用pDC->TextOut()显示信息
------解决方案--------------------
窗口在OnEraseBkgnd 里刷个背影图片,在OnCtlColor里想把静态文本框IDC_MYSTATIC的背影变为透明
if(pWnd->GetDlgCtrlID()==IDC_MYSTATIC)
{
pDC->SetTextColor(RGB(255,0,0));
MessageBox(TEXT("eeee"));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
但发现静态文本框IDC_MYSTATIC的背影不是窗口那个图片的背景,而是是桌面的背景。。调试时发现它先调用了OnCtlColor
然后才调用OnEraseBkgnd ,望高人指点,谢谢~
备注:
开发工具evc 4.0
平台wince 5.0
------解决方案--------------------
可能句柄传错了
------解决方案--------------------
三办法:
一、不要在OnEraseBkgnd里画背景
二、重新写个透明的静态控件类
三、不要用静态控件,直接用pDC->TextOut()显示信息
------解决方案--------------------
- C/C++ code
你的代码貌似没有问题。。。 BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CRect rc; GetClientRect(rc); pDC->FillSolidRect(rc, RGB(255, 0, 128)); return TRUE; //return CDialog::OnEraseBkgnd(pDC); } HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if(pWnd->GetDlgCtrlID()==IDC_STATIC1) { pDC->SetTextColor(RGB(0,0,250)); pDC->SetBkMode(TRANSPARENT); return (HBRUSH)GetStockObject(NULL_BRUSH); } // TODO: Return a different brush if the default is not desired return hbr; }