XP,MFC对话框程序,GetDC后TextOut输出被遮盖后消失的问题。

parachutes30 2014-01-08 10:58:23
void CdiaDlg::OnPaint()
{
if (IsIconic())
{
.....
}
else
{
CDC *pDC=GetDC();
pDC->TextOut(0,0,_T("haah"));
ReleaseDC(pDC);
CDialog::OnPaint();
}
}

运行后,打开任意一个全屏的程序A,遮住这个对话框,然后把程序A最小化,对话框露出来,但haah就没了。
Vista系统下没有这个问题。
把else里面的改为下面的也没有这个问题了:
CPaintDC dc(this);;
dc.TextOut(0,0,_T("haah"));
CDialog::OnPaint();

问题在哪?
...全文
71 点赞 收藏 2
写回复
2 条回复
zhuyf87 2014年01月09日
我总结了一篇笔记,楼主可以看一下:http://blog.csdn.net/zhuyf87/article/details/18000461 也许会有点帮助。
回复 点赞
zhuyf87 2014年01月09日
用GetDC()的时候,输出的内容可能被WM_ERASEBKGND擦除了吧。 处理WM_ERASEBKGND消息,注释掉默认处理,直接返回TRUE。试试。 另外OnPaint里面最好使用BeginPaint/EndPaint,这里面还有一个“无效区域”的问题。 GetDC不会使“无效区域”变有效,如果注释掉CDialog::OnPaint();,输出的文本还可能闪烁。
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告