CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

一个MDI的问题,大侠进来帮小妹一把,谢谢############################################

楼主popyyb(subreina)2003-09-03 20:52:15 在 VC/MFC / 界面 提问

我新建了一个MDI应用程序,已经解决了:把初始的子窗口关闭的问题,现在我想这样:  
   
  点击新建按钮,出来一个Dialog可以对新建的子窗口的大小进行设定,点击Dialog上的ok后新建相应大小的子窗口,另外该子窗口不能最大化,不过能够随着父窗口的变化而相应调整比例。  
   
  好像有点罗索,不知道这样的功能能否实现,谢谢 问题点数:20、回复次数:14Top

1 楼xiangshifu99(做男人挺好)回复于 2003-09-03 23:31:01 得分 2

很好哪   取得子窗口的句柄,设置属性就可以了Top

2 楼cymlife(陈寞)回复于 2003-09-04 00:00:04 得分 10

写两个函数在如下:  
  CMDIChildWnd*   CMainFrame::CreateNewChild(CRuntimeClass   *pClass,   UINT   nResources,   HMENU   hMenu,   HACCEL   hAccel)  
  {  
  ASSERT(pClass   !=   NULL);  
  CMDIChildWnd*   pFrame   =   (CMDIChildWnd*)   pClass->CreateObject();  
  ASSERT_KINDOF(CMDIChildWnd,   pFrame);  
   
  //   load   the   frame  
  CCreateContext   context;  
  context.m_pCurrentFrame   =   this;  
   
  if   (!pFrame->LoadFrame(nResources,  
  WS_OVERLAPPEDWINDOW   |   FWS_ADDTOTITLE,   NULL,   &context))  
  {  
  TRACE0("Couldn't   load   frame   window.\n");  
  delete   pFrame;  
  return   NULL;  
  }  
   
  return   pFrame;  
  }  
   
  void   CMainFrame::FinalReleaseChild(CMDIChildWnd*   pChildFrame,   UINT   nResources,   HMENU   hMenu,   HACCEL   hAccel)  
  {  
  if   (pChildFrame   !=   NULL)  
  {  
  CString   strFullString,   strTitle;  
  if   (strFullString.LoadString(nResources))  
  AfxExtractSubString(strTitle,   strFullString,   CDocTemplate::docName);  
   
  //   set   the   handles   and   redraw   the   frame   and   parent  
  pChildFrame->SetHandles(hMenu,   hAccel);  
  pChildFrame->SetTitle(strTitle);  
  pChildFrame->InitialUpdateFrame(NULL,   TRUE);  
  }  
  }  
   
  使用方法:  
  void   myTest()  
  {  
  CMainFrame*   pFrame   =   STATIC_DOWNCAST(CMainFrame,   m_pMainWnd);  
   
  CMyChildFrame*   pMyChildFrame   =   (CMyChildFrame*)pFrame->CreateNewChild(  
  RUNTIME_CLASS(CMyChildFrame),   IDR_MYTYPE,   m_hMDIMenu,   m_hMDIAccel);  
   
  pFrame->FinalReleaseChild(pMyChildFrame   ,   IDR_MYTYPE);  
   
                  //做想做的事情  
                  pMyChildFrame->MoveWindow(10,   10,   100,   100);  
   
  HMENU   hSysMenu   =   ::GetSystemMenu(pMyChildFrame->m_hWnd,   FALSE);  
  EnableMenuItem(hSysMenu,   SC_MAXIMIZE,   MF_BYCOMMAND   |   MF_GRAYED);  
   
  pMyChildFrame->SetWindowTitle("My   Test");  
  pMyChildFrame   ->ShowWindow(SW_SHOW);  
  }  
  Top

3 楼cymlife(陈寞)回复于 2003-09-04 09:42:08 得分 2

