分享方式:


TN024:MFC 定義的訊息和資源

注意

下列技術提示自其納入線上文件以來,未曾更新。 因此,有些程序和主題可能已過期或不正確。 如需最新資訊,建議您在線上文件索引中搜尋相關的主題。

此附注描述 MFC 所使用的內部 Windows 訊息和資源格式。 此資訊說明架構的實作,並協助您偵錯應用程式。 對於冒險,即使所有這項資訊都正式不受支援,您還是可以使用其中一些資訊進行進階實作。

此附注包含 MFC 私人實作詳細資料;所有內容未來可能會變更。 MFC 私人 Windows 訊息在一個應用程式的範圍內只有意義,但未來會變更為包含全系統訊息。

MFC 私人 Windows 訊息和資源類型的範圍位於 Microsoft Windows 所保留的「系統」範圍內。 目前並未使用範圍中的所有數位,而且未來可能會使用範圍中的新數位。 目前使用的數位可能會變更。

MFC 私人 Windows 訊息的範圍0x360 0x37F > 。

MFC 私人資源類型位於0xF0 > 0xFF範圍內。

MFC 私人 Windows 訊息

這些 Windows 訊息會用來取代 C++ 虛擬函式,其中視窗物件之間需要相對鬆散的結合,以及 C++ 虛擬函式不適合的地方。

這些私人 Windows 訊息和相關聯的參數結構會在 MFC 私人標頭 'AFXPRIV 中宣告。H'. 請注意,包含此標頭的任何程式碼都可能依賴未記載的行為,而且可能會在未來的 MFC 版本中中斷。

在需要處理其中一個訊息的罕見情況下,您應該使用ON_MESSAGE訊息對應宏,並以一般 LRESULT/WPARAM/LPARAM 格式處理訊息。

WM_QUERYAFXWNDPROC

此訊息會傳送至正在建立的視窗。 這會在建立程式中非常早期傳送,做為判斷 WndProc 是否為 AfxWndProc 的方法。AfxWndProc 會傳回 1。

參數和傳回值 描述
wParam 未使用
lParam 未使用
傳回 AfxWndProc 處理 時為 1

WM_SIZEPARENT

此訊息是由框架視窗在調整大小時傳送給其即時子系, CFrameWnd::OnSize CFrameWnd::RecalcLayout CWnd::RepositionBars 以重新置放框架側邊的控制列。 AFX_SIZEPARENTPARAMS 結構包含父系的目前可用用戶端矩形,以及要呼叫 DeferWindowPos 的 HDWP(可能是 Null),以將重繪降到最低。

參數和傳回值 描述
wParam 未使用
lParam AFX_SIZEPARENTPARAMS結構的位址
傳回 未使用 (0)

忽略訊息表示視窗不會參與版面配置。

WM_SETMESSAGESTRING

此訊息會傳送至框架視窗,要求其更新狀態列中的訊息行。 可以指定字串識別碼或 LPCSTR(但不能同時指定兩者)。

參數和傳回值 描述
wParam 字串識別碼 (或零)
lParam 字串的 LPCSTR (或 Null)
傳回 未使用 (0)

WM_IDLEUPDATECMDUI

此訊息會以閒置時間傳送,以實作 update-command UI 處理常式的閒置時間更新。 如果視窗(通常是控制列)處理訊息,它會建立 CCmdUI 物件(或衍生類別的物件),並呼叫 CCmdUI::DoUpdate 視窗中每個「專案」。 這會接著檢查命令處理常式鏈結中物件的ON_UPDATE_COMMAND_UI處理常式。

參數和傳回值 描述
wParam BOOL bDisableIfNoHandler
lParam 未使用 (0)
傳回 未使用 (0)

bDisableIfNoHandler 不是零的,如果沒有ON_UPDATE_COMMAND_UI或ON_COMMAND處理常式,則停用 UI 物件。

WM_EXITHELPMODE

此訊息會張貼至 CFrameWnd ,以結束內容敏感性說明模式。 收到此訊息會終止 由 CFrameWnd::OnContextHelp 啟動的強制回應迴圈。

參數和傳回值 描述
wParam 未使用 (0)
lParam 未使用 (0)
傳回 未使用

WM_INITIALUPDATE

檔範本會將此訊息傳送至框架視窗的所有子系,讓它們能夠安全地進行初始更新。 它會對應至 的呼叫, CView::OnInitialUpdate 但可用於其他 CWnd 衍生類別,以進行其他單次更新。

參數和傳回值 描述
wParam 未使用 (0)
lParam 未使用 (0)
傳回 未使用 (0)

WM_RECALCPARENT

