控制訊息
本節包含 Windows 訊息如何用來與控件通訊的資訊。
下列主題會討論。
一般控件的訊息
由於通用控件是視窗,因此應用程式可以使用常見的 Microsoft Win32 訊息進行通訊,例如WM_GETFONT或WM_SETTEXT。 此外,每個通用控件的窗口類別都支援一元件特定的訊息。 一般而言,應用程式會使用 SendMessage 或 SendDlgItemMessage 將訊息傳遞至控件(通常接收傳回值中的資訊)。
一些常見的控件也有一組宏,應用程式可以使用,而不是 SendMessage。 宏通常比函式更容易使用。 下列範例程式代碼會擷取選取樹視圖專案的文字,第一個是使用原始訊息,第二個是使用對等的宏。 假設 hwnd 是控件視窗的句柄。
BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;
// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);
// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);
對系統色彩設定進行變更時,Windows 會將WM_SYSCOLORCHANGE訊息傳送至所有最上層視窗。 最上層窗口必須將WM_SYSCOLORCHANGE訊息轉送至其通用控件,否則控件將不會收到色彩變更的通知。 轉送訊息可確保您通用控件所使用的色彩與其他使用者介面物件所使用的色彩一致。 例如,工具列控件會使用 「3D Objects」 色彩來繪製其按鈕。 如果使用者變更 3D 物件的色彩,但 不會將WM_SYSCOLORCHANGE 訊息轉寄至工具列,工具列按鈕會維持其原始色彩(甚至變更為舊色彩和新色彩的組合),而系統中的其他按鈕色彩也會變更。
來自控件的通知
控件是子視窗,會在事件通常由使用者輸入觸發的事件發生在控件中時,傳送通知訊息至父視窗。 應用程式仰賴這些通知訊息來判斷使用者要其採取的動作。 除了使用WM_HSCROLL和WM_VSCROLL訊息來通知其上層變更的追蹤列之外,常見的控件會傳送通知作為WM_COMMAND或WM_NOTIFY訊息,如通知的參考主題中所指定。 一般而言,較舊的通知(已長時間在 API 中)會使用 WM_COMMAND。
WM_NOTIFY的 lParam 參數是 NMHDR 結構的位址,或是包含 NMHDR 做為其第一個成員之較大結構的位址。 結構包含通知程序代碼,並識別傳送通知訊息的通用控件。 其餘結構成員的意義,如果有的話,會根據通知程序代碼而有所不同。
每種通用控件類型都有一組對應的通知代碼。 通用控制連結庫也提供可由一種以上的通用控制項類型傳送的通知碼。 請參閱相關控件的檔,以判斷要傳送的通知碼及其採用的格式。
如需示範如何處理 WM_NOTIFY訊息的 範例程序代碼,請參閱該訊息的參考主題。
相關主題