MFC窗口中显示的图片在改变窗口的大小或者拉动滚动条时不见了,请问怎样改变窗口大小时,显示的图片不消失

最近我在做一个图像处理小程序,用VC++(VS2005版)MFC编程,调用不同的函数处理图片。由于处理的过程比较多,在改变窗口的大小时(最大化或者拉动滚动条),窗口的图片... 最近我在做一个图像处理小程序,用VC++ (VS2005版)MFC编程,调用不同的函数处理图片。由于处理的过程比较多,在改变窗口的大小时(最大化或者拉动滚动条),窗口的图片消失了,请问怎样在改变窗口的大小后,对窗口进行重绘啊
麻烦能不能具体点呢,具体的WN_SIZE消息响应函数怎样处理?窗口中有多个图片,窗口显示不完的图片部分,就不能显示,拉动滚动条也不能看见。
展开
 我来答
孤松独海
2011-04-24 · TA获得超过1512个赞
知道大有可为答主
回答量:1220
采纳率:0%
帮助的人:441万
展开全部
如果是改变大小,那就WM_SIZE消息 在OnSize里面处理
拉动滚动条 就需要坐标转换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
201103zd
2012-04-10
知道答主
回答量:7
采纳率:0%
帮助的人:3.6万
展开全部
void CADDigitView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
if(m_pOldBmp != NULL)
{
m_DCMem.SelectObject(m_pOldBmp);
m_bmpMem.DeleteObject();
}

void CADDigitView::OnDraw(CDC* pDC)
{
CRect rcClient;
GetClientRect(rcClient);
if(m_DCMem.m_hDC == NULL)
{
m_DCMem.CreateCompatibleDC(pDC);
m_DCMem.SetTextColor(m_clrTxt);
m_DCMem.SetBkMode(TRANSPARENT);
}

if(m_bmpMem.m_hObject == NULL)
{
m_bmpMem.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
m_pOldBmp = m_DCMem.SelectObject(&m_bmpMem);
}

if (NULL != m_pThPara)
{
this->ShowDigit(&m_DCMem);
}
pDC->DPtoLP(&rcClient);
pDC->BitBlt(rcClient.left, rcClient.top,
rcClient.Width(), rcClient.Height(),
&m_DCMem, 0, 0, SRCCOPY);
}

}
其中m_DCMem,m_bmpMem及m_pBmpMem在类的中定义为CDC, CBitmap及CBitmap*。改OnDraw及OnSize函数如上即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssilspro
2011-04-24 · TA获得超过2624个赞
知道大有可为答主
回答量:1148
采纳率:0%
帮助的人:1647万
展开全部
绘图任务一般都放到WM_PAINT消息中
MFC中的OnPaint消息处理函数中

在WM_SIZE消息中或OnSize中保存改变大小的窗体的尺寸
在OnPaint中根据这些状态变量和已经载入过的数据进行绘图任务

在类视图里选择要添加消息的类,对话框的是对话框类,单多文档的是VIEW类,
然后再属性窗口里标题栏下的按钮列里点 消息按钮
在下面的列表里找到WM_SIZE 双击或在右边下拉组合框选添加
更多追问追答
追问
能不能说的具体点
void CLoadView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
}
在这个函数中还需要添加什么语句?
void CLoadView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CScrollView::OnPrint(pDC, pInfo);
}
同样这个函数里面呢?
追答
OnSize里你可以把大小记录到变量,并触发更新窗口 Invalidate系列函数或UpdateWindow等
把你画图的代码放到OnPrint里 按照保存的大小拉伸下

至于滚动条的 也需要添加事件处理函数保存下滚动条位置,同时触发更新
在Onpain绘制时可以先绘制到内存dc中在根据保存的滚动条位置复制到相应位置
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cb8d0e198
2011-04-24 · TA获得超过1198个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:755万
展开全部
添加WM_SIZE消息响应函数进行处理~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a8c21ei3g
2011-04-25 · TA获得超过2667个赞
知道小有建树答主
回答量:1204
采纳率:33%
帮助的人:651万
展开全部
CPU或者是GPU没处理得过来
就是那个没有重绘无效区域了~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式