当前位置:   article > 正文

Windows图形界面(GUI)-MFC-C/C++ - Dialog

Windows图形界面(GUI)-MFC-C/C++ - Dialog

目录

Dialog

创建对话框模板

设置对话框属性

创建对话框对象

对话框生命周期

示例代码


Dialog

创建对话框模板

  • 流程

    • 打开资源视图:在Visual Studio中,右键点击资源文件夹(通常是Resource Files),选择“添加” -> “资源”。

    • 添加对话框资源:在弹出的对话框中选择“Dialog”,然后点击“新建”。

    • 设计对话框:在资源编辑器中,你可以拖放控件到对话框上,如按钮、文本框、列表框等。

  • 拓展

    • 资源ID:每个对话框都有一个唯一的资源ID,用于在代码中引用。

    • 对话框编辑器:用于可视化地设计和布局对话框。

设置对话框属性
  • 流程

    • 打开属性窗口:选中对话框模板,然后在属性窗口中修改其属性。

    • 修改基本属性:如标题(Caption)、字体、样式(Style)、边框(Border)等。

    • 设置对话框样式:如设置为“下拉式”(Child)、“弹出式”(Popup)或“无边框”(None)。

  • 拓展

    • 对话框样式:控制对话框的外观和行为,如是否可以调整大小、是否有标题栏等。

    • 对话框边框:决定对话框的边框类型,如是否有系统菜单、最小化/最大化按钮等。

    • 对话框字体:设置对话框及其控件的字体。

创建对话框对象
  • 打开对话框资源:在Visual Studio中,双击对话框资源文件(.dlg)以打开对话框编辑器。

  • 添加对话框类:右键点击对话框编辑器中的对话框,选择“添加类”。

  • 配置类向导:在类向导中,输入类名(通常以CDialog为基类),选择基类(通常是CDialogExCDialog),然后点击“完成”。

  • 基类选择:CDialogEx提供了更多的样式和功能,而CDialog是更传统的基类。

对话框生命周期
  • 创建对话框:使用DoModal()Create()函数创建对话框。

  • 显示对话框:使用ShowWindow()函数显示对话框。

  • 关闭对话框:用户点击“确定”或“取消”按钮时,对话框会关闭。

  • 销毁对话框:对话框关闭后,需要手动销毁或由系统自动销毁。

示例代码
  • Visual Studio 2019

  • 创建空项目

  • 设置静态MFC使用 - 子系统为窗口

  • 添加资源文件rc

  • 添加dialog对话框

  • 选中对话框添加对应类

    1. #pragma once
    2. #include <afxwin.h>
    3. #include "CMainDlg.h"
    4. class CMyApp : public CWinApp
    5. {
    6. public:
    7. virtual BOOL InitInstance();
    8. };
    9. extern CMyApp myApp;
    10. #include "CMyApp.h"
    11. CMyApp myApp;
    12. BOOL CMyApp::InitInstance()
    13. {
    14. CMainDlg dlg_Main;
    15. m_pMainWnd = &dlg_Main;
    16. dlg_Main.DoModal();
    17. return TRUE;
    18. }
    19. #pragma once
    20. #include <afxwin.h>
    21. #include <afxdialogex.h>
    22. #include "resource.h"
    23. // CMainDlg 对话框
    24. class CMainDlg : public CDialogEx
    25. {
    26. DECLARE_DYNAMIC(CMainDlg)
    27. public:
    28. virtual BOOL PreTranslateMessage(MSG* pMsg)
    29. {
    30. if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
    31. {
    32. return TRUE;
    33. }
    34. return CDialogEx::PreTranslateMessage(pMsg);
    35. }
    36. public:
    37. CMainDlg(CWnd* pParent = nullptr); // 标准构造函数
    38. virtual ~CMainDlg();
    39. // 对话框数据
    40. #ifdef AFX_DESIGN_TIME
    41. enum { IDD = IDD_DIALOG_MAIN };
    42. #endif
    43. protected:
    44. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
    45. DECLARE_MESSAGE_MAP()
    46. };
    47. // CMainDlg.cpp: 实现文件
    48. #include "CMainDlg.h"
    49. // CMainDlg 对话框
    50. IMPLEMENT_DYNAMIC(CMainDlg, CDialogEx)
    51. CMainDlg::CMainDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG_MAIN, pParent)
    52. {
    53. }
    54. CMainDlg::~CMainDlg()
    55. {
    56. }
    57. void CMainDlg::DoDataExchange(CDataExchange* pDX)
    58. {
    59. CDialogEx::DoDataExchange(pDX);
    60. }
    61. BEGIN_MESSAGE_MAP(CMainDlg, CDialogEx)
    62. END_MESSAGE_MAP()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/901060
推荐阅读
相关标签
  

闽ICP备14008679号