重载了对话框的OnEraseBkgnd,ShowWindow时闪烁

huanglin03 2014-11-13 11:15:03
BOOL CWndDetial::OnEraseBkgnd(CDC* pDC)
{
//return CDialog::OnEraseBkgnd(pDC);
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDC MemDC;
CBitmap MemBmp;
CRect rcClient;
GetClientRect(&rcClient);
CSize WndAbsSize(rcClient.Width()+1,rcClient.Height()+1);

MemDC.CreateCompatibleDC(pDC);
MemBmp.CreateCompatibleBitmap(pDC,WndAbsSize.cx,WndAbsSize.cy);
MemDC.SelectObject(&MemBmp);

CBrush bsBkGnd(RGB(100,100,100));
rcClient.InflateRect(0,1,0,1);
MemDC.FillRect(&rcClient,&bsBkGnd);
pDC->BitBlt(0,0,WndAbsSize.cx,WndAbsSize.cy,&MemDC,0,0,SRCCOPY);

return TRUE;
}
创建的是非模太对话框,然后每次ShowWindow时要闪一下,但第一次时没有,不明白,请高手指点
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a200594150 2018-06-21
  • 打赏
  • 举报
回复
OnNcPaint如何处理的
quanjiliu10091009 2015-10-15
  • 打赏
  • 举报
回复

// 显示隐藏控件函数
inline LONG ShowControl(HWND hwnd, BOOL nCmdShow)
{
	ASSERT(hwnd != NULL);
	DWORD dwStyle = ::GetWindowLong(hwnd, GWL_STYLE);
	if (nCmdShow)
		dwStyle |= WS_VISIBLE;
	else
		dwStyle &= ~WS_VISIBLE;
	return ::SetWindowLong(hwnd, GWL_STYLE, dwStyle);
}

  ShowControl(hwnd, FALSE);
 Invalidate(TRUE);
不出现闪烁
huanglin03 2014-11-13
  • 打赏
  • 举报
回复
奇怪,我另外建一个工程,试了一下就没有闪烁,不明白为什么
schlafenhamster 2014-11-13
  • 打赏
  • 举报
回复
BOOL CWndDetial::OnEraseBkgnd(CDC* pDC) { return TRUE; }
huanglin03 2014-11-13
  • 打赏
  • 举报
回复
不信你们也可以拿代码试,看是不是有闪,一定要是非模态对话框,然后每次ShowWindow看会不会闪,注意换一下背景色才看得到效果。
huanglin03 2014-11-13
  • 打赏
  • 举报
回复
解决了,是我在OnNCPaint里处理的方式不对,现在改好了,与别的都没关系
schlafenhamster 2014-11-13
  • 打赏
  • 举报
回复
你做的是 CBrush bsBkGnd(RGB(100,100,100)); 与灰色没什么差异

15,979

社区成员

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

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