听说可以把图先保存到内存.
是不是这样就可以一次性把内存里面的图重绘?(把内存的位图直接在Onpaint里调用,怎么调用?)
是不是这样就可以一次性把内存里面的图重绘?(把内存的位图直接在Onpaint里调用,怎么调用?)
解决方案 »
- MFC+Opengl:截取对话框的屏幕后,直接作为背景纹理
- 操作系统对于"堆"内存的管理,一个疑惑
- 到底有多少种往按钮发送左键点击的方法?
- VC中怎么将txt文件导入到listbox中
- 有无简便方法修改服务器发给客户端的http内容
- 求龚建伟串口实例scporttest.zip
- VC++如何实现drag and drop
- 控件中相应快捷建的问题
- 用dao连接sqlserver2000中执行update和delete语句报错是怎么回事
- 关于更改StaticText颜色的问题续:我如何才能改变窗口中某一StaticText的颜色呢?
- 始终没有数据读出,急急急!!!!!!!!1
- VC7 新建项目时出错!
CFileDialog dlg(true,NULL); //构建打开图像对话框
dlg.DoModal();
m_PicPath = dlg.GetPathName(); //得到图像的路径名
image.load(dlg.GetPathName()); //将图像从硬盘中读入,解码,并存入到自己定义对象(image)中
UpdateAllViews(NULL); //更新视图,此函数会调用WM_PAINT消息,并最终会调用
// CImageRetrievalView类中的OnDraw函数,显示图像
然后在VIEW类中的OnDraw函数中完成显示部分UpdateData(FALSE); //把m_JiShu中的数传给EDIT控件,对图像计数// TODO: Add your specialized code here and/or call the base class//以下是对打开关键图进行显示CWnd* pWnd = GetDlgItem(IDC_KEY_IMAGE);//得到指向该ID的窗口类的指针
CRect rectWnd;
pWnd->GetWindowRect(&rectWnd); //得到该窗口的大小
//以下代码是为了防止宽高比不同的图像,显示在宽高比固定的Picture控件中,会出现变形
double wk = 0,hk = 0,wc = 0,hc = 0;
wk = GetDocument()->keyimage.getWidth();
hk = GetDocument()->keyimage.getHeight();
wc = rectWnd.Width();
hc = rectWnd.Height();if (wk / hk > wc / hc) //这种情况,说明控件中的高度过大,所以高度不用全部显示
{
double hcnew = (hk / wk)*wc;
rectWnd.top = int (rectWnd.top + (hc-hcnew)/2);
rectWnd.bottom = int (rectWnd.bottom - (hc-hcnew)/2);
}
else if (wk / hk < wc / hc)//这种情况,说明控件中的宽度过大,所以宽度不用全部显示
{
double wcnew = (wk / hk)*hc;
rectWnd.left = int (rectWnd.left + (wc-wcnew)/2);
rectWnd.right = int (rectWnd.right - (wc-wcnew)/2);
}
ScreenToClient(rectWnd); //将屏幕的图像转换成窗口尺寸的大小来显示
GetDocument()->keyimage.draw(pDC->GetSafeHdc(), rectWnd);
//显示该图像,因为image是在CImageRetrievalDoc类中定义的,所以
//先要得到Document类的指针,GetDocument()就是用来得到该指针的
//以下是对实时显示检索图进行显示CWnd* seekWnd = GetDlgItem(IDC_SEEK_IMAGE);//得到指向该ID的窗口类的指针
CRect rectseekWnd;
seekWnd->GetWindowRect(&rectseekWnd); //得到该窗口的大小
//以下代码是为了防止宽高比不同的图像,显示在宽高比固定的Picture控件中,会出现变形
double wsk = 0,hsk = 0,wsc = 0,hsc = 0;
wsk = Seekimage.getWidth();
hsk = Seekimage.getHeight();
wsc = rectseekWnd.Width();
hsc = rectseekWnd.Height();if (wsk / hsk > wsc / hsc) //这种情况,说明控件中的高度过大,所以高度不用全部显示
{
double hscnew = (hsk / wsk)*wsc;
rectseekWnd.top = int (rectseekWnd.top + (hsc-hscnew)/2);
rectseekWnd.bottom = int (rectseekWnd.bottom - (hsc-hscnew)/2);
}
else if (wsk / hsk < wsc / hsc)//这种情况,说明控件中的宽度过大,所以宽度不用全部显示
{
double wscnew = (wsk / hsk)*hsc;
rectseekWnd.left = int (rectseekWnd.left + (wsc-wscnew)/2);
rectseekWnd.right = int (rectseekWnd.right - (wsc-wscnew)/2);
}ScreenToClient(rectseekWnd); //将屏幕的图像转换成窗口尺寸的大小来显示//CClientDC TEMPDC(this);
Seekimage.draw(pDC->GetSafeHdc(), rectseekWnd); 这种方式显示的效果比较好,界面美观,因为可以完全符合你自己定义的显示区域大小