关于picture control重绘的问题

Drenched_bj 2014-03-28 10:07:44
用MFC+OpenCV写的一个对话框程序,添加一个picture control控件,然后显示图像。图像显示正常,但是当对话框由非顶层窗口变为顶层窗口时,图像闪一下就没了,是背景擦除了吗?我添加了一个button控件然后在他的响应函数里添加显示图像的代码,并且设置了标志位,在OnPaint函数里添加了显示图片的代码。
void CMFC_demoDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码

CString szFileFilter=_T("所有支持的图像文件 (*.jpg;*.gif;*.bmp;...)|*.jpg;*.gif;*.bmp|Tiff图像文件(*.tiff;*.tif)|*.tiff;*.tif||");
CString pathname;
CFileDialog dlg(
true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter);
POSITION pos=dlg.GetStartPosition();
if(dlg.DoModal()==IDOK)
{
pathname=dlg.GetNextPathName(pos);
UpdateWindow();
}
IplImage *image=NULL; //原始图像
if(image) cvReleaseImage(&image);
image = cvLoadImage(pathname,1); //显示图片
DrawPicToHDC(image, IDC_ShowImg);
m_image = image;
m_flags = true;
}

void CMFC_demoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
if (m_flags)
{
DrawPicToHDC(m_image, IDC_ShowImg);
}
...全文
347 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
STU_11wxzou 2015-04-20
  • 打赏
  • 举报
回复
引用 5 楼 u011056751 的回复:
ShowImage 总是提示未定义标示符!~~
我也遇到这个问题,什么原因啊?
良柯 2015-04-08
  • 打赏
  • 举报
回复
谢了,刚学VC也遇到了这个问题. CDialog::UpdateWindow();//重绘函数里,这句不能少 pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);
Mr点c小青年 2015-01-19
  • 打赏
  • 举报
回复
ShowImage 总是提示未定义标示符!~~
Drenched_bj 2014-03-31
  • 打赏
  • 举报
回复
解决了,在onpaint函数里的else语句中添加下列语句:
CDialog::UpdateWindow();                // 更新windows窗口,如果无这步调用,图片显示还会出现问题
ShowImage( TheImage, IDC_ShowImg );    // 重绘图片函数
Drenched_bj 2014-03-29
  • 打赏
  • 举报
回复
引用 2 楼 wowmboy 的回复:
补充一下,图像没了后改变窗口大小,图像会再次显示出来
感谢帮顶!
Drenched_bj 2014-03-28
  • 打赏
  • 举报
回复
补充一下,图像没了后改变窗口大小,图像会再次显示出来
小生我怕怕 2014-03-28
  • 打赏
  • 举报
回复
补充一下,图像没了后改变窗口大小,图像会再次显示出来

19,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