首先,创建一个CMyChildFrame的类,直接用CChildFrame也可以。  
  Test函数放在哪里都可以,比如CMainFrame::Test(),作为测试,它可以是对应一个菜单的消息映射函数。Top

4 楼cymlife(陈寞)回复于 2003-09-04 09:44:52 得分 0

哎,我可不是大侠哦!Top

5 楼flinming(flinming)回复于 2003-09-04 09:52:01 得分 0

当然可以实现。。一般是movewindow实现了Top

6 楼flinming(flinming)回复于 2003-09-04 10:51:17 得分 2

【点击新建按钮,出来一个Dialog可以对新建的子窗口的大小进行设定】  
   
  你就通过setwindowpos设置子窗体的大小  
   
  如果父窗体变化的时候,你就通过在父窗体的movesize事件了,取得父窗体当前得窗体大小  
  比如有个rect,你就根据这个坐标来控制子窗体得大小,通过子窗体movewindow到rect得区域Top

7 楼crazyeagle(疯狂鹰)回复于 2003-09-04 13:09:00 得分 0

类似观注!!Top

8 楼xiaoliuzi(小六子)回复于 2003-09-04 13:45:22 得分 0

upTop

9 楼he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net)回复于 2003-09-04 17:35:08 得分 4

BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs)  
  {  
  //   TODO:   Modify   the   Window   class   or   styles   here   by   modifying  
  //     the   CREATESTRUCT   cs  
   
  if(   !CMDIChildWnd::PreCreateWindow(cs)   )  
  return   FALSE;  
  cs.cx   =   100;  
  cs.cy   =   300;  
   
  return   TRUE;  
  }Top

10 楼xiaoliuzi(小六子)回复于 2003-09-05 08:41:52 得分 0

upTop

11 楼popyyb(subreina)回复于 2003-09-05 10:44:27 得分 0

大侠,我这样写,为什么要点击ok按钮两三次,才show出子窗体啊,为什么?  
   
  BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs)  
  {  
  //   TODO:   Modify   the   Window   class   or   styles   here   by   modifying  
  //     the   CREATESTRUCT   cs  
   
  if(   !CMDIChildWnd::PreCreateWindow(cs)   )  
  return   FALSE;  
   
          if(   IDOK   ==   m_pDlg.DoModal())  
  {  
   
  cs.cx=   720;//m_pDlg.sizeX;//100;  
  cs.cy=   576;//m_pDlg.sizeY;//200;  
  cs.x   =   100;  
  cs.y   =   100;  
   
  return   TRUE;  
  }  
  else  
  return   FALSE;  
  }Top

12 楼popyyb(subreina)回复于 2003-09-05 12:26:08 得分 0

?Top

13 楼he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net)回复于 2003-09-05 15:33:07 得分 0

原因没有弄清楚  
   
  CChildFrame::CChildFrame()  
  {  
   
          m_x   =   200;  
          m_y   =   100;  
          if(   IDOK   ==   m_pDlg.DoModal())  
  {  
            m_x   =   dlg.m_x;  
                              m_y   =   dlg.m_y;  
  }  
   
  }  
  这样可以解决  
  但你的原因没有弄清楚Top

14 楼popyyb(subreina)回复于 2003-09-05 22:44:48 得分 0

upTop

相关问题

  • 帮小妹一把!!!1
  • 再帮小妹一把!!!!!
  • 帮帮小妹!
  • 帮帮小妹:(
  • 帮帮小妹!
  • 帮帮小妹!!
  • 帮帮小妹~~~
  • 哪为大哥帮小妹一把?
  • 帮帮小妹吧
  • 帮小妹一把,一个很奇怪的问题

关键词

  • 函数
  • null
  • 窗体
  • cmdichildwnd
  • nresources
  • strfullstring
  • pframe
  • 新建
  • cchildframe
  • haccel

得分解答快速导航

  • 帖主:popyyb
  • xiangshifu99
  • cymlife
  • cymlife
  • flinming
  • he_zhidan

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo