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);

本文只是簡單使用,複雜場合暫未有使用。

發佈了483 篇原創文章 · 獲贊 250 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章