分享方式:


TN024:MFC-Defined 訊息和資源

備註

自第一次包含在在線文件中以來,尚未更新下列技術附注。 因此,某些程式和主題可能已過期或不正確。 如需最新信息,建議您搜尋在線檔索引中感興趣的主題。

此附註描述 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(參數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

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

參數 說明
wParam 這是下列其中一個值:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE(停用)

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam 未使用 (0)

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

如需更多資訊,請參閱 CMiniFrameWnd 的實作。

WM_ACTIVATETOPLEVEL

當啟動或停用其「最上層群組」中的視窗時,此訊息會傳送至最上層視窗。 如果視窗是最上層視窗(沒有父系或擁有者),或是由這類窗口擁有,則視窗是最上層群組的一部分。 此訊息與WM_ACTIVATEAPP類似,但在屬於不同進程的視窗在單一視窗階層中混合的情況下運作(在 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(該資料是文字字串)。

另請參閱

依編號的技術注意事項
依類別排序的技術注意事項