残影问题 本帖最后由 yeman999 于 2011-07-11 19:07:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看起来是对话框处理了wm_erasebkgnd。 如何解决呢?重写wm_erasebkgnd对应的虚函数?里面应该做什么操作呢? 照lz说法应该没处理wm_erasebkgnd,既然没处理发生这个透明现象就奇怪了,有一点要说的就是,OnPaint里调用UpdateWindow()或Invalidate()之类的难道不会造成循环调用?UpdateWindow()或Invalidate()可都会引起WM_PAINT呀,lz你想想? 代码补全。可能原因在于DrawToHDC( hDC, &rect );这个HDC是什么?另外双缓冲DC需要画布。 void CmediaCutterDlg::ShowImage( IplImage* img, UINT ID ) { CDC* pDC = GetDlgItem( ID ) ->GetDC(); HDC hDC = pDC ->GetSafeHdc(); CRect rect; GetDlgItem(ID) ->GetClientRect( &rect ); int rw = rect.right - rect.left; int rh = rect.bottom - rect.top; int iw = img->width; int ih = img->height; // 使图片的显示位置正好在控件的正中 int tx = (int)(rw - iw)/2; int ty = (int)(rh - ih)/2; SetRect( rect, tx, ty, tx+iw, ty+ih ); ::CvvImage cimg; cimg.CopyOf( img ); cimg.DrawToHDC( hDC, &rect ); ReleaseDC( pDC );} 你把onpaint内showImage的调用注释掉确定是不是它影响的,函数本身没看出啥问题, 在OnPaint里应该用CPaintDC这里 { CDialog::UpdateWindow();//1不Update的话有前景覆盖图片后无法显示 ShowImage( TheImage, IDC_ShowImg );//2 //Invalidate(); CDialog::OnPaint(); 去掉CDialog::OnPaint();用CPaintDC实现ShowImage的功能整个客户区用一个背景色盖一下 MFC中如何根据一 定条件设置编辑框的可读性 向高手求助:在多网卡的机器上,我如何从指定的网卡上ping外部主机呢?? CDateTimeCtrl 控件显示问题 菜鸟再问:关闭从父窗口弹出的子窗口时,触发的是父窗口上的什么事件? 一个简单CString的问题 超级菜鸟求教!!!!!! 一个有关apache设置问题 大家帮忙推荐一本VC的书 —— 一个VC初学者 立即给分,简单问题! 我受不了拉。关于dll中的menu DLL 指针获取 再内存中画图贴到pDC上时,为什么背景颜色不能改变啊?
有一点要说的就是,OnPaint里调用UpdateWindow()或Invalidate()之类的难道不会造成循环调用?
UpdateWindow()或Invalidate()可都会引起WM_PAINT呀,lz你想想?
可能原因在于DrawToHDC( hDC, &rect );这个HDC是什么?另外双缓冲DC需要画布。
void CmediaCutterDlg::ShowImage( IplImage* img, UINT ID )
{ CDC* pDC = GetDlgItem( ID ) ->GetDC();
HDC hDC = pDC ->GetSafeHdc(); CRect rect;
GetDlgItem(ID) ->GetClientRect( &rect );
int rw = rect.right - rect.left;
int rh = rect.bottom - rect.top;
int iw = img->width;
int ih = img->height;
// 使图片的显示位置正好在控件的正中
int tx = (int)(rw - iw)/2;
int ty = (int)(rh - ih)/2;
SetRect( rect, tx, ty, tx+iw, ty+ih );
::CvvImage cimg;
cimg.CopyOf( img );
cimg.DrawToHDC( hDC, &rect ); ReleaseDC( pDC );
}
这里
{
CDialog::UpdateWindow();//1不Update的话有前景覆盖图片后无法显示 ShowImage( TheImage, IDC_ShowImg );//2
//Invalidate();
CDialog::OnPaint();
去掉CDialog::OnPaint();
用CPaintDC实现ShowImage的功能
整个客户区用一个背景色盖一下