CFormView 在改变大小时,控件闪烁的问题

原创 2015年11月17日 12:21:44

下面是 这个问题的 解决办法:

/////////////////////////////////////////////////////////////////////////////
// CFormView 在改变大小时,控件闪烁的问题
//#define VIEW_NO_BORDER
 
BOOL CSizingFormViewView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs
#ifdef VIEW_NO_BORDER
cs.style &= ~WS_BORDER;// no border 
#endif
return CFormView::PreCreateWindow(cs);
}
//
void CSizingFormViewView::OnPaint() 
{
CPaintDC dc(this); // device context for painting
// get size , 
CRect rc;
GetWindowRect(&rc);
rc.OffsetRect(-rc.left,-rc.top);
#ifndef VIEW_NO_BORDER
rc.OffsetRect(-2,-2);// offset -2,-2
#endif
// Create a compatible memory DC 
CDC memDC;
memDC.CreateCompatibleDC(&dc);
// Select a compatible bitmap into the memory DC
CBitmap bitmap;
bitmap.CreateCompatibleBitmap( &dc, rc.Width(), rc.Height());
HBITMAP oldBmp=(HBITMAP)memDC.SelectObject(&bitmap);
// Erase bkg
memDC.FillSolidRect(&rc,GetSysColor(COLOR_MENU));// RGB(210,210,210));
// Let the dialog draw everything into memDC.
SendMessage(WM_PRINT,(WPARAM)memDC.m_hDC,
(LPARAM)(PRF_CHILDREN | PRF_CLIENT ));//| PRF_NONCLIENT | PRF_ERASEBKGND | PRF_OWNED));
// copy to CB for checking
#ifdef TEST
memDC.SelectObject(oldBmp);
OpenClipboard();
EmptyClipboard(); 
SetClipboardData(CF_BITMAP,bitmap);
CloseClipboard();
oldBmp=(HBITMAP)memDC.SelectObject(&bitmap);
#endif
dc.BitBlt(rc.left,rc.top, rc.Width(), rc.Height(),&memDC,0,0,SRCCOPY);
// set back
memDC.SelectObject(oldBmp);
// free
DeleteObject(bitmap.m_hObject);
DeleteObject(memDC);
// do not draw all Ctls ! 
#if 1
UINT id=0;
CWnd *pWnd=0;
//
pWnd=GetDlgItem(IDC_BUTTON1);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_BUTTON2);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_GROUP);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_RADIO1);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_RADIO2);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
// 
pWnd=GetDlgItem(IDC_STATIC1);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_PICTURE);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
//
pWnd=GetDlgItem(IDC_EDIT1);
pWnd->GetClientRect(&rc);
pWnd->ValidateRect(&rc);
#endif
// CFormView::OnPaint();
}

BOOL CSizingFormViewView::OnEraseBkgnd(CDC* pDC) 
{
// TODO: Add your message handler code here and/or call default
return TRUE;
// return CFormView::OnEraseBkgnd(pDC);
}
/////////////////////////////////////////////////////////////////

CFormView 在改变大小时,控件闪烁的问题

下面是 这个问题的 解决办法: ///////////////////////////////////////////////////////////////////////////// // CFo...
  • schlafenhamster
  • schlafenhamster
  • 2015年11月17日 12:21
  • 937

MFC中如何将 CFormView放置到一个CDockablePane中

最近再搭建一个平台,设计到界面设计,然后就遇到题目中所述的问题,简单的讲就是要把CFormView放置到CDockablePane中,利用CDockablePane做成那种浮动的效果,郁闷的发现网络上...
  • u011478505
  • u011478505
  • 2013年09月12日 16:30
  • 1429

C#控件改变大小时闪烁问题

首先是一段窗体控件随窗体大小改变代码,但是在使用这段代码后,当窗体中控件较多时每次改变窗体大小后都会出现闪烁情况 private float X; private float Y; priv...
  • ooleaf123
  • ooleaf123
  • 2015年09月14日 21:02
  • 200

控件改变大小时闪烁问题

利用双缓冲可以避免绘图时图像的闪烁,但是当改变窗体或控件的大小时,依然会有严重的闪烁现象。可以响应窗口消息WM_ERASEBKGND,重载OnEraseBkgnd(CDC*   pDC)直接返回TRU...
  • vanship
  • vanship
  • 2009年04月27日 10:55
  • 610

VC++工作第一天Dialog对话框加载静态背景图片之一BITMAP。

1.首先创建个工程,选对话框然后一直下一步就可以了。 2.添加资源bitmap 3.加载图片,重点来了。搜索了下网上的说法。 ①在类中声明:CBrush m_brush;然后在OnInitDialog...
  • u013777662
  • u013777662
  • 2014年02月25日 18:13
  • 933

VC 点滴 之 重绘

一基本知识: 1.OnPaint和OnDraw函数View的父类的OnPaint函数调用了OnDraw函数,若在子类为WM_PAINT消息添加响应函数OnPaint,OnDraw函数将不会被调用。2....
  • awnucel
  • awnucel
  • 2004年09月03日 11:34
  • 3469

问题解决——MFC SDI程序 CFormView中控件随窗口缩放

SDI程序,是要缩放的,如果是往里输入文字的话,这倒没什么,但是这次我使用的是CFormView类,里面加了控件。下面是对CFormView中控件缩放的分析,以及具体的实现代码。...
  • wlsgzl
  • wlsgzl
  • 2014年06月24日 14:38
  • 3545

【VS开发】关于在CFormView中实现CListCtrl控件的注意事项

【VS开发】关于在CFormView中实现CListCtrl控件的注意事项标签(空格分隔): 【VS开发】今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框中的...
  • LG1259156776
  • LG1259156776
  • 2016年05月03日 16:13
  • 592

用MFC做VS起始页界面

好的软件有好的开始,微软VS IDE的起始界面做的实在不错,色调和布局都是很舒服,这里我动手实现了一个,下面是过程。第一步:用spy++工具观察VS IDE开始界面构成。通过spy++,可以看到开始页...
  • wlwlxj
  • wlwlxj
  • 2006年11月16日 20:48
  • 4014

用MFC做VS起始页界面

好的软件有好的开始,微软VS IDE的起始界面做的实在不错,色调和布局都是很舒服,这里我动手实现了一个,下面是过程。第一步:用spy++工具观察VS IDE开始界面构成。通过spy++,可以看到开始页...
  • wlwlxj
  • wlwlxj
  • 2006年11月16日 20:48
  • 4014
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CFormView 在改变大小时,控件闪烁的问题
举报原因:
原因补充:

(最多只允许输入30个字)