一个关于绘图的问题,请懂的人指教

lixiaoxin1989 2016-04-14 12:47:46
我创建了基于对话框的程序,主界面背景用BMP画上去(响应WM_ERASEBKGND)。
现在我需要在界面上添加STATIC控件,且背景要是透明的。于是我响应了WM_CTLCOLOR,代码如下:

HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: 在此更改 DC 的任何特性

switch (pWnd->GetDlgCtrlID())
{
case IDC_CAPTION:

pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255, 255, 255));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
default:
break;
}

// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;


效果也确实实现了:



但是当我在OnInitDialog()中弹出一个MessageBox时,标签上的字竟然消失了。如果不弹MessageBox就不会有问题。




不在OnInitDialog()中弹窗也不会有问题。请教大家,这是为什么?
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-04-15
  • 打赏
  • 举报
回复
少弹MessageBox
lixiaoxin1989 2016-04-15
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
你弹出MessageBox和你的RECT有什么关系?
在OnInitDialog()中我先弹出MessageBox,再保存STATIC控件的RECT。但这个RECT是不对的,不弹MessageBox的话就是对的。 我也不清楚二者有什么关系。
木黑神 2016-04-15
  • 打赏
  • 举报
回复
你 Rect 的可能是屏幕或静态文本的。 应该Rect 客户区
schlafenhamster 2016-04-15
  • 打赏
  • 举报
回复
MessageBox 后 SendMessage(WM_CANCELMODE,0,0);
Eleven 2016-04-14
  • 打赏
  • 举报
回复
你弹出MessageBox和你的RECT有什么关系?
schlafenhamster 2016-04-14
  • 打赏
  • 举报
回复
要看代码, 文字说不清
lixiaoxin1989 2016-04-14
  • 打赏
  • 举报
回复
问题似乎找到了。我在OnInitDialog()里保存了STATIC控件的rect,在OnSize中再把它移动到这个Rect。 现在改成:OnInitDialog()不保存rect,在OnSize中直接计算,再move,问题找到了,因为弹出窗口后保存的rect是不对的,后面再一move就不知道move到哪里去了。 可是问题又来了,为什么rect会保存不对呢?

15,979

社区成员

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

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