備註
自第一次包含在在線文件中以來,尚未更新下列技術附注。 因此,某些程式和主題可能已過期或不正確。 如需最新信息,建議您搜尋在線檔索引中感興趣的主題。
此附註描述 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
當框架被另一個最上層框架窗口啟動或停用時,此訊息會傳送至框架視窗擁有的所有彈出視窗。 這由中的 CMiniFrameWnd
MFS_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(該資料是文字字串)。