此訊息會透過檢視傳送至其父視窗(透過 取得 GetParent ),以強制重新計算版面配置(通常,父系會呼叫 RecalcLayout )。 這會用於 OLE 伺服器應用程式中,因為檢視的總大小成長時,框架必須以大小成長。

如果父視窗處理此訊息,它應該會傳回 TRUE,並以新的工作區大小填入 lParam 中傳遞的 RECT。 當伺服器物件就地啟動時,這會用來 CScrollView 正確處理捲軸(在加入時放在視窗外部)。

參數和傳回值 描述
wParam 未使用 (0)
lParam LPRECT rectClient,可能是 Null
傳回 如果傳回新的用戶端矩形,則為 TRUE,否則為 FALSE

WM_SIZECHILD

當使用者使用調整大小控點調整調整大小列時,此訊息會透過 COleResizeBar 傳送給其擁有者視窗(透過 GetOwner )。 COleIPFrameWnd 嘗試在使用者要求時重新置放框架視窗,以回應此訊息。

在用戶端座標中指定的新矩形,相對於包含調整大小列的框架視窗,由 lParam 指向。

參數和傳回值 描述
wParam 未使用 (0)
lParam LPRECT rectNew
傳回 未使用 (0)

WM_DISABLEMODAL

此訊息會傳送至正在停用之框架視窗擁有的所有快顯視窗。 框架視窗會使用結果來判斷是否要停用快顯視窗。

當框架進入強制回應狀態或讓特定快顯視窗無法停用時,您可以使用此選項在快顯視窗中執行特殊處理。 例如,工具提示會使用此訊息在框架視窗進入強制回應狀態時自行終結。

參數和傳回值 描述
wParam 未使用 (0)
lParam 未使用 (0)
傳回 非零到 NOT 停用視窗,0 表示視窗將會停用

WM_FLOATSTATUS

當框架被另一個最上層框架視窗啟動或停用時,此訊息會傳送至框架視窗擁有的所有快顯視窗。 這由 中的 CMiniFrameWnd MFS_SYNCACTIVE 實作使用,讓這些快顯視窗的啟用與最上層框架視窗的啟用保持同步。

參數 描述
wParam 這是下列其中一個值:

FS_SHOW

FS_HIDE

FS_ACTI加值稅E

FS_DEACTI加值稅E

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam 未使用 (0)

如果已設定FS_SYNCACTIVE,且視窗會與父框架同步處理其啟用,則傳回值應該是非零。 CMiniFrameWnd 當樣式設定為 MFS_SYNCACTIVE 時,會傳回非零。

如需詳細資訊,請參閱 的實作 CMiniFrameWnd

WM_ACTI加值稅ETOPLEVEL

當啟動或停用其「最上層群組」中的視窗時,此訊息會傳送至最上層視窗。 如果視窗是最上層視窗(沒有父系或擁有者),或是由這類視窗擁有,則視窗是最上層群組的一部分。 此訊息與WM_ACTI加值稅EAPP類似,但在屬於不同進程的視窗在單一視窗階層中混合的情況下運作(在 OLE 應用程式中很常見)。

WM_COMMANDHELP、WM_HELPHITTEST、WM_EXITHELPMODE

這些訊息用於內容相關說明的實作中。 如需詳細資訊, 請參閱技術附注 28

MFC 私人資源格式

目前,MFC 會定義兩種私人資源格式:RT_TOOLBAR和RT_DLGINIT。

RT_TOOLBAR資源格式

AppWizard 提供的預設工具列是以 MFC 4.0 中引進的RT_TOOLBAR自訂資源為基礎。 您可以使用工具列編輯器來編輯此資源。

RT_DLGINIT資源格式

一個 MFC 私人資源格式可用來儲存額外的對話初始化資訊。 這包括儲存在下拉式方塊中的初始字串。 此資源的格式並非設計為手動編輯,而是由 Visual C++ 處理。

Visual C++ 和此RT_DLGINIT資源不需要使用 MFC 的相關功能,因為有 API 替代使用資源中的資訊。 使用 Visual C++ 可讓您更輕鬆地在長時間執行中撰寫、維護及轉譯應用程式。

RT_DLGINIT資源的基本結構如下所示:

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

重複的區段包含要傳送訊息的控制項識別碼、要傳送的訊息 #、要傳送的一般 Windows 訊息,以及可變的資料長度。 Windows 訊息會以下列形式傳送:

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

這是一種非常一般的格式,允許任何 Windows 訊息和資料內容。 Visual C++ 資源編輯器和 MFC 僅支援有限的 Windows 訊息子集:CB_ADDSTRING下拉式方塊的初始清單選項(資料是文字字串)。

另請參閱

依編號顯示的技術提示
依分類區分的技術提示