• 初学MFC


    学习使用MFC搭建界面。
    尝试使用MFC搭建了一个简单的基于对话框的计算器界面,包括模态对话框、非模态对话框、向导对话框等。



    // MFCApplicationAddDlg.h : 头文件 // #pragma once // CMFCApplicationAddDlg 对话框 class CMFCApplicationAddDlg : public CDialogEx { // 构造 public: CMFCApplicationAddDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_MFCAPPLICATIONADD_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: double m_editSummand; double m_editAdd; double m_editSum; afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedInstructButton(); }; #pragma once // CMyDialog 对话框 class CMyDialog : public CDialogEx { DECLARE_DYNAMIC(CMyDialog) public: CMyDialog(CWnd* pParent = NULL); // 标准构造函数 virtual ~CMyDialog(); // 对话框数据 enum { IDD = IDD_MFCAPPLICATIONADD_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() }; #pragma once // CSummandPage 对话框 class CSummandPage : public CPropertyPage { DECLARE_DYNAMIC(CSummandPage) public: CSummandPage(); virtual ~CSummandPage(); // 对话框数据 enum { IDD = IDD_SUMMAND_PAGE }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: virtual BOOL OnSetActive(); }; #pragma once // CTipDlg 对话框 class CTipDlg : public CDialogEx { DECLARE_DYNAMIC(CTipDlg) public: CTipDlg(CWnd* pParent = NULL); // 标准构造函数 virtual ~CTipDlg(); // 对话框数据 enum { IDD = IDD_TIP_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() }; // MFCApplicationAddDlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplicationAdd.h" #include "MFCApplicationAddDlg.h" #include "afxdialogex.h" #include "TipDlg.h" #include "AddSheet.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCApplicationAddDlg 对话框 CMFCApplicationAddDlg::CMFCApplicationAddDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplicationAddDlg::IDD, pParent) , m_editSummand(0) , m_editAdd(0) , m_editSum(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplicationAddDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_editSummand); DDX_Text(pDX, IDC_EDIT2, m_editAdd); DDX_Text(pDX, IDC_EDIT3, m_editSum); } BEGIN_MESSAGE_MAP(CMFCApplicationAddDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationAddDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_INSTRUCT_BUTTON, &CMFCApplicationAddDlg::OnBnClickedInstructButton) END_MESSAGE_MAP() // CMFCApplicationAddDlg 消息处理程序 BOOL CMFCApplicationAddDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 ShowWindow(SW_MINIMIZE); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplicationAddDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplicationAddDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CMFCApplicationAddDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplicationAddDlg::OnBnClickedButton1() { INT_PTR nRes; CTipDlg tipDlg; nRes = tipDlg.DoModal(); if (IDCANCEL == nRes) return; // TODO: 在此添加控件通知处理程序代码 UpdateData(true); m_editSum = m_editSummand + m_editAdd; UpdateData(false); } void CMFCApplicationAddDlg::OnBnClickedInstructButton() { // TODO: 在此添加控件通知处理程序代码 // 创建属性表对象 CAddSheet sheet(_T("")); // 设置属性对话框为向导对话框 sheet.SetWizardMode(); // 打开模态向导对话框 sheet.DoModal(); } // MyDialog.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplicationAdd.h" #include "MyDialog.h" #include "afxdialogex.h" // CMyDialog 对话框 IMPLEMENT_DYNAMIC(CMyDialog, CDialogEx) CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialogEx(CMyDialog::IDD, pParent) { } CMyDialog::~CMyDialog() { } void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) END_MESSAGE_MAP() // CMyDialog 消息处理程序 // SummandPage.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplicationAdd.h" #include "SummandPage.h" #include "afxdialogex.h" // CSummandPage 对话框 IMPLEMENT_DYNAMIC(CSummandPage, CPropertyPage) CSummandPage::CSummandPage() : CPropertyPage(CSummandPage::IDD) { } CSummandPage::~CSummandPage() { } void CSummandPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CSummandPage, CPropertyPage) END_MESSAGE_MAP() // CSummandPage 消息处理程序 BOOL CSummandPage::OnSetActive() { // TODO: 在此添加专用代码和/或调用基类 CPropertySheet* psheet = (CPropertySheet*)GetParent(); psheet->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive(); } // TipDlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplicationAdd.h" #include "TipDlg.h" #include "afxdialogex.h" // CTipDlg 对话框 IMPLEMENT_DYNAMIC(CTipDlg, CDialogEx) CTipDlg::CTipDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CTipDlg::IDD, pParent) { } CTipDlg::~CTipDlg() { } void CTipDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CTipDlg, CDialogEx) END_MESSAGE_MAP() // CTipDlg 消息处理程序

      

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/KunBB/p/5100016.html
Copyright © 2020-2023  润新知