解决方案 »
- 拖动CSplitterWnd的Spliter会闪烁
- 关于C++中Virtual虚函数的问题
- 有什么工具可以看到进程中每个线程占了多少CPU时间?
- 静态常数如何初始化
- 我从弹出菜单或者其他界面上,安装钩子都能够成功,为什么从UDP接收到消息的时候安装就不成功呢
- 请真正的帮我 一下。关于动态数组和清除视图区
- 如何编写代码关闭对话框程序?
- 请问如何在OnMousedown函数里获得键盘的值?
- 如果com组件不支持自动化的话,哪些类型是可以使用的!
- c与c++,vc与vc++有什么区别?------------太菜了?
- 如何响应CTreeCtrl控件Item的消息呢?
- 使用静态dll,出现lnk2019错误
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBitmap bitmap;
bitmap.LoadBitmapA(IDB_BTM_ABC);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dccompatible;
dccompatible.CreateCompatibleDC(pDC);
dccompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
//CreateRectRgn 创建和窗口一样大的区域
//将创建的区域选入pDC
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dccompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//恢复区域
//删除创建的区域
return true;
//return CDialogEx::OnEraseBkgnd(pDC);
}
GetClientRect(&rect);我就是用这句话获取到的VIEW的矩形区域
后面用StretchBlt函数将图片放在这个矩形区域里的,我还有其他的几个对话框,都是用的一样的代码,就这个显示不正常,很奇怪,这个对话框里面什么重绘的都没写过,是不是要手动加一个,重绘下窗口?
不是说你做了什么,是view在显示的过程中会调用onsize几次,会引起onerasebkgnd.
不是说你做了什么,是view在显示的过程中会调用onsize几次,会引起onerasebkgnd.
你可以试试:
如图,我在OnEraseBkgnd里贴图
BOOL CXue_char::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
static BOOL bfirst=TRUE;
if(bfirst)
{
bfirst=false;
}else{
CBitmap bitmap;
bitmap.LoadBitmapA(IDB_BTM_ABC);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dccompatible;
dccompatible.CreateCompatibleDC(pDC);
dccompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dccompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
}
return true;
//return CDialogEx::OnEraseBkgnd(pDC);
}
但是显示的结果,是会明显看到第1次显示一个小一点的图片,然后在显示拉伸后的图片,切换到别的界面,然后在切换回来就可以正常显示了,可以看的出来明显是切换使窗口重绘了,但是我想问的是对话框的背景图片重绘,在哪实现呢?
static BOOL bfirst=TRUE;
if(bfirst)
{
bfirst=false;
}
?
一切都在OnPaint里完成