欢迎来到天天文库
浏览记录
ID:34745371
大小:73.68 KB
页数:9页
时间:2019-03-10
《利用mfc在运行中动态创建新窗口》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、利用MFC在运行中动态创建新窗口 在程序运行中,经常要利用对话框来给出某些提示,或者接收用户的反馈。然而在莫些场合下,仅仅利用对话框的方式是不够的。我们可能需要弹出一个新窗口,它包含自己的菜单条,对话框和状态条;当然,我们可以在对话框里加入菜单条,对话框和状态条,这在技术上是完全可行的,然而为何不直接创建新的窗口呢?本文给出了在MFC下的一种方法。 我们知道,Windows编程下,创建新窗口包括两个步骤: (1)注册相应的Windows窗口类; (2)根据注册的窗口类,生成某个窗口。 然而如果在MFC下,想要利用C++和MFC的特
2、性,我们最好利用现成的MFC类,从其继承过来,并加以改造,以添加我们必须的元素。 以下给出具体例子,主窗口显示一个矩形图形,在主窗口单击,将弹出包含编辑控件的新窗口。注意可以创建多个新窗口,当主窗口关闭时,所有新窗口也随之关闭。 步骤一,创建一个SDI工程Test。 编辑CtestView:OnDraw函数,在客户区画一个矩形:voidCTestView::OnDraw(CDC*pDC){ CTestDoc*pDoc=GetDocument(); ASSERT_
3、VALID(pDoc); //TODO:adddrawcodefornativedatahere //DrawarectangleinClient pDC->Rectangle(50,50,200,200); pDC->TextOut(10,10,"在窗口单击鼠标左键,创建新窗口");} 步骤二:利用ClassWizard从CframeWnd继承新窗口的类CnewFrame: 在资源里资源:
4、 简单起见,工具栏仍然采用主窗口的工具栏和状态条。 在CNewFrame.H的类声明中插入工具栏和状态栏对象的声明:protected://controlbarembeddedmembers CStatusBarm_wndStatusBar; CToolBarm_wndToolBar; 在CNewFrame响应WM_CREATE消息,在CNewFrame::OnCreate中装载工具栏和状态条:intCNewFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){ if(CFram
5、eWnd::OnCreate(lpCreateStruct)==-1) return-1; //TODO:Addyourspecializedcreationcodehere if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD
6、WS_VISIBLE
7、CBRS_TOP
8、CBRS_GRIPPER
9、CBRS_TOOLTIPS
10、CBRS_FLYBY
11、CBRS_SIZE_DYNAMIC)
12、
13、 !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) //简单起见
14、,仍然装载主窗口的工具栏 //用户也可装载自己的工具栏 { TRACE0("Failedtocreatetoolbarn"); return-1;//failtocreate } if(!m_wndStatusBar.Create(this)
15、
16、 !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failedtocreatestatusbarn"); return-1;//failtocreate }
17、 //TODO:Deletethesethreelinesifyoudon''''twantthetoolbarto //bedockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); staticints_nNewFrameID=0; s_nNewFrameID++; CStringstr; str.Format("第%d号新窗口",s_nNewFrameID); Set
18、WindowText(str);//设置新窗口的标题 return0;} 步骤三:窗口的销毁的处理。如果我们能确保只创建一个新窗口的话,那么这个步骤可以跳过,我们无须额外的代码
此文档下载收益归作者所有