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();

问题在哪?
...全文
120 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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();,输出的文本还可能闪烁。

15,980

社区成员

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

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