您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > MFC对话框与组件控件编程
Lab.ofMarineDynamicSimulation&ControlMFCProgramming1MFC对话框与组件控件编程Lab.ofMarineDynamicSimulation&ControlMFCProgramming2•1、对话框编程•2、组件和ActiveX控件的使用Lab.ofMarineDynamicSimulation&ControlMFCProgramming31、对话框编程•工程中加入有模式对话框•标准控件常用控件•工程中加入无模式对话框•对话框中的数据交换•使用标准对话框Lab.ofMarineDynamicSimulation&ControlMFCProgramming4工程中加入有模式对话框•对话框是基于资源的,资源指定其包含的元素和布局。•对话框包含最基本的窗口元素:控件•一个从CDialog类派生的MFC类完成和对话框界面的联系Lab.ofMarineDynamicSimulation&ControlMFCProgramming5•有模式对话框:对话框关闭之前,用户无法在该程序的其它窗口中工作,如记事本中的字体对话框。•无模式对话框:对话框关闭前,用户可在其它窗口工作(但对话框在最顶端),如记事本中的替换对话框。Lab.ofMarineDynamicSimulation&ControlMFCProgramming6•设计对话框模板–在资源编辑器中插入对话框模板–在模板中添加所需控件–设置控件的各种属性–设计对话框模板时经常使用的工具(如图钉按钮,对齐,统一大小),规划对话框中的各种元素,使之美观大方,使用方便Lab.ofMarineDynamicSimulation&ControlMFCProgramming7•生成对话框类:–ClassWizard生成对话框类派生类–添加数据成员,与控件进行交互操作:•用ClassWizard定义一个与控件相关联的成员变量(可为一控件对象,也可为一数据量),可在构造函数中或OnInnitDialog函数中进行初始化•在程序运行中创建一个MFC控件的窗口对象,使用GetDlgItem方法为对话框的控件获取一个指向CWnd对象的指针–接收来自控件的BN_CLICKED等各种消息:用ClassWizard添加消息映射Lab.ofMarineDynamicSimulation&ControlMFCProgramming8•工程中加入有模式对话框步骤:–使用对话框编辑器创建对话框资源,并用ClassWizard生成派生对话框类,添加数据成员和消息映射–特殊控件初始化:程序控制–在视图中编写代码,激活对话框对象•CTestDialogdlg;•if(dlg.DoModal()==IDOK)•{•…•}•(注:在文件头加上对话框的头文件)Lab.ofMarineDynamicSimulation&ControlMFCProgramming9•有模式对话框的运行过程:–先创建对话框类实例:仅仅是一个类对象–调用DoModal函数•disable原窗口,使原窗口无法接收用户输入•创建基于对话框模板的窗口•建立自己的窗口过程:可进行消息处理–WM_INITDIALOG消息触发调用OnInitDialog,进行一些对话框初始化工作–CWnd::UpdateData(FALSE)–DoDataExchageLab.ofMarineDynamicSimulation&ControlMFCProgramming10•有模式对话框的运行过程:–用户输入数据或进行其他消息处理操作–用户单击OK按钮–OnOK–UpdateData(TRUE)从控件传到数据成员–DoDataExchage–Cdialog::EndDialog(IDOK)Lab.ofMarineDynamicSimulation&ControlMFCProgramming11•处理关于在使用对话框时Enter键和Escape键的处理:–在使用对话框是你会发现当你按下Enter键或Escape键都会退出对话框,这是因为Enter键会引起CDialog::OnOK()的调用,而Escape键会引起CDialog::OnCancel()的调用。而这两个调用都会引起对话框的退出。–在MFC中这两个成员函数都是虚拟函数,所以我们需要进行重载,如果我们不希望退出对话框那么我们可以在函数中什么都不做。如果需要进行检查则可以添加检查代码,然后调用父类的OnOK()或OnCancel()。Lab.ofMarineDynamicSimulation&ControlMFCProgramming12•在对话框中绘图:重载OnPaint函数–voidCTestDialog::OnPaint()–{–CPaintDCdc(this);–COLORREFcolor=RGB(255,0,0);–CPenpen(PS_SOLID,10,color);–CPen*pOldPen=dc.SelectObject(&pen);–dc.Rectangle(150,150,200,200);–dc.SelectObject(pOldPen);–}Lab.ofMarineDynamicSimulation&ControlMFCProgramming13标准控件常用控件•信息显示控件:如静态文本、图形、树状、列表框等,用于向用户显示数据•信息请求控件:按钮、树状、列表框等,使用户能从应用程序中获取信息•信息修改控件:编辑框、单选按钮、复选框等,使用户能够修改应用程序的数据Lab.ofMarineDynamicSimulation&ControlMFCProgramming14•标准控件(基本控件):–图形控件静态文本编辑框–分组框按钮复选框–单选按钮组合框列表框–横向滚动条纵向滚动条Lab.ofMarineDynamicSimulation&ControlMFCProgramming15•常用控件:–微调控件进程指示器滑块–热键列表控件树状控件–选项卡控件动画控件月历–多信息文本编辑控件IP地址控件–日期/时间调节器扩展组合框Lab.ofMarineDynamicSimulation&ControlMFCProgramming16•标准控件和常用控件在MFC中都有对应的类,从CWnd类派生出来的,都具有窗口的属性Lab.ofMarineDynamicSimulation&ControlMFCProgramming17•控件不但可以在对话框模板中设计并显示,也可以脱离对话框存在•简单的控件直接在对话框中设计并简单映射成员变量和消息即可很好的使用•复杂的控件可以由GetDlgItem返回指向控件的类指针,通过该指针可以对该控件进行程序运行时操作•也可以通过这种方法运行时增加控件Lab.ofMarineDynamicSimulation&ControlMFCProgramming18•通用窗口(CWnd)的一些用法–改变窗口状态:•EnableWindow\IsWindowEnabled设置查询窗口的禁止/允许状态•ModifyStyle\ModifyStyleEx修改窗口风格•IsWindowVisible可以检查窗口是否被显示•ShowWindow;(SW_HIDE,SW_SHOW等)–改变窗口位置•MoveWindow/GetWindowRect/IsIconic/SetWindowPos–使窗口失效,印发重绘•Invalidate/InvalidateRectLab.ofMarineDynamicSimulation&ControlMFCProgramming19•通用窗口的一些用法–窗口查找:•FindWindow/IsChild/GetParent/GetDlgItem/•GetDlgCtrlID/WindowFromPoint–可以利用重载来添加消息处理的虚函数•OnCreate/OnDestroy;窗口被创建/销毁时被调用•OnGetMinMaxInfo需要得到窗口尺寸时被调用•OnSize窗口改变大小后被调用•OnMove窗口被移动后时被调用•OnPaint();•OnChar/OnKeyDown/OnKeyUp键盘字符消息OnLButtonDown/OnRButtonDown/OnLButtonUp/OnRButtonUp/OnLButtonDblClk/OnRButtonDblClk/OnMouseMove鼠标消息Lab.ofMarineDynamicSimulation&ControlMFCProgramming20工程中加入无模式对话框•工程中加入无模式对话框步骤:–1)利用资源编辑器和ClassWizard创建对话框模板和对话框类–2)调用CDialog的缺省构造函数构造对象,可以将父窗口指针保存,用于发送消息–3)调用CDialog::Create(IDD)创建对话框窗口•if(pDlg-m_hWnd==NULL){•pDlg-Create(IDD_TESTDIALOG);•}•pDlg-ShowWindow(SW_SHOW);Lab.ofMarineDynamicSimulation&ControlMFCProgramming21•无模式对话框也可由函数ShowWindow显示和隐藏,而不直接销毁窗口:–pDlg-ShowWindow(SW_SHOW);–pDlg-ShowWindow(SW_HIDE);Lab.ofMarineDynamicSimulation&ControlMFCProgramming22•自定义消息:–#defineWM_GOODBYEWM_USER+5–手工加入消息映射•可以通过向视图发送用户定义的消息处处理按钮消息。–SendMessage(WM_GOODBYE)–PostMessage(WM_GOODBYE)–触发由消息映射定义的消息处理函数。•消息是谁发送谁接收。Lab.ofMarineDynamicSimulation&ControlMFCProgramming23对话框中的数据交换•标准DDX(动态数据交换)–DDX_Text(pDX,IDC_EDIT1,m_number);•UpdateData用于保持所有DDX关联的同步–UpdateData(TRUE):数据从控件传递给相关联的成员变量–UpdateData(FALSE):数据从成员变量传递给相关联的控件Lab.ofMarineDynamicSimulation&ControlMFCProgramming24•标准DDV(动态数据验证)–DDV_MinMaxInt(pDX,m_number,1,200);–在给控件添加成员变量时可设置改变量的大小范围–也可在DoDataExchange中修改范围–它只能简单的设置,复杂的数据有效判断需编程实现Lab.ofMarineDynamicSimulation&ControlMFCProgramming25使用标准对话框•常用标准对话框–CColorDialog–CFileDialog–CFindReplaceDialog–CPageSetupDialog–CFontDialog–CPrintDialog–等等Lab.ofMarineDynamicSimulation&ControlMFCProgramming26•直接使用标准对话框类,如CFontDialog–CFontDialogdlg;–if(dlg.DoModal()==IDOK)–{–LOGFONTlplf;–dlg.GetCurrentFont(&lplf);–CFontfont1;–font1.CreatePointFontIndirect(&lplf);–CDC*pDC=GetDC();–CFont*pOldFont=pDC-SelectObject(&font1);–pDC-SetTextColor(dlg.GetColor());–pDC-TextOut(100,100,“大连海事大学”);–pDC-Selec
本文标题:MFC对话框与组件控件编程
链接地址:https://www.777doc.com/doc-2888499 .html