读书人

窗口最大化后屏幕闪烁解决方法

发布时间: 2012-01-22 22:38:43 作者: rapoo

窗口最大化后屏幕闪烁
我的是基于对话框的程序,双击标题栏后,全屏显示,但是中间会闪屏一下。我的代码是这样写的
在onsize里面。
UpdateWindow();
CRect rect;
GetClientRect(&rect);
InvalidateRect(rect,true);
SendMessage(WM_PAINT);
不知道怎么改写。大侠帮忙啊!

[解决办法]
楼主,建议你用双缓存来解决这类问题。
void CSDlg::OnPaint()
{
CPaintDC dc(this);

//add code
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(&dc);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
CRect rect;
GetWindowRect(&rect);
int nWidth = rect.Width();
int nHeight = rect.Height();
MemBitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight);

//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色

Cards.SelectObject(&beijing);
CRect rect2;
GetClientRect(&rect2);
BITMAP bmp;
beijing.GetBitmap(&bmp);
MemDC.StretchBlt(0,0,rect2.Width(),rect2.Height(),&Cards,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
这是我以前项目里面的代码,你最好还是在网上搜一下,系统学一下,再写!
[解决办法]

探讨
我想过度自然一些,就像我们平时点击一样最大化按钮以上,不要给人一种闪烁的感觉。。。

读书人网 >VC/MFC

热点推荐