- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用MFC在运行中动态创建新窗口
利用MFC 在运行中动态创建新窗口
在程序运行中,经常要利用对话框来给出某些提示,或者接收用户的反馈。然而在莫些场合下,仅仅利用对话框的方式是不够的。我们可能需要弹出一个新窗口,它包含自己的菜单条,对话框和状态条;当然,我们可以在对话框里加入菜单条,对话框和状态条,这在技术上是完全可行的,然而为何不直接创建新的窗口呢?本文给出了在MFC下的一种方法。 我们知道,Windows编程下,创建新窗口包括两个步骤: (1)注册相应的Windows窗口类; (2)根据注册的窗口类,生成某个窗口。 然而如果在MFC下,想要利用C++和MFC的特性,我们最好利用现成的MFC类,从其继承过来,并加以改造,以添加我们必须的元素。 以下给出具体例子,主窗口显示一个矩形图形,在主窗口单击,将弹出包含编辑控件的新窗口。注意可以创建多个新窗口,当主窗口关闭时,所有新窗口也随之关闭。 步骤一,创建一个SDI工程Test。 编辑CtestView:OnDraw函数,在客户区画一个矩形:void CTestView::OnDraw(CDC* pDC){ CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here // Draw a rectangle in Client pDC-Rectangle( 50, 50, 200, 200); pDC-TextOut( 10, 10, 在窗口单击鼠标左键,创建新窗口);}
步骤二:利用ClassWizard从CframeWnd继承新窗口的类CnewFrame: 在资源里资源:
简单起见,工具栏仍然采用主窗口的工具栏和状态条。
在CNewFrame.H的类声明中插入工具栏和状态栏对象的声明: protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar;
在CNewFrame响应WM_CREATE消息,在CNewFrame::OnCreate中装载工具栏和状态条:int CNewFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) // 简单起见,仍然装载主窗口的工具栏 // 用户也可装载自己的工具栏 { TRACE0(Failed to create toolbarn); return -1; // fail to create }
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0(Failed to create status barn); return -1; // fail to create }
// TODO: Delete these three lines if you dont want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(m_wndToolBar);
static int s_nNewFrameID = 0; s_n
文档评论(0)