MFC动态创建控件与建立消息响应

⌚Time: 2023-07-28 18:42:10

👨‍💻Author: Jack Ge

以动态创建按钮为例,新建MFC工程

在解决方案管理器,Resource.h中编辑,添加一个IDC_BUTTON0的资源ID


#define IDM_ABOUTBOX                    0x0010

#define IDD_ABOUTBOX                    100

#define IDS_ABOUTBOX                    101

#define IDD_DYC_DIALOG                  102

#define IDR_MAINFRAME                   128

#define IDC_BUTTON0                     11110

在窗体头文件中定义一个CButton指针


CButton *MyBtn;

在窗体OnInitDialog函数中创建按钮


// TODO: 在此添加额外的初始化代码

    MyBtn = new CButton();

    MyBtn->Create(L"My button", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(40, 40, 180, 70), this, IDC_BUTTON0);

    

之后运行程序可以看到创建的按钮了

为按钮添加消息响应

在窗体头文件中添加函数声明


// 实现

protected:

    HICON m_hIcon;



    // 生成的消息映射函数

    virtual BOOL OnInitDialog();

    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

    afx_msg void OnPaint();

    afx_msg HCURSOR OnQueryDragIcon();

    afx_msg void OnMyBtnClicked();//按钮消息响应函数

    DECLARE_MESSAGE_MAP()

实现响应函数


void CDYCDlg::OnMyBtnClicked(){

    AfxMessageBox(L"DYC TEST");

}

建立消息映射


BEGIN_MESSAGE_MAP(CDYCDlg, CDialog)

    ON_WM_SYSCOMMAND()

    ON_WM_PAINT()

    ON_WM_QUERYDRAGICON()

    //}}AFX_MSG_MAP

    ON_BN_CLICKED(IDC_BUTTON0, OnMyBtnClicked)//控件ID与函数的消息映射

END_MESSAGE_MAP()

测试点击按钮,弹出提示框