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下拉式方塊的初始清單選項(資料是文字字串)。