OnPaint问题

fan065200 2013-11-18 09:01:12
各位英雄好汉,小弟我在编程时遇到这样难题:
我采用MFC 的MDI 结构,调用CFormView界面,其中CFormView中的Picture控件通过抓图:
CString wnd_name=_T("Figure 1");
hFig = ::FindWindow(NULL,wnd_name);
if (hFig==NULL)
{
hFig = ::FindWindow(NULL,wnd_name);
}
::ShowWindow(hFig, SW_HIDE);
CRect figure_rect;
CWnd *myfigure = GetDlgItem(IDC_STATIC);
myfigure->GetWindowRect(&figure_rect);
long fig_width = figure_rect.Width();
long fig_height = figure_rect.Height();
::SetParent(hFig,myfigure->GetSafeHwnd());
// 去掉MATLAB Figure窗口的标题栏和框架属性
long lStyle = ::GetWindowLong(hFig,GWL_STYLE);
::SetWindowLong(hFig,GWL_STYLE,lStyle );
::ShowWindow(hFig, SW_SHOW);
// 将MATLAB Figure窗口移动到空间位置
::SetWindowPos(hFig,NULL,0,0,fig_width+8,fig_height+33,SWP_NOZORDER | SWP_NOACTIVATE);
// 显示窗口
::ShowWindow(hFig, SW_SHOW);
// 激活主窗口
::SetForegroundWindow(this->m_hWnd);
以上也就是抓取MATLAB的仿真图像,使其显示在picture控件中。

接下来,我通过OnPaint绘图来画:
void CsubForm::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CFormView::OnPaint() for painting messages
::ShowWindow(hFig, SW_HIDE);
CRect figure_rect;
CWnd *myfigure = GetDlgItem(IDC_STATIC);
myfigure->GetWindowRect(&figure_rect);
long fig_width = figure_rect.Width();
long fig_height = figure_rect.Height();
::SetParent(hFig,myfigure->GetSafeHwnd());
// 去掉MATLAB Figure窗口的标题栏和框架属性
long lStyle = ::GetWindowLong(hFig,GWL_STYLE);

::SetWindowLong(hFig,GWL_STYLE,lStyle );
::ShowWindow(hFig, SW_SHOW);
// 将MATLAB Figure窗口移动到空间位置
::SetWindowPos(hFig,NULL,0,0,fig_width+8,fig_height+33,SWP_NOZORDER | SWP_NOACTIVATE);
// 显示窗口
::ShowWindow(hFig, SW_SHOW);
// 激活主窗口
::SetForegroundWindow(this->m_hWnd);
}

我采用类似的代码实现,但是问题来了,当我的子窗口CFormView移到父窗口里,即被父窗口重叠一部分时,我此时拖拽子窗口时,会很卡顿,跟踪的原因就是在OnPaint 中的这个::SetParent(hFig,myfigure->GetSafeHwnd());,我现在不知道该怎么处理了。请问大家这是什么原因,该怎么解决?谢谢。
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-12-19
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
xiaohuh421 2013-11-19
  • 打赏
  • 举报
回复
先判断其父窗口是否设置成了你需要的: GetParent 如果已经是, 就不需要设置了.
xiaohuh421 2013-11-19
  • 打赏
  • 举报
回复
::SetParent(hFig,myfigure->GetSafeHwnd()); 不需要重复设置. 一次即可.
chongdazds 2013-11-18
  • 打赏
  • 举报
回复
zgl7903 2013-11-18
  • 打赏
  • 举报
回复
SetParent 和 SetWindowPos 放到WM_SIZE消息响应中是不是就可以?

15,979

社区成员

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

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