MFC 在视图里放一个对话框 使对话框大小动态符合视图大小

角落里的人_Zero 2014-04-20 03:20:41
【MFC】 我把主视图窗口分割成了一行两列两个窗格,分别在每个窗格里显示一个对话框,并通过菜单同时切换两个格窗里的对话框,但是我想让对话框的大小动态符合它自己格窗的大小,我就在CMainFrame类里处理OnSize事件,可是怎么也实现不了,希望各位能给我一个解决的方法!谢谢!
【CMainFrame.h】
CRect rcLeft,rcRight,rcFrame;
【CMainFrame.cpp】
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
。。。。。。。
//获取两个格窗的客户区域和主窗口的客户区域
m_wndSplitter.GetPane(0,0)->GetClientRect(&rcLeft);
m_wndSplitter.GetPane(0,1)->GetClientRect(&rcRight);
GetClientRect(&rcFrame);
。。。。。。
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
// CFrameWnd::OnSize(nType, cx, cy);
CWnd *pLeftDlg = GetDlgItem(IDD_DIALOG1);
CWnd *pRightDlg = GetDlgItem(IDD_DIALOG1_LEFT);
pLeftDlg->SetWindowPos(&wndTop,rcLeft.left,rcFrame.top,rcLeft.Width(),rcFrame.Height(),NULL);
pRightDlg->SetWindowPos(&wndTop,rcRight.left,rcFrame.top,rcRight.Width(),rcFrame.Height(),NULL);
}
错误提示:Ex20b.exe 中的 0x77834671 处未处理的异常: 0xC015000F: 正被停用的激活上下文不是最近激活的。
...全文
264 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sugar_lv 2015-10-28
  • 打赏
  • 举报
回复
问下楼主,怎么在视图中创建对话框
  • 打赏
  • 举报
回复
哈哈 谢谢你们 !问题解决了 是参数问题
真相重于对错 2014-04-21
  • 打赏
  • 举报
回复
用cfromview
kuankuan_qiao 2014-04-21
  • 打赏
  • 举报
回复

OnSize函数里引用对话框程序 感觉不是很妥当
schlafenhamster 2014-04-21
  • 打赏
  • 举报
回复
"如果是都是NULL怎么办" 应该有 !=0 的时候
  • 打赏
  • 举报
回复
引用 2 楼 gz_qmc 的回复:
好象你用CFromView类就不需要怎么麻烦了 他自己关联的对话框自己会适应
如果我用的对话框继承自CFormView 那我要是想创建多个这样的对话框先隐藏起来 是用Create还是CreateDlg呢? 怎么用?
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
cx=0 时: CWnd *pLeftDlg = GetDlgItem(IDD_DIALOG1); CWnd *pRightDlg = GetDlgItem(IDD_DIALOG1_LEFT); 这2个指针会=0; 所以要检测不是NULL
如果是都是NULL怎么办?
  • 打赏
  • 举报
回复
引用 4 楼 dingxz105090 的回复:

CWnd *pLeftDlg = GetDlgItem(IDD_DIALOG1);
CWnd *pRightDlg = GetDlgItem(IDD_DIALOG1_LEFT);
if(pLeftDlg)
           pLeftDlg->SetWindowPos(&wndTop,rcLeft.left,rcFrame.top,rcLeft.Width(),rcFrame.Height(),NULL);
if(pRightDlg)
           pRightDlg->SetWindowPos(&wndTop,rcRight.left,rcFrame.top,rcRight.Width(),rcFrame.Height(),NULL);
我这样试过 可是好像在遇到if就直接跳出去了 没有效果。。。
凌乱哥 2014-04-20
  • 打赏
  • 举报
回复

CWnd *pLeftDlg = GetDlgItem(IDD_DIALOG1);
CWnd *pRightDlg = GetDlgItem(IDD_DIALOG1_LEFT);
if(pLeftDlg)
           pLeftDlg->SetWindowPos(&wndTop,rcLeft.left,rcFrame.top,rcLeft.Width(),rcFrame.Height(),NULL);
if(pRightDlg)
           pRightDlg->SetWindowPos(&wndTop,rcRight.left,rcFrame.top,rcRight.Width(),rcFrame.Height(),NULL);
  • 打赏
  • 举报
回复
我加了一个判断语句 结果是CWnd *pLeftDlg 和CWnd *pRightDlg 都是NULL 那么 我在onsize里应该怎么写?
gz_qmc 2014-04-20
  • 打赏
  • 举报
回复
好象你用CFromView类就不需要怎么麻烦了 他自己关联的对话框自己会适应
schlafenhamster 2014-04-20
  • 打赏
  • 举报
回复
cx=0 时: CWnd *pLeftDlg = GetDlgItem(IDD_DIALOG1); CWnd *pRightDlg = GetDlgItem(IDD_DIALOG1_LEFT); 这2个指针会=0; 所以要检测不是NULL

15,979

社区成员

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

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