mfc中CClientDC类绘图,窗口缩放图像消失的问题
1、当然如果直接在Ondraw中画的,改变窗口大小时会调用OnDraw函数,也就是对画面进行重绘(调整画面得大小,或别其他窗口覆盖)时,不会出现这种情况;但是如果是在按钮的消息响应函数里边,进行缩放时不会重绘,图像会立刻消失。所以绘图操作还是必须放在Ondraw中或者Onpaint中的。

2、如果一定要让按钮控制绘图操作,那么可以设置一个bool变量,当bool=true时执行ondraw函数,否则不执行就可以了。需要注意的是将图形进行缩放变换时,要先调用Invalidate()函数使窗口无效来清除窗口,将保存的图形信息修改之后再调用OnDraw()函数进行重绘。

3、好多需要用菜单按钮控制绘图的操作都可以采用这种方法,可以设置多个选项来响应,使用多个变量值(枚举类型)控制哪种绘图操作即可。
4、具体实例部分代码如下:
先声明 bool flag;
然后在构造函数中初始化 flag=FALSE;
void Cmfc_menu_yyView::Onpushbutton()
{
flag=TRUE;
Invalidate(); //更新
}
void Cmfc_menu_yyView::OnDraw(CDC* pDC)
{
Cmfc_menu_yyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if(flag)
{
CRect rect;
GetClientRect(&rect);
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
//绘图
for(i=0;i<nx;i++)
for (j=0;j<nz;j++)
{
MemDC.SetPixel(i,j,RGB(250*vel[i][j]/vel_max,0,0));
}
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,rect.right,rect.bottom,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}