关于以位图为对话框背景的EDIT控件问题。MFC

mashimaro1225 2011-09-29 10:31:32
//背景直接使用位图画刷填充  
BOOL CBitmapTextDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rcClient;
GetClientRect(rcClient);
pDC->FillRect(rcClient, &m_brBk);
return TRUE;
}


HBRUSH CBitmapTextDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

CRect rcCtrl;
pWnd->GetWindowRect( &rcCtrl ); //获取控件位置
ScreenToClient( &rcCtrl ); //转换到对话框

//获取ClientDC
CDC *pBkDC = GetDC();

//拷贝背景
pDC->BitBlt(0, 0, rcCtrl.Width(), rcCtrl.Height(), pBkDC, rcCtrl.left, rcCtrl.top, SRCCOPY);

//清理工作
ReleaseDC( pBkDC ); //释放ClientDC

pDC->SetBkMode(TRANSPARENT); //背景透明模式
hbr = (HBRUSH)GetStockObject(NULL_BRUSH); //

return hbr;
}


创建了一个背景画刷,将对话框背景替换为位图。然后覆盖OnCtlColor()函数,代码如上。这么做,RADIO,CHECK,STATIC控件的背景均能变为透明,即与对话框背景融为一体。而EDIT控件,则有异常,当鼠标在EDIT控件上来回移动时,EDIT控件会无限重画。这问题要怎么处理呢?
...全文
60 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mashimaro1225 2011-09-30
  • 打赏
  • 举报
回复
怎么没人?!~
Eleven 2011-09-30
  • 打赏
  • 举报
回复
不用再OnCtlColor里BitBlt,这里直接判断ID是不是对应的控件,直接pDC->SetBkMode(TRANSPARENT);然后return (HBRUSH)GetStockObject(NULL_BRUSH);
mashimaro1225 2011-09-30
  • 打赏
  • 举报
回复
怎么没人?~
mashimaro1225 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

不用再OnCtlColor里BitBlt,这里直接判断ID是不是对应的控件,直接pDC->SetBkMode(TRANSPARENT);然后return (HBRUSH)GetStockObject(NULL_BRUSH);
[/Quote]

如果不在这BitBlt,就算判断了控件的ID,然后pDC->SetBkMode(TRANSPARENT);再返回空画刷,所有控件的背景均变成默认的灰色,而且当鼠标经过EDIT控件时,该控件还会变黑。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