响应WM_SIZE的时候界面刷新出问题,会有重影的现象由于附件的项目用vs2008+feature pack创建,所以低版本打不开说说具体问题背景还原
1、新建单文档项目
2、将CControlWnd类文件包含进单文档项目中
3、在view类中建该类的指针对象
CControlWnd* m_controlWnd;
初始化:
wm_create消息中,
CRect rect(0,0,0,0);
m_controlWnd = new CControlWnd;
BOOL status = m_controlWnd->Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect,
this, 1002);
if ( !status )
return -1;响应wm_size消息,if ( m_controlWnd != NULL && ::IsWindow(m_controlWnd->m_hWnd) )
{
CRect rect;
GetClientRect(&rect);
m_controlWnd->SetWindowPos(NULL, rect.left, rect.top,
rect.Width(), rect.Height(), SWP_NOZORDER | SWP_NOACTIVATE);
}build,run调整文档尺寸的时候,界面刷新就出问题了谢谢~
该帖包含附件:http://d.download.csdn.net/down/731984/soliddream66
1、新建单文档项目
2、将CControlWnd类文件包含进单文档项目中
3、在view类中建该类的指针对象
CControlWnd* m_controlWnd;
初始化:
wm_create消息中,
CRect rect(0,0,0,0);
m_controlWnd = new CControlWnd;
BOOL status = m_controlWnd->Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect,
this, 1002);
if ( !status )
return -1;响应wm_size消息,if ( m_controlWnd != NULL && ::IsWindow(m_controlWnd->m_hWnd) )
{
CRect rect;
GetClientRect(&rect);
m_controlWnd->SetWindowPos(NULL, rect.left, rect.top,
rect.Width(), rect.Height(), SWP_NOZORDER | SWP_NOACTIVATE);
}build,run调整文档尺寸的时候,界面刷新就出问题了谢谢~
该帖包含附件:http://d.download.csdn.net/down/731984/soliddream66
解决方案 »
- 有使用vxl做图像处理的么?交流一下
- CButtonST是否适合checkbox?
- error LNK2001: _IID_ICaptureGraphBuilder2
- 采集卡控制问题
- 现有大量实时数据需要滚屏显示,分多行,每行50个字符左右。 速度要求达到每秒钟至少2700行。 如何用VC在对话框中实现这一功能??
- 加分贴 《500分: 谁能解决者立刻给分,本贴不算,up 有分》
- 新手遇难题,请帮帮忙!
- 怎么在DLL中使用Template?
- 菜鸟的问题………………
- 我想正常退出windows重启动,ExitWindowEx()参数怎么设??
- AMT 的SDK中LocalAgent 本地执行失败(进者有分)
- 经常听人说用MFC可以做任何你能想像的到的事,除非你想像不到.
为了保险,再添加个纳米盘的附件下载吧
在视图类的PreCreateWindow中添加
cs.dwExStyle |= WS_CLIPCHILDREN;
发现现在效果变成这样了
2. CControlWnd 的 OnEraseBkgnd, 画上点东西,或者仅仅是用单色填充整个区域。
CDC* pDC = GetDC();
pDC->LPtoDP(&rect);
ReleaseDC(pDC);2.如果还有问题,你可以写一个强制刷新函数,自己直接填充窗口背景色。或者在wm_size中直接调用Invalidate函数。
BOOL CControlWnd::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rc;
GetClientRect(rc);
pDC->FillRect(rc, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));
return TRUE;
return CWnd::OnEraseBkgnd(pDC);
}
在onSize最后添加Invalidate();CControlWnd创建的时候是用WS_CHILD和WS_VISIBLE,没有设置透明选项
BOOL status = m_controlWnd->Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect,
this, 1002);
MoveWindow和在wm_size中直接调用Invalidate函数没有用强制刷新函数,自己直接填充窗口背景色有效果
GetClientRect(rc);
pDC->FillRect(rc, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));
OnPaint//创建画笔C++对象
CPen* pPenBlue = new CPen;
//创建画笔
pPenBlue->CreatePen(PS_SOLID,5,RGB(0,150,0));
//选中当前画笔,并保存以前的画笔
CPen* pOldPen = dc.SelectObject(pPenBlue);
//画圆
dc.Ellipse(400,400,200,200);
//恢复旧画笔
dc.SelectObject(pOldPen);
//删除新建的画笔对象
delete pPenBlue;
之后拖拽改变尺寸后,图中画的椭圆没有受到影响,应该没有问题了谢谢各位大大了~