正在加载图片...
第14单元对话框 针成员变量,通过该指针可访问非模态对话框对象 3.通过调用 CDialog- reate()函数来启动非模态对话框,而不是象模态对话框那样 使用 CDialog: DoModal()来启动,这是应用非模态对话框的关键之处。由于 Create()函 数不会启动新的消息循环,非模态对话框与应用程序共用同一个消息循环,这样非模态对话 框就不会垄断用户的输入。 Create()函数在显示了非模态对话框后就立即返回,而 DoModal ()是在模态对话框被关闭后才返回的 4.必须重载并重新编写对话框的OnOK()和 On Cancel()函数,并在 On Cancel() 函数中调用 Destroy Window()函数来关闭非模态对话框。 Destory Window()是CWnd类 的成员函数,用于关闭窗口 5.因为非模态对话框对象是用new操作符构建的,因此必须在对话框关闭后,用 delete 操作符删除之 6.必须有一个标志表明非模态对话框是否打开。这样做的原因是用户有可能在打开 个模态对话框的情况下,又一次选择打开命令。应用程序根据该标志决定是打开一个新的对 话框,还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中指向非模态对话框对象 的指针作为这种标志,当对话框关闭时,给该指针赋NULL值,以表明该对话框对象已不 存在了。 例14-3将例14-2的签名留念簿中的对话框改为无模式对话框。用户可用鼠标右键调 出签名对话框,并在不退出该对话框的情况下用鼠标左键将输入的签名显示在窗口客户区 说明:在向项目中添加对话框模板资源时,要在其属性对话框的 More Styles页中 选择ⅵ isible项。其他同例14-2 程序:该程序中的签名类 SIgnal和应用程序类与上例相同,因此下面仅列出了框 架窗口类和对话框类。由于这两个类的成员函数中存在相互引用的情况,所以我们将框架窗 口类的声明放在前面,接下来是对话框类的定义,并在框架窗口类之前加入了一条对对话框 类的声明。最后是这两个类的成员函数定义 ∥/框架窗口类 #define mAX name 250 class CMy Wnd: public CFrameWnd CSignal m signalList [MAX NAME] t CNameDlg *m pNamedlg ablie protect afx msg void OnLBut ton Down ( UINT nFlags, CPoint point) afx msg void OnRButtonDown ( UINT n Flags, CPoint point)第 14 单元 对话框 286 针成员变量,通过该指针可访问非模态对话框对象; 3.通过调用 CDialog::Create()函数来启动非模态对话框,而不是象模态对话框那样 使用 CDialog::DoModal()来启动,这是应用非模态对话框的关键之处。由于 Create()函 数不会启动新的消息循环,非模态对话框与应用程序共用同一个消息循环,这样非模态对话 框就不会垄断用户的输入。Create()函数在显示了非模态对话框后就立即返回,而 DoModal ()是在模态对话框被关闭后才返回的。 4.必须重载并重新编写对话框的 OnOK()和 OnCancel()函数,并在 OnCancel() 函数中调用 DestroyWindow()函数来关闭非模态对话框。DestoryWindow()是 CWnd 类 的成员函数,用于关闭窗口; 5.因为非模态对话框对象是用 new 操作符构建的,因此必须在对话框关闭后,用 delete 操作符删除之; 6.必须有一个标志表明非模态对话框是否打开。这样做的原因是用户有可能在打开一 个模态对话框的情况下,又一次选择打开命令。应用程序根据该标志决定是打开一个新的对 话框,还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中指向非模态对话框对象 的指针作为这种标志,当对话框关闭时,给该指针赋 NULL 值,以表明该对话框对象已不 存在了。 [例 14-3] 将例 14-2 的签名留念簿中的对话框改为无模式对话框。用户可用鼠标右键调 出签名对话框,并在不退出该对话框的情况下用鼠标左键将输入的签名显示在窗口客户区。 说 明:在向项目中添加对话框模板资源时,要在其属性对话框的 More Styles 页中 选择 Visible 项。其他同例 14-2。 程 序:该程序中的签名类 CSignal 和应用程序类与上例相同,因此下面仅列出了框 架窗口类和对话框类。由于这两个类的成员函数中存在相互引用的情况,所以我们将框架窗 口类的声明放在前面,接下来是对话框类的定义,并在框架窗口类之前加入了一条对对话框 类的声明。最后是这两个类的成员函数定义。 // 框架窗口类 #define MAX_NAME 250 class CNameDlg; class CMyWnd: public CFrameWnd { CSignal m_signalList[MAX_NAME]; int m_nCount; CNameDlg *m_pNameDlg; public: CMyWnd(); ~CMyWnd(); protected: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有