MFC小笔记:父子窗口传递消息

一、需求

MFC程序可能有许多个对话框,有主对话框,有子对话框,本文介绍父子对话框之间的消息传递。适用于外部事件、外部通知等事件。为简单起见,只针对父窗口传递消息到子窗口。

二、界面

主界面为对话框,上有一Button,点击进入子对话框(使用非模态方式)。对话框界面有Static控件输出信息。过程省略。

三、原理

自定义消息ID。在子窗口中响应该消息,事件发起者使用SendMessage函数发送消息。发送时可以指定子窗口句柄。

四、编码

定义消息ID,必须大于WM_USER,为方便起见,可在stdafx.h中定义:

#define WM_MY_EVENT (WM_USER + 1086)

在子对话框头文件声明消息响应函数:

afx_msg LRESULT OnMyEvent(WPARAM wParam, LPARAM lParam);

在子对话框实现文件,添加消息与响应函数的关联:

BEGIN_MESSAGE_MAP(CDlgChild, CDialogEx)
    // ...
    ON_MESSAGE(WM_MY_EVENT, OnMyEvent)
END_MESSAGE_MAP()

同一文件,实现响应函数:

// 父窗口发来的消息,进行响应
LRESULT CDlgChild::OnMyEvent(WPARAM wParam, LPARAM lParam)
{
    int* type = (int*)wParam;
    if (*type == 1)
    {
        GetDlgItem(IDC_STC_SET_TIPS)->SetWindowTextW(L"消息类型1");
        m_nWaitReconnect = 1;
    }
    else if (*type == 2)
    {
        GetDlgItem(IDC_STC_SET_TIPS)->SetWindowTextW(L"消息类型2");
    }

    return 0;
}

在其主界面实现代码中发送消息:

int sendtype = 2;
HWND hWnd = m_pDlgChild->GetSafeHwnd(); // 指定子窗口
::SendMessage(hWnd, WM_MY_EVENT, (WPARAM)&sendtype, NULL);

本文只是简单使用,复杂场合暂未有使用。

发布了481 篇原创文章 · 获赞 244 · 访问量 110万+

猜你喜欢

转载自blog.csdn.net/subfate/article/details/103651152