TN024: MFC 自訂的訊息和資源
注意事項 |
---|
由於它第一次線上文件中包含尚未更新下列技術提示。如此一來,某些程序和主題可能已經過期或不正確。如需最新資訊,建議您先搜尋線上文件索引中有興趣的主題。 |
這張便箋描述內部的 Windows 訊息和 MFC 所使用的資源格式。 這項資訊說明的實作架構,以及幫助您偵錯應用程式。 基於市區,即使這項資訊是不受正式支援,您可以使用這項資訊的一些進階的實作。
這張便箋包含 MFC 私用實作詳細資料。 所有內容都有可能變更以後。 MFC 私用的 Windows 訊息在某個應用程式的範圍中有意義,但會在未來變更為包含整個系統的郵件。
資源類型與範圍的 MFC 私用的 Windows 訊息會保留 「 系統 」 範圍內設定撥出 Microsoft windows。 可使用目前並不是所有的數字範圍內,以後可使用新的數字,範圍中。 目前使用的數字可能會變更。
MFC 私用的 Windows 訊息位於範圍 0x360-> 0x37F。
MFC 私用資源的型別屬於範圍 0xF0-> 0xFF。
MFC 私用的 Windows 訊息
這些 Windows 訊息用 C++ 虛擬函式的位置相對較鬆散結合需要的位置] 視窗的物件之間和其中的 C++ 虛擬函式不會適當。
在 MFC 的 private 標頭內宣告這些私用的 Windows 訊息和相關聯的參數結構 ' AFXPRIV。H'。 請注意您的程式碼,其中包含這個標頭的任何可能會依賴未記載的行為,就會斷開在未來版本的 MFC。
在少數的情況下不必處理這些訊息之一,您應該使用ON_MESSAGE訊息對應巨集,並處理中的泛用 LRESULT/WPARAM/LPARAM 格式的訊息。
WM_QUERYAFXWNDPROC
此訊息會傳送至正在建立的視窗。 建立程序的很早期中傳送的方法的判定 WndProc 是否 AfxWndProc。AfxWndProc ,則傳回 1。
wParam |
未使用 |
lParam |
未使用 |
傳回 |
1 如果處理的 AfxWndProc |
WM_SIZEPARENT
此訊息會傳送框架視窗所至其直接子系在調整大小時 (CFrameWnd::OnSize 呼叫CFrameWnd::RecalcLayout哪些呼叫CWnd::RepositionBars) 若要重新定位周圍框架的側邊到控制列。 AFX_SIZEPARENTPARAMS 結構包含目前可用的用戶端矩形的父資料錄和 HDWP (這可能是空值),用來呼叫DeferWindowPos減到最少重新繪製時發生。
wParam |
未使用 |
lParam |
解決的 AFX_SIZEPARENTPARAMS 結構 |
傳回 |
未使用 (0) |
可以忽略此訊息,指出視窗並不會參與版面配置。
WM_SETMESSAGESTRING
框架視窗來傳送此郵件,詢問其更新狀態列中的訊息列。 指定 (而非全部),可以是字串 ID 或 LPCSTR。
wParam |
字串識別碼 (或零) |
lParam |
字串 (或 NULL) LPCSTR |
傳回 |
未使用 (0) |
WM_IDLEUPDATECMDUI
若要實作閒置時間的更新 update 命令 UI 處理常式在閒置的時間內傳送此郵件。 如果視窗 (通常是一項控制列) 處理郵件時,它會建立CCmdUI物件 (或衍生類別的物件),並呼叫 CCmdUI::DoUpdate "的郵件"] 視窗中的每個。 這將會依序檢查ON_UPDATE_COMMAND_UI的命令處理常式鏈結中的物件處理常式。
wParam |
BOOL bDisableIfNoHandler |
lParam |
未使用 (0) |
傳回 |
未使用 (0) |
bDisableIfNoHandler 不是零以停用的 UI 物件,如果沒有既不ON_UPDATE_COMMAND_UI或ON_COMMAND處理常式。
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 與工作區的新大小的矩形。 這用在CScrollView可正確處理捲軸列 (然後在外部視窗在新增時的位置) 當伺服端物件是就地啟動。
wParam |
未使用 (0) |
lParam |
LPRECT rectClient 可以是空值 |
傳回 |
如果本屬性為 TRUE,如果新的用戶端矩形傳回,FALSE 否則 |
WM_SIZECHILD
藉由傳送這封郵件是COleResizeBar到它的擁有者視窗 (透過GetOwner) 當使用者調整大小的調整控點調整大小的列。 COleIPFrameWnd藉由嘗試調整框架視窗的位置,因為使用者已要求回應這個訊息。
新矩形,並提供在工作區座標,相對於在框架視窗,其中包含調整大小列中,由 lParam 時所指出。
wParam |
未使用 (0) |
lParam |
LPRECT rectNew |
傳回 |
未使用 (0) |
WM_DISABLEMODAL
此訊息會傳送至框架視窗的停用時所擁有的所有快顯視窗。 框架視窗會使用結果來決定要停用快顯視窗。
您可以使用此框架進入強制回應的狀態時,在您的快顯視窗中執行特殊處理,或以取得停用時,防止特定的快顯視窗。 工具提示會使用這個訊息,當框架視窗進入強制回應狀態,比方說,摧毀本身。
wParam |
未使用 (0) |
lParam |
未使用 (0) |
傳回 |
非零到不停用視窗、 0 表示視窗將會停用 |
WM_FLOATSTATUS
此訊息會傳送到所有的快顯視窗,當您啟動或停用另一個最上層框架視窗框架時,所擁有的框架視窗。 這由實作 MFS_SYNCACTIVE 在CMiniFrameWnd,要保留這個啟用程序中的這些快顯視窗的上方層級的框架視窗啟動同步。
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, ,但在 windows 屬於不同的處理序混合 (常見於 OLE 應用程式) 的單一視窗階層架構中的位置的情況下運作。
WM_COMMANDHELP,WM_HELPHITTEST,WM_EXITHELPMODE
這些訊息可以用在實作中的即時線上說明。 請參閱技術的附註 28 如需詳細資訊。
MFC 私用資源格式
目前,MFC 會定義兩個私用資源格式: RT_TOOLBAR 和 RT_DLGINIT。
RT_TOOLBAR 資源格式
預設的工具列即 AppWizard 所提供的根據 RT_TOOLBAR MFC 4.0 中所引用的自訂資源。 您可以編輯此資源,使用工具列編輯器。
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
+---------------+
重複的區段包含控制項 ID,以確保郵件訊息傳送 (一般 Windows 訊息) 和資料的可變長度的 #。 在表單中將會傳送 Windows 訊息:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
這是常見的格式,讓任何 Windows 訊息和資料內容。 Visual C++ 資源編輯器和 MFC 只支援有限的 Windows 訊息子集: CB_ADDSTRING 的初始的 (資料是一文字串) 的組合方塊清單的選擇。