MFC 自定义消息

▲ Demo 示例

新建基于对话框的 Demo程序。

头文件:

// 自定义数据类型,用来测试消息数据传递
typedef struct tagStudent
{
    CString Name;
    int Age;
}Student_t;




// Dlg header

public:
    afx_msg void OnBnClickedButtonCustomMsg();
    afx_msg LRESULT OnCustomMessage(WPARAM wParam, LPARAM lParam);   //  必须这种签名
private:
    Student_t m_XiaoMing;

自定小的处理函数签名必须符合这样的参数:afx_msg LRESULT OnCustomMessage(WPARAM wParam, LPARAM lParam);

构造函数测试数据初始化:

CMFCCustomMsgDlg::CMFCCustomMsgDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_MFCCUSTOMMSG_DIALOG, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_XiaoMing.Name = _T("小明");  // 测试数据初始化
    m_XiaoMing.Age = 12;
}

消息:

#define WM_CUSTOM_MSG (WM_USER + 1)

BEGIN_MESSAGE_MAP(CMFCCustomMsgDlg, CDialogEx)	
    ON_MESSAGE(WM_CUSTOM_MSG, &CMFCCustomMsgDlg::OnCustomMessage)
END_MESSAGE_MAP()

消息处理函数定义:

LRESULT CMFCCustomMsgDlg::OnCustomMessage(WPARAM wParam, LPARAM lParam)
{
    Student_t* stuInfo = (Student_t*)wParam;
    CString infoText;
    infoText.Format(_T("姓名:%s\n年龄:%d\n额外信息:%ld\n"), stuInfo->Name, stuInfo->Age, lParam);
    MessageBox(infoText);

    return LRESULT();
}

按钮响应消息:

void CMFCCustomMsgDlg::OnBnClickedButtonCustomMsg()
{
    //SendMessage(WM_CUSTOM_MSG, (WPARAM)(&m_XiaoMing), 100); // 等处理完才返回
    PostMessage(WM_CUSTOM_MSG, (WPARAM)(&m_XiaoMing), 100); // 不等处理完就返回
}
posted @ 2024-02-05 17:18  double64  阅读(102)  评论(0)    收藏  举报