CWnd
類別
提供 MFC 程式庫中所有視窗類別的基本功能。
語法
class CWnd : public CCmdTarget
成員
公用建構函式
名稱 | 描述 |
---|---|
CWnd::CWnd |
建構 CWnd 物件。 |
公用方法
名稱 | 描述 |
---|---|
CWnd::accDoDefaultAction |
由架構呼叫以執行物件的預設動作。 |
CWnd::accHitTest |
由架構呼叫以擷取畫面中給定點的子項目或子物件。 |
CWnd::accLocation |
由架構呼叫以擷取指定物件目前畫面的位置。 |
CWnd::accNavigate |
由架構呼叫以便於周遊容器內的另一使用者介面項目並擷取物件 (如果可能)。 |
CWnd::accSelect |
由架構呼叫以修改選取或移動指定物件的鍵盤焦點。 |
CWnd::AnimateWindow |
建立相關聯的視窗物件的動畫。 |
CWnd::ArrangeIconicWindows |
排列所有最小化 (圖示) 子視窗。 |
CWnd::Attach |
將 Windows 控制代碼附加至 CWnd 物件。 |
CWnd::BeginModalState |
呼叫此成員函式以製作框架視窗強制回應。 |
CWnd::BeginPaint |
準備 CWnd 進行繪製。 |
CWnd::BindDefaultProperty |
將呼叫物件的預設簡單繫結屬性 (在類型程式庫中標示),繫結至資料來源控制項相關聯的游標。 |
CWnd::BindProperty |
將資料繫結控制項上的游標繫結屬性繫結至資料來源控制項,並註冊該關聯性與 MFC 繫結管理員。 |
CWnd::BringWindowToTop |
將 CWnd 帶到重疊視窗堆疊的最上層。 |
CWnd::CalcWindowRect |
呼叫可從用戶端矩形計算視窗矩形。 |
CWnd::CancelToolTips |
停用工具提示控制項。 |
CWnd::CenterWindow |
將相對於其父系的視窗置中。 |
CWnd::ChangeClipboardChain |
從剪貼簿檢視器的鏈結中移除 CWnd 。 |
CWnd::CheckDlgButton |
在按鈕控制項旁放置核取記號,或從中移除核取記號。 |
CWnd::CheckRadioButton |
檢查指定的選項按鈕,及移除指定的按鈕群組中所有其他選項按鈕的核取記號。 |
CWnd::ChildWindowFromPoint |
判斷 (如果有的話) 是否有子視窗包含指定的點。 |
CWnd::ClientToScreen |
將畫面上指定的點或矩形的用戶端座標,轉換為螢幕座標。 |
CWnd::CloseWindow |
將視窗最小化。 |
CWnd::ContinueModal |
繼續視窗的強制回應狀態。 |
CWnd::Create |
建立並初始化 CWnd 物件相關聯的子視窗。 |
CWnd::CreateAccessibleProxy |
建立指定物件的 Active Accessibility Proxy。 |
CWnd::CreateCaret |
建立系統游標的新形狀,並取得插入號的擁有權。 |
CWnd::CreateControl |
建立將由 CWnd 物件在 MFC 程式中表示的 ActiveX 控制項。 |
CWnd::CreateEx |
建立 Windows 重疊、快顯視窗或子視窗,並將其附加至 CWnd 物件。 |
CWnd::CreateGrayCaret |
建立系統游標的灰色區塊,並取得插入號的擁有權。 |
CWnd::CreateSolidCaret |
建立系統游標的實心區塊,並取得插入號的擁有權。 |
CWnd::DeleteTempMap |
由 CWinApp 閒置時間處理常式自動呼叫,並刪除 FromHandle 建立的任何暫存 CWnd 物件。 |
CWnd::DestroyWindow |
終結附加的 Windowd 視窗。 |
CWnd::Detach |
從 CWnd 物件卸離 Windows 控制代碼,並傳回控制代碼。 |
CWnd::DlgDirList |
使用檔案或目錄清單填入清單方塊。 |
CWnd::DlgDirListComboBox |
使用檔案或目錄清單來填入下拉式方塊的清單方塊。 |
CWnd::DlgDirSelect |
從清單方塊擷取目前的選取範圍。 |
CWnd::DlgDirSelectComboBox |
從下拉式方塊的清單方塊中擷取目前的選取範圍。 |
CWnd::DragAcceptFiles |
指出視窗將接受拖曳的檔案。 |
CWnd::DragDetect |
擷取滑鼠並追蹤其移動,直到使用者放開左側按鈕、按下 ESC 鍵,或將滑鼠移到指定點周圍的拖曳矩形外。 |
CWnd::DrawAnimatedRects |
繪製框線矩形,並以動畫效果呈現它來指出圖示的開頭,或最小化或最大化視窗。 |
CWnd::DrawCaption |
繪製標題。 |
CWnd::DrawMenuBar |
重新繪製功能表列。 |
CWnd::EnableActiveAccessibility |
啟用使用者定義的 Active Accessibility 函式。 |
CWnd::EnableDynamicLayout |
可在使用者調整視窗大小時,動態調整子視窗的位置與大小。 |
CWnd::EnableD2DSupport |
啟用或停用視窗 D2D 支援。 初始化主視窗之前先呼叫這個方法。 |
CWnd::EnableScrollBar |
啟用或停用一個捲軸的一或兩個箭號。 |
CWnd::EnableScrollBarCtrl |
啟用或停用同層級捲軸控制項。 |
CWnd::EnableToolTips |
啟用工具提示控制項。 |
CWnd::EnableTrackingToolTips |
啟用追蹤模式中的工具提示控制項。 |
CWnd::EnableWindow |
啟用或停用滑鼠和鍵盤輸入。 |
CWnd::EndModalLoop |
結束視窗的強制回應狀態。 |
CWnd::EndModalState |
呼叫此成員函式,將框架視窗從強制回應變更為非強制回應。 |
CWnd::EndPaint |
標記繪製的結束。 |
CWnd::ExecuteDlgInit |
初始化對話方塊資源。 |
CWnd::FilterToolTipMessage |
擷取對話方塊中控制項相關聯的標題或文字。 |
CWnd::FindWindow |
傳回由其視窗名稱和視窗類別識別的視窗控制代碼。 |
CWnd::FindWindowEx |
傳回由其視窗名稱和視窗類別識別的視窗控制代碼。 |
CWnd::FlashWindow |
閃爍視窗一次。 |
CWnd::FlashWindowEx |
閃爍視窗與其他功能。 |
CWnd::FromHandle |
將控制代碼提供給視窗時,將指標傳回至 CWnd 物件。 CWnd 如果物件未附加至句柄,則會建立並附加暫存CWnd 物件。 |
CWnd::FromHandlePermanent |
將控制代碼提供給視窗時,將指標傳回至 CWnd 物件。 |
CWnd::get_accChild |
由架構呼叫以擷取指定子系的 IDispatch 介面位址。 |
CWnd::get_accChildCount |
由架構呼叫以擷取屬於此物件的子物件數目。 |
CWnd::get_accDefaultAction |
由架構呼叫以擷取具有物件預設動作描述的字串。 |
CWnd::get_accDescription |
由架構呼叫以擷取含有指定物件的視覺外觀描述的字串。 |
CWnd::get_accFocus |
由架構呼叫以擷取具有鍵盤焦點的物件。 |
CWnd::get_accHelp |
由架構呼叫以擷取物件的 Help 屬性字串。 |
CWnd::get_accHelpTopic |
由架構呼叫以擷取 WinHelp 檔 (與指定物件和該檔案中適切主題的識別項關聯) 的完整路徑。 |
CWnd::get_accKeyboardShortcut |
由架構呼叫以擷取指定物件的快速鍵或便捷鍵。 |
CWnd::get_accName |
由架構呼叫以擷取指定物件的名稱。 |
CWnd::get_accParent |
由架構呼叫以擷取物件之父代的 IDispatch 介面。 |
CWnd::get_accRole |
由架構呼叫以擷取含有指定物件的角色描述資訊。 |
CWnd::get_accSelection |
由架構呼叫以擷取此物件的選取子物件。 |
CWnd::get_accState |
由架構呼叫以擷取指定物件的目前狀態。 |
CWnd::get_accValue |
由架構呼叫以擷取指定物件的值。 |
CWnd::GetActiveWindow |
擷取使用中視窗。 |
CWnd::GetAncestor |
擷取指定視窗的上階視窗物件。 |
CWnd::GetCapture |
擷取具有滑鼠捕捉的 CWnd 。 |
CWnd::GetCaretPos |
擷取插入號之目前位置的用戶端座標。 |
CWnd::GetCheckedRadioButton |
傳回按鈕群組中目前核取的選項按鈕的識別碼。 |
CWnd::GetClientRect |
取得 CWnd 工作區的維度。 |
CWnd::GetClipboardOwner |
擷取剪貼簿的目前擁有者的指標。 |
CWnd::GetClipboardViewer |
擷取剪貼簿檢視器鏈結中的第一個視窗的指標。 |
CWnd::GetControlUnknown |
擷取至未知 ActiveX 控制項的指標。 |
CWnd::GetDC |
擷取工作區的顯示內容。 |
CWnd::GetDCEx |
擷取工作區的顯示內容,並在繪製時啟用裁剪。 |
CWnd::GetDCRenderTarget |
擷取裝置內容 (DC) 會呈現 CWnd 視窗的目標。 |
CWnd::GetDescendantWindow |
搜尋所有下階視窗,並傳回具有指定識別碼的視窗。 |
CWnd::GetDesktopWindow |
擷取 Windows 桌面視窗。 |
CWnd::GetDlgCtrlID |
如果 CWnd 是子視窗,呼叫這個函式會傳回它的識別碼值。 |
CWnd::GetDlgItem |
從指定的對話方塊中擷取具有指定識別碼的控制項。 |
CWnd::GetDlgItemInt |
將指定對話方塊中的控制項文字轉譯成整數值。 |
CWnd::GetDlgItemText |
擷取與控制項相關聯的標題或文字。 |
CWnd::GetDSCCursor |
擷取料來源控制項的 DataSource、UserName、Password 和 SQL 屬性所定義之基礎游標的指標。 |
CWnd::GetDynamicLayout |
擷取動態配置管理員物件的指標。 |
CWnd::GetExStyle |
傳回視窗的延伸樣式。 |
CWnd::GetFocus |
擷取目前具有輸入焦點的 CWnd 。 |
CWnd::GetFont |
擷取目前的字型。 |
CWnd::GetForegroundWindow |
讓指標回到前景視窗 (使用者目前使用的最上層視窗)。 |
CWnd::GetIcon |
擷取圖示的控制代碼。 |
CWnd::GetLastActivePopup |
判斷 CWnd 擁有的快顯視窗哪一個是最近啟用的。 |
CWnd::GetLayeredWindowAttributes |
擷取分層視窗的不透明和透明色鍵。 |
CWnd::GetMenu |
擷取指定功能表的指標。 |
CWnd::GetNextDlgGroupItem |
搜尋控制項群組內的下一個 (或上一個) 控制項。 |
CWnd::GetNextDlgTabItem |
擷取第一個控件, WS_TABSTOP 其樣式緊接在指定的控件後面(或之前)。 |
CWnd::GetNextWindow |
傳回視窗管理員清單中的下一個 (或上一個) 視窗。 |
CWnd::GetOleControlSite |
擷取指定的 ActiveX 控制項的自訂網站。 |
CWnd::GetOpenClipboardWindow |
擷取目前已開啟剪貼簿的視窗指標。 |
CWnd::GetOwner |
擷取 CWnd 擁有者的指標。 |
CWnd::GetParent |
擷取 CWnd 的父視窗 (如果有的話)。 |
CWnd::GetParentFrame |
擷取 CWnd 物件的父框架視窗。 |
CWnd::GetParentOwner |
傳回子視窗的父視窗指標。 |
CWnd::GetProperty |
擷取 ActiveX 控制項屬性。 |
CWnd::GetRenderTarget |
取得與此視窗相關聯的呈現目標。 |
CWnd::GetSafeHwnd |
如果指標為 NULL,this 則傳m_hWnd 回 或 NULL。 |
CWnd::GetSafeOwner |
擷取給定視窗的安全擁有者。 |
CWnd::GetScrollBarCtrl |
傳回一個同層級捲軸控制項。 |
CWnd::GetScrollBarInfo |
擷取所指定之捲軸的相關資訊。 |
CWnd::GetScrollInfo |
擷取 SCROLLINFO 結構維護的捲軸相關資訊。 |
CWnd::GetScrollLimit |
擷取捲軸的限制。 |
CWnd::GetScrollPos |
擷取捲動方塊的目前位置。 |
CWnd::GetScrollRange |
複製給定捲軸目前的最小和最大捲軸位置。 |
CWnd::GetStyle |
傳回目前的視窗樣式。 |
CWnd::GetSystemMenu |
可讓應用程式存取控制功能表以進行複製和修改。 |
CWnd::GetTitleBarInfo |
擷取指定之標題列的相關資訊。 |
CWnd::GetTopLevelFrame |
擷取視窗的最上層框架視窗。 |
CWnd::GetTopLevelOwner |
擷取最上層視窗。 |
CWnd::GetTopLevelParent |
擷取視窗的最上層父代。 |
CWnd::GetTopWindow |
傳回屬於 CWnd 的第一個子視窗。 |
CWnd::GetUpdateRect |
擷取完全圍住 CWnd 更新區域的最小矩形座標。 |
CWnd::GetUpdateRgn |
擷取 CWnd 更新區域。 |
CWnd::GetWindow |
傳回與此視窗具有指定關聯性的視窗。 |
CWnd::GetWindowContextHelpId |
擷取說明內容識別碼。 |
CWnd::GetWindowDC |
擷取整個視窗的顯示內容,包括標題列、功能表和捲軸。 |
CWnd::GetWindowedChildCount |
傳回相關聯子視窗的數目。 |
CWnd::GetWindowInfo |
傳回視窗的相關資訊。 |
CWnd::GetWindowlessChildCount |
傳回相關聯的無視窗子視窗數目。 |
CWnd::GetWindowPlacement |
擷取視窗的顯示狀態和一般 (還原)、最小化和最大化位置。 |
CWnd::GetWindowRect |
取得 CWnd 的螢幕座標。 |
CWnd::GetWindowRgn |
擷取視窗的視窗區域複本。 |
CWnd::GetWindowText |
傳回視窗文字或標題 (如果有的話)。 |
CWnd::GetWindowTextLength |
傳回視窗的文字或標題的長度。 |
CWnd::HideCaret |
藉由從顯示畫面移除插入號來隱藏該插入號。 |
CWnd::HiliteMenuItem |
反白顯示或從最上層 (功能表列) 的功能表項目中移除反白顯示。 |
CWnd::HtmlHelp |
呼叫以初始化 HTMLHelp 應用程式。 |
CWnd::Invalidate |
使整個工作區失效。 |
CWnd::InvalidateRect |
將矩形加入至目前的更新區域,使給定矩形內的工作區失效。 |
CWnd::InvalidateRgn |
將區域加入至目前的更新區域,使給定區域內的工作區失效。 |
CWnd::InvokeHelper |
叫用 ActiveX 控制項方法或屬性。 |
CWnd::IsChild |
指出 CWnd 是子視窗,還是指定視窗的其他直屬下階。 |
CWnd::IsD2DSupportEnabled |
判斷是否啟用 D2D 支援。 |
CWnd::IsDialogMessage |
判斷指定的訊息是否適用於非強制回應對話方塊,若是則處理它。 |
CWnd::IsDlgButtonChecked |
決定是否核取按鈕控制項。 |
CWnd::IsDynamicLayoutEnabled |
決定是否在這個視窗上啟用動態配置。 如果啟用動態配置時,則使用者可在調整父視窗大小時變更子視窗的位置與大小。 |
CWnd::IsIconic |
決定是否將 CWnd 降到最低 (圖示)。 |
CWnd::IsTouchWindow |
指定 CWnd 是否有觸控支援。 |
CWnd::IsWindowEnabled |
決定是否為滑鼠和鍵盤輸入啟用視窗。 |
CWnd::IsWindowVisible |
決定視窗是否可見。 |
CWnd::IsZoomed |
決定是否將 CWnd 最大化。 |
CWnd::KillTimer |
刪除系統計時器。 |
CWnd::LockWindowUpdate |
停用或重新啟用在給定視窗中繪製。 |
CWnd::MapWindowPoints |
將一組點從 CWnd 的座標空間轉換 (對應) 至另一個視窗的座標空間。 |
CWnd::MessageBox |
建立並顯示視窗,其中包含應用程式提供的訊息和標題。 |
CWnd::ModifyStyle |
修改目前的視窗樣式。 |
CWnd::ModifyStyleEx |
修改視窗的延伸樣式。 |
CWnd::MoveWindow |
變更 CWnd 的位置和維度。 |
CWnd::NotifyWinEvent |
表示發生預先定義之事件的系統。 |
CWnd::OnAmbientProperty |
實作環境屬性值。 |
CWnd::OnDrawIconicThumbnailOrLivePreview |
需要取得點陣圖,在 Windows 7 索引標籤上顯示為縮圖時,或顯示在用戶端上以查看應用程式時,由架構呼叫。 |
CWnd::OnHelp |
在應用程式 (使用目前的內容) 中處理 F1 說明。 |
CWnd::OnHelpFinder |
ID_HELP_FINDER 處理和 ID_DEFAULT_HELP 命令。 |
CWnd::OnHelpIndex |
ID_HELP_INDEX 處理命令並提供預設的 [說明] 主題。 |
CWnd::OnHelpUsing |
處理 ID_HELP_USING 命令。 |
CWnd::OnToolHitTest |
決定一個點是否位於指定工具的周框中並擷取工具的相關資訊。 |
CWnd::OpenClipboard |
開啟剪貼簿。 在呼叫 Windows CloseClipboard 函式之前,其他應用程式將無法修改剪貼簿。 |
CWnd::PaintWindowlessControls |
在控制項容器上繪製無視窗控制項。 |
CWnd::PostMessage |
在應用程式佇列中放置訊息,然後傳回,而不需等待視窗處理訊息。 |
CWnd::PreCreateWindow |
在建立附加至此 CWnd 物件的 Windows 視窗前呼叫。 |
CWnd::PreSubclassWindow |
允許在呼叫之前 SubclassWindow 進行其他必要的子類別設定。 |
CWnd::PreTranslateMessage |
由 CWinApp 使用,可先篩選視窗訊息,再將它們分派至 TranslateMessage 和 DispatchMessage Windows 函式。 |
CWnd::Print |
在指定的裝置內容中繪製目前的視窗。 |
CWnd::PrintClient |
在指定的裝置內容中繪製任何視窗 (通常是印表機裝置內容)。 |
CWnd::PrintWindow |
將視覺視窗複製到指定的裝置內容,通常是印表機 DC。 |
CWnd::RedrawWindow |
更新工作區中指定的矩形或區域。 |
CWnd::RegisterTouchWindow |
註冊/取消註冊視窗 Windows 觸控支援。 |
CWnd::ReleaseDC |
釋放用戶端和視窗裝置內容,釋放這些內容供其他應用程式使用。 |
CWnd::RepositionBars |
工作區中的重新置放控制列。 |
CWnd::RunModalLoop |
擷取、轉換或分派處於強制回應狀態之視窗的訊息。 |
CWnd::ScreenToClient |
將畫面上指定的點或矩形的螢幕座標,轉換為用戶端座標。 |
CWnd::ScrollWindow |
捲動工作區的內容。 |
CWnd::ScrollWindowEx |
捲動工作區的內容。 類似於 ScrollWindow ,但具有額外的功能。 |
CWnd::SendChildNotifyLastMsg |
從父視窗中將通知訊息提供給子視窗,讓子視窗可以處理工作。 |
CWnd::SendDlgItemMessage |
將訊息傳送至指定的控制項。 |
CWnd::SendMessage |
傳送訊息給 CWnd 物件,在處理訊息後才會傳回。 |
CWnd::SendMessageToDescendants |
傳送訊息給視窗的所有下階視窗。 |
CWnd::SendNotifyMessage |
將指定的訊息傳送至視窗並儘速傳回,視呼叫執行緒是否建立視窗而定。 |
CWnd::SetActiveWindow |
啟用視窗。 |
CWnd::SetCapture |
導致所有後續滑鼠輸入傳送至 CWnd 。 |
CWnd::SetCaretPos |
將插入號移動到指定的位置。 |
CWnd::SetClipboardViewer |
將 CWnd 新增到視窗的鏈結,每當剪貼簿的內容變更時就會通知這些視窗。 |
CWnd::SetDlgCtrlID |
設定視窗或視窗的控制項識別碼 (這可以是任何子視窗,而不只是對話方塊中的控制項)。 |
CWnd::SetDlgItemInt |
將控制項的文字設為表示整數值的字串。 |
CWnd::SetDlgItemText |
在指定的對話方塊中設定控制項的標題或文字。 |
CWnd::SetFocus |
宣告輸入焦點。 |
CWnd::SetFont |
設定目前的字型。 |
CWnd::SetForegroundWindow |
將建立視窗的執行緒放置到前景並啟動視窗。 |
CWnd::SetIcon |
將控制代碼設為特定的圖示。 |
CWnd::SetLayeredWindowAttributes |
設定分層視窗的不透明和透明色鍵。 |
CWnd::SetMenu |
將功能表設定為指定的功能表。 |
CWnd::SetOwner |
變更 CWnd 的擁有者。 |
CWnd::SetParent |
變更父視窗。 |
CWnd::SetProperty |
設定 ActiveX 控制項屬性。 |
CWnd::SetRedraw |
允許重新繪製 CWnd 中的變更,或防止重新繪製進行變更。 |
CWnd::SetScrollInfo |
設定捲軸的相關資訊。 |
CWnd::SetScrollPos |
設定捲動方塊的目前位置,而且如果指定,會重新繪製捲軸以反映新位置。 |
CWnd::SetScrollRange |
設定給定捲軸的最小和最大位置值。 |
CWnd::SetTimer |
安裝系統定時器,以在觸發時傳送 WM_TIMER 訊息。 |
CWnd::SetWindowContextHelpId |
設定說明內容識別碼。 |
CWnd::SetWindowPlacement |
設定視窗的顯示狀態和一般 (還原)、最小化和最大化位置。 |
CWnd::SetWindowPos |
變更大小、位置和子系順序、快顯視窗,和最上層視窗。 |
CWnd::SetWindowRgn |
設定視窗的區域。 |
CWnd::SetWindowText |
將視窗文字或標題 (如果有的話) 設為指定的文字。 |
CWnd::ShowCaret |
在畫面上插入號的目前位置上顯示插入號。 顯示後,插入號會開始自動閃爍。 |
CWnd::ShowOwnedPopups |
顯示或隱藏視窗擁有的所有快顯視窗。 |
CWnd::ShowScrollBar |
顯示或隱藏捲軸。 |
CWnd::ShowWindow |
顯示或隱藏視窗。 |
CWnd::SubclassDlgItem |
將 Windows 控制項附加至 CWnd 物件,並使其透過 CWnd 的訊息對應來路由訊息。 |
CWnd::SubclassWindow |
將視窗附加至 CWnd 物件,並使其透過 CWnd 的訊息對應來路由訊息。 |
CWnd::UnlockWindowUpdate |
解除鎖定已使用 CWnd::LockWindowUpdate 鎖定的視窗。 |
CWnd::UnsubclassWindow |
從 CWnd 物件中斷連結視窗 |
CWnd::UpdateData |
從對話方塊中初始化或擷取資料。 |
CWnd::UpdateDialogControls |
呼叫以更新對話方塊按鈕和其他控制項的狀態。 |
CWnd::UpdateLayeredWindow |
更新分層視窗的位置、大小、形狀、內容和透明度。 |
CWnd::UpdateWindow |
更新工作區。 |
CWnd::ValidateRect |
從目前的更新區域中移除矩形,驗證給定矩形內的工作區。 |
CWnd::ValidateRgn |
從目前的更新區域中移除區域,驗證給定區域內的工作區。 |
CWnd::WindowFromPoint |
識別包含指定點的視窗。 |
CWnd::WinHelp |
呼叫以初始化 WinHelp 應用程式。 |
受保護的方法
名稱 | 描述 |
---|---|
CWnd::Default |
呼叫預設視窗程序,提供應用程式不會處理的任何視窗訊息的預設處理程序。 |
CWnd::DefWindowProc |
呼叫預設視窗程序,提供應用程式不會處理的任何視窗訊息的預設處理程序。 |
CWnd::DoDataExchange |
適用於對話方塊資料交換和驗證。 由 UpdateData 呼叫。 |
CWnd::GetCurrentMessage |
傳回此視窗目前正在處理的訊息指標。 只有在訊息處理程式成員函式中 On Message 時,才應該呼叫 。 |
CWnd::InitDynamicLayout |
由架構呼叫以初始化視窗的動態配置。 |
CWnd::LoadDynamicLayoutResource |
從資源檔載入動態配置資訊。 |
CWnd::OnActivate |
當 CWnd 啟動或停用時呼叫。 |
CWnd::OnActivateApp |
當應用程式即將啟動或停用時呼叫。 |
CWnd::OnAppCommand |
當使用者產生應用程式命令事件時呼叫。 |
CWnd::OnAskCbFormatName |
當剪貼簿擁有者將顯示剪貼簿內容時,由剪貼簿檢視器應用程式呼叫。 |
CWnd::OnCancelMode |
呼叫以讓 CWnd 取消任何內部的模式,例如滑鼠捕捉。 |
CWnd::OnCaptureChanged |
將訊息傳送至正失去滑鼠捕捉的視窗。 |
CWnd::OnChangeCbChain |
通知正在從鏈結中移除指定的視窗。 |
CWnd::OnChangeUIState |
應變更使用者介面 (UI) 狀態時呼叫。 |
CWnd::OnChar |
按鍵轉譯為非系統字元時呼叫。 |
CWnd::OnCharToItem |
由子清單框呼叫,其中包含回應WM_CHAR 訊息的LBS_WANTKEYBOARDINPUT 樣式。 |
CWnd::OnChildActivate |
每當 CWnd 的大小或位置變更,或 CWnd 已啟動時,針對多重文件介面 (MDI) 子視窗呼叫。 |
CWnd::OnChildNotify |
由父視窗呼叫,讓通知控制項有機會回應控制項通知。 |
CWnd::OnClipboardUpdate |
於剪貼簿內容已變更時呼叫。 |
CWnd::OnClose |
呼叫以表示 CWnd 應該關閉。 |
CWnd::OnColorizationColorChanged |
當非工作區的轉譯原則已變更時呼叫。 |
CWnd::OnCommand |
當使用者選取命令時呼叫。 |
CWnd::OnCompacting |
當 Windows 偵測到系統記憶體過低時呼叫。 |
CWnd::OnCompareItem |
呼叫以判斷子排序之主控描繪的下拉式方塊或清單方塊中新項目的相對位置。 |
CWnd::OnCompositionChanged |
當桌面視窗管理員 (DWM) 組合啟用或停用時,為所有最上層視窗呼叫。 |
CWnd::OnContextMenu |
當使用者在視窗中按一下滑鼠右鍵時呼叫。 |
CWnd::OnCopyData |
在應用程式之間複製資料。 |
CWnd::OnCreate |
在視窗建立過程中呼叫。 |
CWnd::OnCtlColor |
即將繪製控制項時,如果CWnd 是控制項的父代則呼叫。 |
CWnd::OnDeadChar |
當按鍵轉譯為非系統無效字元 (例如強調符號) 時呼叫。 |
CWnd::OnDeleteItem |
當主控描繪子清單方塊或下拉式方塊損毀,或從控制項移除項目時呼叫。 |
CWnd::OnDestroy |
CWnd 正在損毀時呼叫。 |
CWnd::OnDestroyClipboard |
當剪貼簿透過 Windows EmptyClipboard 函式的呼叫清空時呼叫。 |
CWnd::OnDeviceChange |
將裝置或電腦的硬體組態變更通知應用程式或裝置驅動程式。 |
CWnd::OnDevModeChange |
當使用者變更裝置模式設定時,針對所有最上層視窗呼叫。 |
CWnd::OnDrawClipboard |
於剪貼簿內容變更時呼叫。 |
CWnd::OnDrawItem |
主控描繪子按鈕控制項、下拉式方塊控制項、清單方塊控制項或功能表的視覺外觀必須繪製時呼叫。 |
CWnd::OnDropFiles |
當使用者在視窗 (已本身註冊為捨棄檔案的收件者) 上放開滑鼠按鈕時呼叫。 |
CWnd::OnEnable |
啟用或停用 CWnd 時呼叫。 |
CWnd::OnEndSession |
當工作階段正在結束時呼叫。 |
CWnd::OnEnterIdle |
呼叫此函式,可將強制回應對話方塊或功能表正在進入閒置狀態的訊息,通知應用程式的主視窗程序。 |
CWnd::OnEnterMenuLoop |
已進入功能表強制回應迴圈時呼叫。 |
CWnd::OnEnterSizeMove |
在受影響的視窗進入移動或調整大小的強制回應迴圈後呼叫。 |
CWnd::OnEraseBkgnd |
視窗背景需要清除時呼叫。 |
CWnd::OnExitMenuLoop |
已結束功能表強制回應迴圈時呼叫。 |
CWnd::OnExitSizeMove |
在受影響的視窗結束移動或調整大小的強制回應迴圈後呼叫。 |
CWnd::OnFontChange |
字型資源的集區變更時呼叫。 |
CWnd::OnGetDlgCode |
呼叫控制項,讓控制項可以處理方向鍵和 TAB 鍵輸入本身。 |
CWnd::OnGetMinMaxInfo |
每當 Windows 必須知道最大化的位置或維度,或最小或最大的追蹤大小時呼叫。 |
CWnd::OnHelpInfo |
當使用者按下 F1 鍵時,由架構呼叫。 |
CWnd::OnHotKey |
當使用者按下全系統的便捷鍵時呼叫。 |
CWnd::OnHScroll |
當使用者按一下 CWnd 的水平捲軸時呼叫。 |
CWnd::OnHScrollClipboard |
當剪貼簿擁有者應該捲動剪貼簿影像、使適當的區段失效,及更新捲軸值時呼叫。 |
CWnd::OnIconEraseBkgnd |
當 CWnd 減到最小 (圖示),且必須先填入圖示的背景再繪製圖示時呼叫。 |
CWnd::OnInitMenu |
當功能表即將變成現用時呼叫。 |
CWnd::OnInitMenuPopup |
當快顯功能表即將變成現用時呼叫。 |
CWnd::OnInputDeviceChange |
從系統中新增或移除 I/O 裝置時呼叫。 |
CWnd::OnInputLangChange |
在應用程式的輸入語言變更後呼叫。 |
CWnd::OnInputLangChangeRequest |
當使用者選擇新的輸入語言時呼叫。 |
CWnd::OnKeyDown |
按下非系統鍵時呼叫。 |
CWnd::OnKeyUp |
放開非系統鍵時呼叫。 |
CWnd::OnKillFocus |
在 CWnd 遺失輸入焦點前立即呼叫。 |
CWnd::OnLButtonDblClk |
當使用者按兩下滑鼠左鍵時呼叫。 |
CWnd::OnLButtonDown |
當使用者按下滑鼠左鍵時呼叫。 |
CWnd::OnLButtonUp |
當使用者放開滑鼠左鍵時呼叫。 |
CWnd::OnMButtonDblClk |
當使用者按兩下滑鼠中鍵時呼叫。 |
CWnd::OnMButtonDown |
當使用者按下滑鼠中鍵時呼叫。 |
CWnd::OnMButtonUp |
當使用者放開滑鼠中鍵時呼叫。 |
CWnd::OnMDIActivate |
當 MDI 子視窗啟用或停用時呼叫。 |
CWnd::OnMeasureItem |
建立控制項時,針對主控描繪子下拉式方塊、清單方塊或功能表項目呼叫。 CWnd 會將控制項維度通知 Windows。 |
CWnd::OnMenuChar |
當使用者按下功能表的助憶鍵字元,且該字元不符合目前功能表中任何預先定義的助憶鍵時呼叫。 |
CWnd::OnMenuDrag |
當使用者開始拖曳功能表項目時呼叫。 |
CWnd::OnMenuGetObject |
當滑鼠游標進入功能表項目,或從項目中央移到項目上方或下方時呼叫。 |
CWnd::OnMenuRButtonUp |
當游標位於功能表項目上,而使用者放開滑鼠右鍵時呼叫。 |
CWnd::OnMenuSelect |
當使用者選取功能表項目時呼叫。 |
CWnd::OnMouseActivate |
當游標處於非使用中視窗,且使用者按下滑鼠按鈕時呼叫。 |
CWnd::OnMouseHover |
當游標停留在視窗的工作區上,在之前呼叫 中指定的一段時間時呼叫 TrackMouseEvent 。 |
CWnd::OnMouseHWheel |
當滑鼠的水平滾動滾輪傾斜或旋轉時呼叫。 |
CWnd::OnMouseLeave |
當游標離開之前呼叫 中所指定視窗的工作區時呼叫 TrackMouseEvent 。 |
CWnd::OnMouseMove |
當滑鼠游標移動時呼叫。 |
CWnd::OnMouseWheel |
當使用者旋轉滑鼠滾輪時呼叫。 使用 Windows NT 4.0 訊息處理。 |
CWnd::OnMove |
在 CWnd 的位置變更後呼叫。 |
CWnd::OnMoving |
指出使用者正在移動 CWnd 物件。 |
CWnd::OnNcActivate |
當非工作區需要變更以表示作用中或非作用中狀態時呼叫。 |
CWnd::OnNcCalcSize |
需要計算工作區的大小和位置時呼叫。 |
CWnd::OnNcCreate |
建立非工作區之前 OnCreate 呼叫。 |
CWnd::OnNcDestroy |
當非工作區正在損毀時呼叫。 |
CWnd::OnNcHitTest |
每次移動滑鼠時,如果 CWnd 包含游標,或已使用 SetCapture 擷取滑鼠輸入時呼叫。 |
CWnd::OnNcLButtonDblClk |
當使用者按兩下滑鼠左鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcLButtonDown |
當使用者按下滑鼠左鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcLButtonUp |
當使用者放開滑鼠左鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcMButtonDblClk |
當使用者按兩下滑鼠中鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcMButtonDown |
當使用者按下滑鼠中鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcMButtonUp |
當使用者放開滑鼠中鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcMouseHover |
當游標停留在視窗的非工作區上,在之前呼叫 中所指定的一段時間內呼叫 時呼叫 TrackMouseEvent 。 |
CWnd::OnNcMouseLeave |
當游標離開之前呼叫 TrackMouseEvent 中所指定視窗的非工作區時,架構會呼叫這個成員函式。 |
CWnd::OnNcMouseMove |
當游標在 CWnd 的非工作區內移動時呼叫。 |
CWnd::OnNcPaint |
當非工作區需要繪製時呼叫。 |
CWnd::OnNcRButtonDblClk |
當使用者按兩下滑鼠右鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcRButtonDown |
當使用者按下滑鼠右鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcRButtonUp |
當使用者放開滑鼠右鍵,而游標位於 CWnd 的非工作區內時呼叫。 |
CWnd::OnNcRenderingChanged |
當非工作區的轉譯原則已變更時呼叫。 |
CWnd::OnNcXButtonDblClk |
當使用者按兩下 XBUTTON1 或 XBUTTON2 游標位於視窗的非工作區時呼叫。 |
CWnd::OnNcXButtonDown |
當使用者按下 XBUTTON1 滑鼠或 XBUTTON2 滑鼠時,游標位於視窗的非工作區時呼叫。 |
CWnd::OnNcXButtonUp |
當使用者放開 XBUTTON1 滑鼠或在 XBUTTON2 游標位於視窗的非工作區時呼叫。 |
CWnd::OnNextMenu |
當使用向右鍵或向左鍵切換功能表列和系統功能表時呼叫。 |
CWnd::OnNotify |
由架構呼叫,將其中一個控制項已發生的事件,或控制項需要資訊等狀況通知父視窗。 |
CWnd::OnNotifyFormat |
呼叫 以判斷目前視窗是否接受通知訊息中的 WM_NOTIFY ANSI 或 Unicode 結構。 |
CWnd::OnPaint |
呼叫以重新繪製視窗的一部份。 |
CWnd::OnPaintClipboard |
當需要重新繪製剪貼簿檢視器的工作區時呼叫。 |
CWnd::OnPaletteChanged |
呼叫以允許使用調色盤的視窗調整其邏輯色板的大小,並更新其工作區。 |
CWnd::OnPaletteIsChanging |
當應用程式即將實現其邏輯色板時通知其他應用程式。 |
CWnd::OnParentNotify |
建立或終結子視窗時,或當使用者按一下滑鼠按鈕,而游標移至子視窗上方時,進行呼叫。 |
CWnd::OnPowerBroadcast |
電源管理事件發生時呼叫。 |
CWnd::OnQueryDragIcon |
最小化 (圖示化) CWnd 即將由使用者拖曳時呼叫。 |
CWnd::OnQueryEndSession |
當使用者選擇結束 Windows 工作階段時呼叫。 |
CWnd::OnQueryNewPalette |
通知 CWnd 即將接收輸入焦點。 |
CWnd::OnQueryOpen |
當 CWnd 是圖示,且使用者要求開啟圖示時呼叫。 |
CWnd::OnQueryUIState |
呼叫以擷取視窗的使用者介面 (UI) 狀態。 |
CWnd::OnRawInput |
當目前視窗取得原始輸入時呼叫。 |
CWnd::OnRButtonDblClk |
當使用者按兩下滑鼠右鍵時呼叫。 |
CWnd::OnRButtonDown |
當使用者按下滑鼠右鍵時呼叫。 |
CWnd::OnRButtonUp |
當使用者放開滑鼠右鍵時呼叫。 |
CWnd::OnRenderAllFormats |
當擁有者應用程式正在被破壞,而且需要呈現其所有格式時呼叫。 |
CWnd::OnRenderFormat |
需要呈現具有延遲轉譯需求的特定格式時,針對剪貼簿擁有者呼叫。 |
CWnd::OnSessionChange |
呼叫以將工作階段狀態的變更通知應用程式。 |
CWnd::OnSetCursor |
如果未擷取滑鼠輸入,而且滑鼠會在視窗中造成游標移動,則呼叫 。 |
CWnd::OnSetFocus |
在 CWnd 取得輸入焦點後呼叫。 |
CWnd::OnSettingChange |
當 Win32 SystemParametersInfo 函式變更整個系統的設定時呼叫。 |
CWnd::OnShowWindow |
當 CWnd 要隱藏或顯示時呼叫。 |
CWnd::OnSize |
在 CWnd 大小變更後呼叫。 |
CWnd::OnSizeClipboard |
當剪貼簿檢視器視窗中的工作區大小變更後呼叫。 |
CWnd::OnSizing |
表示使用者正在重新調整矩形的大小。 |
CWnd::OnSpoolerStatus |
每當加入工作或從列印管理員佇列中移除工作時,從列印管理員呼叫。 |
CWnd::OnStyleChanged |
表示 SetWindowLong Windows 函式已變更視窗的一或多個樣式。 |
CWnd::OnStyleChanging |
指出 SetWindowLong Windows 函式即將變更視窗的一或多個樣式。 |
CWnd::OnSysChar |
按鍵轉譯為系統字元時呼叫。 |
CWnd::OnSysColorChange |
當系統色彩設定中進行變更時,為所有最上層視窗呼叫。 |
CWnd::OnSysCommand |
當使用者從 [控制] 功能表中選取命令時,或在使用者選取 [最大化] 或 [最小化] 按鈕時呼叫。 |
CWnd::OnSysDeadChar |
當按鍵轉譯為系統無效字元 (例如強調符號) 時呼叫。 |
CWnd::OnSysKeyDown |
當使用者按住 ALT 鍵,然後按下另一個按鍵時呼叫。 |
CWnd::OnSysKeyUp |
當使用者在按住 ALT 鍵時放開按下的按鍵時呼叫。 |
CWnd::OnTCard |
使用者按一下可設計的按鈕時呼叫。 |
CWnd::OnTimeChange |
在系統時間變更後,針對所有最上層視窗呼叫。 |
CWnd::OnTimer |
在 中指定的 SetTimer 每個間隔之後呼叫。 |
CWnd::OnTouchInput |
處理來自 Windows 觸控的單一輸入。 |
CWnd::OnTouchInputs |
處理來自 Windows 觸控的輸入。 |
CWnd::OnUniChar |
按下按鍵時呼叫。 也就是說,目前的視窗具有鍵盤焦點,而且 WM_KEYDOWN 函式會 TranslateMessage 翻譯訊息。 |
CWnd::OnUnInitMenuPopup |
於下拉式功能表或子功能表被終結時呼叫。 |
CWnd::OnUpdateUIState |
呼叫以變更指定的視窗及其所有子視窗的使用者介面 (UI) 狀態。 |
CWnd::OnUserChanged |
在使用者登入或登出後呼叫。 |
CWnd::OnVKeyToItem |
由擁有 CWnd 的清單框呼叫,以回應 WM_KEYDOWN 訊息。 |
CWnd::OnVScroll |
當使用者按一下視窗的垂直捲軸時呼叫。 |
CWnd::OnVScrollClipboard |
當擁有者應該捲動剪貼簿影像、使適當的區段失效,及更新捲軸值時呼叫。 |
CWnd::OnWindowPosChanged |
當大小、位置或 Z 順序因呼叫 或其他視窗管理函式而變更時呼叫 SetWindowPos 。 |
CWnd::OnWindowPosChanging |
當大小、位置或 Z 順序即將因為呼叫 或其他視窗管理函式而變更時呼叫 SetWindowPos 。 |
CWnd::OnWinIniChange |
在 Windows 初始化檔案 WIN.INI 之後,針對所有最上層視窗呼叫 ,變更 。 |
CWnd::OnWndMsg |
指出是否已處理視窗訊息。 |
CWnd::OnXButtonDblClk |
當使用者按兩下 XBUTTON1 或 XBUTTON2 游標位於視窗的工作區時呼叫。 |
CWnd::OnXButtonDown |
當使用者按下 XBUTTON1 或 XBUTTON2 游標位於視窗的工作區時呼叫。 |
CWnd::OnXButtonUp |
當使用者放開 XBUTTON1 或 XBUTTON2 游標位於視窗的工作區時呼叫。 |
CWnd::PostNcDestroy |
在窗口終結之後,預設 OnNcDestroy 函式會呼叫此虛擬函式。 |
CWnd::ReflectChildNotify |
協助程式函式,其會反映其來源的訊息。 |
CWnd::ReflectLastMsg |
將最後一個訊息反映到子視窗。 |
CWnd::ResizeDynamicLayout |
如果已啟用視窗的動態配置,則會在視窗大小變更以調整子視窗的版面配置時由架構呼叫。 |
CWnd::WindowProc |
提供 CWnd 的視窗程序。 透過訊息對應的預設分派訊息。 |
公用運算子
名稱 | 描述 |
---|---|
CWnd::operator HWND |
呼叫以取得視窗的控制代碼。 |
CWnd::operator != |
判斷視窗是否與句柄為 m_hWnd 的視窗不同。 |
CWnd::operator == |
判斷視窗是否與句柄為 m_hWnd 的視窗相同。 |
公用資料成員
名稱 | 描述 |
---|---|
CWnd::m_hWnd |
表示附加至這個 CWnd 的 HWND。 |
備註
CWnd
物件不同於 Windows 視窗,但兩者緊密連結。 CWnd
物件是由 CWnd
建構函式和解構函式所建立或終結。 另一方面,Windows 視窗是 Windows 內部的數據結構,由 Create
成員函式所建立,並由虛擬解構函式終結 CWnd
。 函 DestroyWindow
式會終結 Windows 視窗,而不會終結 物件。
類別 CWnd
和訊息對應機制會隱藏函式 WndProc
。 傳入的 Windows 通知訊息會自動透過訊息對應路由傳送至適當的 OnMessage CWnd
成員函式。 您可以覆寫 OnMessage 成員函式,以處理衍生類別中成員的特定訊息。
CWnd
類別也可讓您建立應用程式的 Windows 子視窗。 自 CWnd
衍生類別,然後將成員變數加入至衍生類別以儲存應用程式的特定資料。 實作訊息處理常式成員函式,和衍生類別中對應的訊息,以指定訊息被導向至視窗時會發生什麼事。
您在兩個步驟中建立子視窗。 首先,呼叫建構函式 CWnd
來建構 CWnd
物件,然後呼叫 Create
成員函式來建立子視窗,並將它附加至 CWnd
物件。
當使用者終止子視窗時,摧毀 CWnd
物件,或呼叫 DestroyWindow
成員函式來移除視窗並摧毀其資料結構。
在 Microsoft Foundation 類別庫中,會自 CWnd
衍生進一步類別以提供特定的視窗類型。 其中許多類別,包括 CFrameWnd
、 CMDIFrameWnd
、 CMDIChildWnd
、 CView
、 和 CDialog
,都是針對進一步衍生而設計的。 衍生自 CWnd
的控件類別,例如 CButton
,可以直接使用,或可用於進一步衍生類別。
如需使用 CWnd
的詳細資訊,請參閱 Frame Windows
和 Window 物件。
繼承階層架構
CWnd
需求
標題: afxwin.h
CWnd::accDoDefaultAction
由架構呼叫以執行物件的預設動作。
virtual HRESULT accDoDefaultAction(VARIANT varChild);
參數
varChild
指定要叫用的預設動作是 物件或其中一個物件的子專案。 這個參數可以是CHILDID_SELF(若要執行對象的預設動作)或子標識碼(若要執行其中一個物件的子元素的默認動作)。
傳回值
傳回成功時S_OK失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的 IAccessible::accDoDefaultAction 中的傳回值。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,以執行對象的默認動作。 如需詳細資訊,請參閱 Windows SDK 中的 IAccessible::accDoDefaultAction 。
CWnd::accHitTest
由架構呼叫以擷取畫面中給定點的子項目或子物件。
virtual HRESULT accHitTest(
long xLeft,
long yTop,
VARIANT* pvarChild);
參數
xLeft
要點擊測試之點的 X 座標(以螢幕單位為單位)。
yTop
要點擊測試之點的 Y 座標(以螢幕單位為單位)。
pvarChild
接收在和yTop
所xLeft
指定之點識別物件的資訊。 IAccessible::accHitTest
請參閱 pvarID
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::accHitTest
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::accHitTest
Windows SDK 中的 。
CWnd::accLocation
由架構呼叫以擷取指定物件目前畫面的位置。
virtual HRESULT accLocation(
long* pxLeft,
long* pyTop,
long* pcxWidth,
long* pcyHeight,
VARIANT varChild);
參數
pxLeft
接收物件左上角的 X 座標(以螢幕單位為單位)。
pyTop
接收物件的左上角 (以螢幕單位為單位) 的 Y 座標。
pcxWidth
接收物件的寬度(以螢幕單位為單位)。
pcyHeight
接收物件的高度(以螢幕單位為單位)。
varChild
指定要擷取的位置是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
傳回值
傳回成功時S_OK失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::accLocation
。
備註
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::accLocation
Windows SDK 中的 。
CWnd::accNavigate
由架構呼叫以便於周遊容器內的另一使用者介面項目並擷取物件 (如果可能)。
virtual HRESULT accNavigate(
long navDir,
VARIANT varStart,
VARIANT* pvarEndUpAt);
參數
navDir
指定要巡覽的方向。 IAccessible::accNavigate
請參閱 navDir
Windows SDK 中的 。
varStart
指定起始物件。 IAccessible::accNavigate
請參閱 varStart
Windows SDK 中的 。
pvarEndUpAt
接收目的地使用者介面對象的相關信息。 IAccessible::accNavigate
請參閱 pvarEnd
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::accNavigate
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::accNavigate
Windows SDK 中的 。
CWnd::accSelect
由架構呼叫以修改選取或移動指定物件的鍵盤焦點。
virtual HRESULT accSelect(
long flagsSelect,
VARIANT varChild);
參數
flagsSelect
指定如何變更目前的選取範圍或焦點。 IAccessible::accSelect
請參閱 flagsSelect
Windows SDK 中的 。
varChild
指定要選取的物件。 此參數可以是 CHILDID_SELF
(若要選取物件本身)或子標識碼(若要選取其中一個物件的子系)。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::accSelect
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::accSelect
Windows SDK 中的 。
CWnd::AnimateWindow
顯示或隱藏視窗時產生特殊效果。
BOOL AnimateWindow(
DWORD dwTime,
DWORD dwFlags);
參數
dwTime
指定以毫秒為單位播放動畫所需的時間。 一般而言,動畫需要 200 毫秒才能播放。
dwFlags
指定動畫的類型。 如需可能值的完整清單,請參閱 AnimateWindow
。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 AnimateWindow
,如 Windows SDK 中所述。
CWnd::ArrangeIconicWindows
排列所有最小化 (圖示) 子視窗。
UINT ArrangeIconicWindows();
傳回值
如果函式成功,則為一列圖示的高度;否則為 0。
備註
此成員函式也會排列桌面視窗上的圖示,其涵蓋整個畫面。 成員 GetDesktopWindow
函式會擷取桌面視窗物件的指標。
若要在 MDI 用戶端視窗中排列標誌性的 MDI 子視窗,請呼叫 CMDIFrameWnd::MDIIconArrange
。
範例
// arrange minimized MDI child windows
// called from menu item; CMdiChildFrame is derived from CMDIChildWnd
void CMdiChildFrame::OnActionArrangeIconicWindows()
{
UINT height = GetParent()->ArrangeIconicWindows();
TRACE(_T("height = %d\n"), height);
}
CWnd::Attach
將 Windows 視窗附加至 CWnd
物件。
BOOL Attach(HWND hWndNew);
參數
hWndNew
指定 Windows 視窗的句柄。
傳回值
如果成功則為非零;否則為 0。
範例
此範例示範如何使用 Attach
和 Detach
對應至 MDI 用戶端視窗。
// Declare a CWnd member of CMainFrame
public:
CWnd m_wndMDIClient;
// detach MDI client window in CMainFrame destructor
m_wndMDIClient.Detach();
// In CMainFrame::OnCreate, attach MDI client window
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// attach MDI client window
if (m_wndMDIClient.Attach(m_hWndMDIClient) == 0)
{
TRACE(_T("Failed to attach MDIClient.\n"));
return -1; // fail to create
}
CWnd::BeginModalState
呼叫此成員函式以製作框架視窗強制回應。
virtual void BeginModalState();
CWnd::BeginPaint
CWnd
準備繪製並填入PAINTSTRUCT
數據結構與繪製的相關信息。
CDC* BeginPaint(LPPAINTSTRUCT lpPaint);
參數
lpPaint
指向 PAINTSTRUCT
要接收繪製信息的結構。
傳回值
識別的 CWnd
裝置內容。 指標可能是暫時的,不應該儲存在 的範圍 EndPaint
之外。
備註
繪製結構包含一個 RECT
數據結構,該數據結構具有最小矩形,該矩形會完全封入更新區域,以及指定是否已清除背景的旗標。
更新區域是由 Invalidate
、 InvalidateRect
或 InvalidateRgn
成員函式所設定,並在系統調整、移動、建立、捲動或執行會影響工作區的任何其他作業之後設定。 如果更新區域標示為清除, BeginPaint
請傳送 WM_ONERASEBKGND
訊息。
除了回應WM_PAINT
訊息以外,BeginPaint
請勿呼叫成員函式。 對成員函式的每個呼叫 BeginPaint
都必須有對成員函式的 EndPaint
相符呼叫。 如果插入號位於要繪製的區域, BeginPaint
成員函式會自動隱藏插入號,以防止清除插入號。
範例
// Use BeginPaint and EndPaint when responding to WM_PAINT message
// An alternative method is to use CPaintDC in place of
// BeginPaint and EndPaint
void CMdiView::OnPaint()
{
PAINTSTRUCT ps;
CDC *pDC = BeginPaint(&ps);
pDC->Rectangle(CRect(0, 0, 100, 100));
EndPaint(&ps);
// Do not call CView::OnPaint() for painting messages
}
CWnd::BindDefaultProperty
將呼叫對象的預設簡單綁定屬性(例如編輯控件)系結至數據源控件的 、UserName
、 Password
和 SQL
屬性所DataSource
定義的基礎數據指標。
void BindDefaultProperty(
DISPID dwDispID,
VARTYPE vtProp,
LPCTSTR szFieldName,
CWnd* pDSCWnd);
參數
dwDispID
指定要 DISPID
系結至數據源控件之數據綁定控件上的屬性。
vtProp
指定要系結之屬性的類型。 例如、 VT_BSTR
VT_VARIANT
等。
szFieldName
在數據源控件所提供的數據指標中,指定要系結屬性的數據行名稱。
pDSCWnd
指向裝載要系結屬性之數據源控件的視窗。 使用DCS主機視窗的資源標識符呼叫 GetDlgItem
,以擷取此指標。
備註
CWnd
您呼叫此函式的物件必須是數據綁定控件。
範例
BindDefaultProperty
可能用於下列內容:
BOOL CMyDlg::OnInitDialog()
{
CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
CWnd *pMyBound = GetDlgItem(IDC_MYBOUNDCTRL1);
pMyBound->BindDefaultProperty(0x1, VT_BSTR, _T("ContactFirstName"), pDSC);
return TRUE;
}
CWnd::BindProperty
將數據綁定控件上的數據指標系結屬性(例如方格控件)系結至數據源控件,並註冊該關聯性與 MFC 系結管理員。
void BindProperty(
DISPID dwDispId,
CWnd* pWndDSC);
參數
dwDispId
指定要 DISPID
系結至數據源控件之數據綁定控件上的屬性。
pWndDSC
指向裝載要系結屬性之數據源控件的視窗。 使用DCS主機視窗的資源標識符呼叫 GetDlgItem
,以擷取此指標。
備註
CWnd
您呼叫此函式的物件必須是數據綁定控件。
範例
BindProperty
可能用於下列內容:
BOOL CMyDlg::OnInitDialog()
{
CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
CWnd *pMyBound = GetDlgItem(IDC_MYBOUNDCTRL2);
pMyBound->BindProperty(0x1, pDSC);
return TRUE;
}
CWnd::BringWindowToTop
將 CWnd
帶到重疊視窗堆疊的最上層。
void BringWindowToTop();
備註
此外,BringWindowToTop
會啟用快顯、最上層和 MDI 子視窗。 需使用 BringWindowToTop
成員函式,才能顯示出重疊視窗部分或完全遮住的視窗。
此函式只會呼叫 Win32 BringWindowToTop
函式。 呼叫 函 SetWindowPos
式,以在 Z 順序中變更視窗的位置。 BringWindowToTop
函式不會將視窗樣式變更為最上層視窗。 如需詳細資訊,請參閱和之間的差異HWND_TOP
HWND_TOPMOST
範例
// Moves MDI child windows to the top when a mouse passes
// over it. CMdiView is derived from CView.
void CMdiView::OnMouseMove(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
UNREFERENCED_PARAMETER(point);
GetParentFrame()->BringWindowToTop();
}
CWnd::CalcWindowRect
計算可以包含指定用戶端矩形的視窗矩形。
virtual void CalcWindowRect(
LPRECT lpClientRect,
UINT nAdjustType = adjustBorder);
參數
lpClientRect
[in, out]矩形結構的指標。 在輸入時,這個結構包含用戶端矩形。 方法完成之後,這個結構會包含可包含指定用戶端矩形的視窗矩形。
nAdjustType
[in]使用 CWnd::adjustBorder
計算沒有樣式的 WS_EX_CLIENTEDGE
視窗座標,否則請使用 CWnd::adjustOutside
。
備註
匯出視窗矩形的大小不包含功能表欄的空間。
如需更多使用限制,請參閱 AdjustWindowRectEx
。
範例
// Uses CalcWindowRect to determine size for new CFrameWnd
// based on the size of the current view. The end result is a
// top level frame window of the same size as CMdiView's frame.
void CMdiView::OnMyCreateFrame()
{
CFrameWnd *pFrameWnd = new CFrameWnd;
CRect myRect;
GetClientRect(myRect);
pFrameWnd->Create(NULL, _T("My Frame"));
pFrameWnd->CalcWindowRect(&myRect, CWnd::adjustBorder);
pFrameWnd->MoveWindow(0, 0, myRect.Width(), myRect.Height());
pFrameWnd->ShowWindow(SW_SHOW);
}
CWnd::CancelToolTips
如果目前顯示工具提示,請呼叫此成員函式,從畫面移除工具提示。
static void PASCAL CancelToolTips(BOOL bKeys = FALSE);
參數
bKeys
TRUE
表示按下按鍵時取消工具提示,並將狀態列文字設定為預設值;否則 FALSE
為 。
備註
注意
使用此成員函式不會影響程序代碼所管理的工具提示。 它只會影響 由 CWnd::EnableToolTips
管理的工具提示控件。
範例
// In this example, tool tips were set up to
// pop up when the user moves the mouse
// over this edit control.
// If the mouse is moved to the upper left-hand
// corner, the tool tip would disappear because of
// calling CancelToolTips.
void CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
{
CRect corner(0, 0, 10, 10);
if (corner.PtInRect(point))
CancelToolTips();
CEdit::OnMouseMove(nFlags, point);
}
CWnd::CenterWindow
將相對於其父系的視窗置中。
void CenterWindow(CWnd* pAlternateOwner = NULL);
參數
pAlternateOwner
相對於要置中之替代視窗的指標(父視窗以外)。
備註
通常從 CDialog::OnInitDialog
呼叫至中心對話框,相對於應用程式主視窗。 根據預設,函式會將子視窗置中相對於其父視窗,以及相對於其擁有者的彈出視窗。 如果彈出視窗未擁有,則會相對於螢幕置中。 若要將視窗置中相對於不是擁有者或父系的特定視窗, pAlternateOwner
參數可能會設定為有效的視窗。 若要強制相對於螢幕置中,請將 所 CWnd::GetDesktopWindow
傳回的值傳遞為 pAlternateOwner
。
範例
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
return TRUE;
}
CWnd::ChangeClipboardChain
CWnd
從剪貼簿查看器的鏈結中移除,並讓鏈結中祖系的CWnd
子代所hWndNext
指定的視窗。
BOOL ChangeClipboardChain(HWND hWndNext);
參數
hWndNext
識別剪貼簿查看器鏈結中後續的 CWnd
視窗。
傳回值
如果成功則為非零;否則為 0。
CWnd::CheckDlgButton
選取 (將複選標記放在旁) 或清除 (從 中移除複選標記) 按鈕,或變更三狀態按鈕的狀態。
void CheckDlgButton(
int nIDButton,
UINT nCheck);
參數
nIDButton
指定要修改的按鈕。
nCheck
指定要採取的動作。 如果 nCheck
為非零, CheckDlgButton
則成員函式會在按鈕旁邊放置複選標記;如果為0,則會移除複選標記。 如果是三個狀態按鈕,如果 nCheck
為 2,則按鈕狀態為不確定。
備註
函式 CheckDlgButton
會將 BM_SETCHECK
訊息傳送至指定的按鈕。
範例
// Sets 3 check buttons in various ways. Note BST_INDETERMINATE
// requires BS_3STATE or BS_AUTO3STATE in the button's style.
void CMyDlg::OnMarkButtons()
{
CheckDlgButton(IDC_CHECK1, BST_UNCHECKED); // 0
CheckDlgButton(IDC_CHECK2, BST_CHECKED); // 1
CheckDlgButton(IDC_CHECK3, BST_INDETERMINATE); // 2
}
CWnd::CheckRadioButton
選取 [新增複選標記至] 群組中的指定單選按鈕,並清除群組中所有其他單選按鈕的 [移除複選標記]。
void CheckRadioButton(
int nIDFirstButton,
int nIDLastButton,
int nIDCheckButton);
參數
nIDFirstButton
指定群組中第一個單選按鈕的整數標識碼。
nIDLastButton
指定群組中最後一個單選按鈕的整數標識碼。
nIDCheckButton
指定要檢查之單選按鈕的整數標識碼。
備註
函式 CheckRadioButton
會將 BM_SETCHECK
訊息傳送至指定的單選按鈕。
範例
// Of the 4 radio buttons, selects radio button 3.
void CMyDlg::OnMarkRadio()
{
CheckRadioButton(IDC_RADIO1, IDC_RADIO4, IDC_RADIO3);
}
CWnd::ChildWindowFromPoint
判斷屬於 CWnd
哪個子視窗的子視窗包含指定的點。
CWnd* ChildWindowFromPoint(POINT point) const;
CWnd* ChildWindowFromPoint(
POINT point,
UINT nFlags) const;
參數
point
指定要測試之點的用戶端座標。
nflags
指定要略過的子視窗。 此參數可以是下列值的組合:
值 | 意義 |
---|---|
CWP_ALL |
不要略過任何子視窗 |
CWP_SKIPINVISIBLE |
略過不可見的子視窗 |
CWP_SKIPDISABLED |
略過停用的子視窗 |
CWP_SKIPTRANSPARENT |
略過透明子視窗 |
傳回值
識別包含點的子視窗。 如果指定的點位於工作區之外,則為 NULL
。 如果點位於工作區內,但未包含在任何子視窗內, CWnd
則會傳回 。
此成員函式會傳回隱藏或停用的子視窗,其中包含指定的點。
一個以上的視窗可能包含指定的點。 不過,此函式只會 CWnd
傳回包含該點之第一個視窗的 * 。
傳 CWnd
回的 * 可能是暫時的,不應該儲存以供日後使用。
範例
void CMyDlg::OnFindCenterChild()
{
CRect rect;
GetClientRect(&rect);
CWnd* pWnd = ChildWindowFromPoint(
CPoint(rect.Width()/2, rect.Height()/2),
// Top left is always 0, 0.
CWP_SKIPINVISIBLE);
TRACE(_T("Center window is 0x%08x\n"), pWnd->m_hWnd);
}
CWnd::ClientToScreen
將畫面上指定的點或矩形的用戶端座標,轉換為螢幕座標。
void ClientToScreen(LPPOINT lpPoint) const; void ClientToScreen(LPRECT lpRect) const;
參數
lpPoint
指向 POINT
包含要轉換之用戶端座標的結構 或 CPoint
物件。
lpRect
指向 RECT
包含要轉換之用戶端座標的結構 或 CRect
物件。
備註
成員ClientToScreen
函式會使用 或 結構中的用戶端座標POINT
,RECT
或 CPoint
所指向 lpPoint
的 或 CRect
物件,或 lpRect
計算新的螢幕座標;然後,它會以新的座標取代 結構中的座標。 新的螢幕座標相對於系統顯示左上角。
成員 ClientToScreen
函式假設指定的點或矩形位於用戶端座標中。
範例
// resize dialog to client's size
void CMyDlg::OnSizeToClient()
{
CRect myRect;
GetClientRect(&myRect);
ClientToScreen(myRect);
MoveWindow(myRect.left, myRect.top,
myRect.Width(), myRect.Height());
}
CWnd::CloseWindow
將視窗最小化。
void CloseWindow();
備註
此成員函式會模擬 函式的功能 CloseWindow
,如 Windows SDK 中所述。
CWnd::ContinueModal
呼叫這個成員函 RunModalLoop
式,以判斷何時應該結束強制響應狀態。
virtual BOOL ContinueModal();
傳回值
如果要繼續強制回應迴圈,則為非零;呼叫 時 EndModalLoop
為 0。
備註
根據預設,它會傳回非零,直到 EndModalLoop
呼叫 為止。
CWnd::Create
建立指定的子視窗,並將它附加至 CWnd
物件。
virtual BOOL Create(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
Const RECT& rect,
CWnd* pParentWnd,
UINT nID,
CCreateContext* pContext = NULL);
參數
lpszClassName
[in]包含已註冊系統窗口類別名稱之 Null 終止字串的指標;或預先定義系統視窗類別的名稱。
lpszWindowName
[in]包含窗口顯示名稱之 Null 終止字串的指標;否則 NULL
為沒有視窗顯示名稱。
dwStyle
[in]視窗樣式的位組合 (OR) 。 此選項 WS_POPUP
不是有效的樣式。
rect
[in]相對於父視窗左上角的視窗大小和位置。
pParentWnd
[in]父視窗的指標。
nID
[in]視窗的識別碼。
pContext
[in] CCreateContext
用來自定義應用程式文件檢視架構之結構的指標。
傳回值
TRUE
如果方法成功,則為 ;否則 FALSE
為 。
備註
警告
CWnd::PreCreateWindow
如果功能表是 NULL
,而且樣式包含 WS_CHILD
,則現在會將其 CREATESTRUCT
參數的成員指派hMenu
給this
指標。 如需適當的功能,請確定您的對話框控制件具有不是 NULL
的識別碼。
這項變更可修正 Managed/原生 Interop 案例中的當機狀況。 TRACE
問題的開發人員會CWnd::Create
發出警示的語句。
使用函式 AfxRegisterWndClass
來註冊窗口類別。 使用者定義視窗類別可在註冊的模組中取得。
方法 CWnd::OnCreate
會在 Create
方法傳回之前呼叫,並在視窗變成可見之前呼叫。
範例
// Dynamically create static control using CWnd::Create,
// instead of with CStatic::Create, which doesn't
// need the "STATIC" class name.
void CMyDlg::OnCreateStatic()
{
// m_pWndStatic is a CWnd* member of CMyDlg
m_pWndStatic = new CWnd;
m_pWndStatic->Create(_T("STATIC"), _T("Hi"), WS_CHILD | WS_VISIBLE,
CRect(0, 0, 20, 20), this, 1234);
}
CWnd::CreateAccessibleProxy
建立指定物件的 Active Accessibility Proxy。
virtual HRESULT CreateAccessibleProxy(
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
參數
wParam
識別 Active Accessibility Proxy 所存取的物件。 可以為下列其中一個值
值 | 意義 |
---|---|
OBJID_CLIENT |
是指視窗的工作區。 |
lParam
提供其他訊息相依資訊。
pResult
儲存結果碼之的指標 LRESULT
。
備註
建立指定物件的 Active Accessibility Proxy。
CWnd::CreateCaret
建立系統插入號的新圖形,並宣告插入號的擁有權。
void CreateCaret(CBitmap* pBitmap);
參數
pBitmap
識別定義插入號圖形的點陣圖。
備註
位圖先前必須由成員函式、CreateDIBitmap
Windows 函式或CBitmap::LoadBitmap
成員函式建立CBitmap::CreateBitmap
。
CreateCaret
如果有任何,則會自動終結先前的插入號圖形,而不論哪個視窗擁有插入號。 建立之後,插入號一開始就會隱藏。 若要顯示插入號, ShowCaret
必須呼叫成員函式。
系統插入號是共享資源。 CWnd
只有當插入號具有輸入焦點或作用中時,才應該建立插入號。 它應該會在失去輸入焦點或變成非使用中之前終結插入號。
範例
// Changes the caret of the edit control in this dialog box
void CMyDlg::OnChangeCaret()
{
m_pBitmapCaret = new CBitmap;
m_pBitmapCaret->LoadBitmap(IDB_HAPPY_BITMAP);
m_MyEdit.CreateCaret(m_pBitmapCaret);
m_MyEdit.ShowCaret();
}
CWnd::CreateControl
使用此成員函式建立 ActiveX 控制件,此控制項將由 物件在 MFC 程式中 CWnd
表示。
BOOL CreateControl(
LPCTSTR pszClass,
LPCTSTR pszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID,
CFile* pPersist = NULL,
BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL);
BOOL CreateControl(
REFCLSID clsid,
LPCTSTR pszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID,
CFile* pPersist = NULL,
BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL);
BOOL CreateControl(
REFCLSID clsid,
LPCTSTR pszWindowName,
DWORD dwStyle,
const POINT* ppt,
const SIZE* psize,
CWnd* pParentWnd,
UINT nID,
CFile* pPersist = NULL,
BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL);
參數
pszClass
此字串可能包含 類別的 OLE “ short name” (ProgID
) 。 例如: "CIRC3.Circ3Ctrl.1"
。 名稱必須符合控件所註冊的相同名稱。 或者,字串可能包含的字串形式 CLSID
,包含在大括弧中。 例如: "{9DBAFCCF-592F-101B-85CE-00608CEC297B}"
。 不論是哪一種情況, CreateControl
將字串轉換成對應的類別標識碼。
pszWindowName
要顯示在控件中之文字的指標。 設定控件的 Caption 或 Text 屬性的值(如果有的話)。 如果 NULL
為 ,則不會變更控件的 Caption 或 Text 屬性。
dwStyle
視窗樣式。 可用的樣式列在 [備註] 底下。
rect
指定控制項的大小和位置。 它可以是 CRect
對象或 RECT
結構。
ppt
POINT
指向包含控件左上角的結構或CPoint
物件。
pSize
指向 SIZE
包含控制項大小的結構或 CSize
物件
*pParentWnd*
指定控件的父視窗。 它不得為 NULL
。
nID
指定控件的識別碼。
pPersist
的指標 CFile
,包含控件的永續性狀態。 默認值為 NULL
,表示控件會初始化本身,而不會從任何永續性記憶體還原其狀態。 如果不是 NULL
,它應該是衍生物件的指標 CFile
,其中包含控件的永續性數據,格式為數據流或記憶體。 此資料可能已儲存在用戶端先前的啟用中。 CFile
可以包含其他數據,但必須在呼叫 CreateControl
時將其讀寫指標設定為持續性數據的第一個字節。
bStorage
指出中的數據 pPersist
是否應該解譯為 IStorage
或 IStream
數據。 如果中的數據 pPersist
是記憶體, bStorage
應該是 TRUE
。 如果中的數據 pPersist
是資料流, bStorage
應該是 FALSE
。 預設值是 FALSE
。
bstrLicKey
選擇性授權金鑰數據。 此數據僅適用於建立需要運行時間授權金鑰的控制件。 如果控件支持授權,您必須提供授權密鑰,才能成功建立控件。 預設值是 NULL
。
clsid
控制項的唯一類別 ID。
傳回值
如果成功則為非零;否則為 0。
備註
CreateControl
是函式的 CWnd::Create
直接類比,可建立的 CWnd
視窗。 CreateControl
會建立 ActiveX 控制件,而不是一般視窗。
僅支援 CreateControl
的 Windows dwStyle
旗標子集:
WS_VISIBLE
建立一開始可見的視窗。 如果您想要讓控件立即顯示,則需要 ,就像一般窗口一樣。WS_DISABLED
建立一開始停用的視窗。 停用的視窗無法從使用者接收輸入。 如果控件具有 Enabled 屬性,可以設定。WS_BORDER
建立具有細線框線的視窗。 如果控制項具有BorderStyle
屬性,則可以設定 。WS_GROUP
指定控件群組的第一個控件。 使用者可以使用方向鍵,將鍵盤焦點從群組中的一個控件變更為下一個控件。 第一個控件屬於相同群組之後,WS_GROUP
以樣式定義的所有控件。 樣式結束群組的WS_GROUP
下一個控件,並啟動下一個群組。WS_TABSTOP
指定當使用者按下 TAB 鍵時,可以接收鍵盤焦點的控件。 按下 TAB 鍵會將鍵盤焦點變更為樣式的WS_TABSTOP
下一個控件。
範例
class CGenocx : public CWnd
{
protected:
DECLARE_DYNCREATE(CGenocx)
public:
CLSID const &GetClsid()
{
static CLSID const clsid = {0x20DD1B9E, 0x87C4, 0x11D1, {0x8B, 0xE3, 0x0, 0x0, 0xF8, 0x75, 0x4D, 0xA1}};
return clsid;
}
// This code is generated by the Control Wizard.
// It wraps the call to CreateControl in the call to Create.
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT &rect, CWnd *pParentWnd, UINT nID,
CCreateContext *pContext = NULL)
{
UNREFERENCED_PARAMETER(pContext);
UNREFERENCED_PARAMETER(lpszClassName);
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}
// remainder of class declaration omitted...
CWnd::CreateEx
建立指定的視窗,並將它附加至 CWnd
物件。
virtual BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU nIDorHMenu,
LPVOID lpParam = NULL);
virtual BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID,
LPVOID lpParam = NULL);
參數
dwExStyle
延伸窗口樣式的位組合(OR),否則NULL
為預設延伸窗口樣式。
lpszClassName
包含已註冊系統窗口類別名稱之 Null 終止字串的指標;或預先定義系統視窗類別的名稱。
lpszWindowName
包含窗口顯示名稱之 Null 終止字串的指標;否則 NULL
為沒有視窗顯示名稱。
dwStyle
窗口樣式的位組合(OR),否則NULL
為默認窗口樣式。
x
視窗與螢幕左側或父視窗的初始水平距離。
y
視窗從螢幕頂端或父視窗的初始垂直距離。
nWidth
視窗的寬度,以像素為單位。
nHeight
視窗的高度,以像素為單位。
hwndParent
如果是子視窗,則為父視窗的句柄;否則,如果視窗具有擁有者,則為擁有者視窗的句柄。
nIDorHMenu
如果是子視窗,則為視窗標識符;否則,視窗功能表的標識碼。
lpParam
傳遞至 CWnd::OnCreate
欄位中方法 lpCreateParams
之用戶數據的指標。
rect
相對於螢幕或父視窗的視窗大小和位置。
pParentWnd
針對子視窗,指向父視窗的指標;否則,如果視窗具有擁有者,則為擁有者視窗的指標。
nID
如果是子視窗,則為視窗標識符;否則,視窗功能表的標識碼。
傳回值
TRUE
如果方法成功,則為 ;否則 FALSE
為 。
備註
警告
CWnd::PreCreateWindow
如果功能表是 NULL
,而且樣式包含 WS_CHILD
,則現在會將其 CREATESTRUCT
參數的成員指派hMenu
給this
指標。 如需適當的功能,請確定您的對話框控制件具有不是 NULL
的識別碼。
這項變更可修正 Managed/原生 Interop 案例中的當機狀況。 TRACE
問題的開發人員會CWnd::Create
發出警示的語句。
預設延伸視窗樣式為 WS_EX_LEFT
。 預設視窗樣式為 WS_OVERLAPPED
。
使用函式 AfxRegisterWndClass
來註冊窗口類別。 使用者定義視窗類別可在註冊的模組中取得。
子視窗的維度相對於父視窗工作區的左上角。 最上層視窗的維度相對於畫面左上角。
方法 CWnd::OnCreate
會在 CreateEx
方法傳回之前呼叫,並在視窗變成可見之前呼叫。
範例
void CMyDlg::OnCreateExtendedControl()
{
// m_pWndStaticEx is a CWnd* member of CMyDlg
m_pWndStaticEx = new CStatic;
m_pWndStaticEx->CreateEx(WS_EX_CLIENTEDGE, // Make a client edge label.
_T("STATIC"), _T("Hi"),
WS_CHILD | WS_TABSTOP | WS_VISIBLE,
5, 5, 30, 30, m_hWnd, (HMENU)2345);
}
CWnd::CreateGrayCaret
建立系統插入號的灰色矩形,並宣告插入號的擁有權。
void CreateGrayCaret(
int nWidth,
int nHeight);
參數
nWidth
指定插入號的寬度(以邏輯單位為單位)。 如果此參數為0,寬度會設定為系統定義的視窗框線寬度。
nHeight
指定插入號的高度(以邏輯單位為單位)。 如果此參數為 0,高度會設定為系統定義的視窗框線高度。
備註
插入號圖形可以是線條或區塊。
參數 nWidth
並 nHeight
指定插入號的寬度和高度(以邏輯單位表示):確切的寬度和高度(以像素為單位)取決於對應模式。
Windows 函式可以使用 和 SM_CYBORDER
索引來擷取GetSystemMetrics
SM_CXBORDER
系統的視窗框線寬度或高度。 使用視窗框線寬度或高度可確保插入號會顯示在高解析度顯示器上。
不論哪個視窗擁有插入號,成員 CreateGrayCaret
函式都會自動終結先前的插入號圖形。 建立之後,插入號一開始就會隱藏。 若要顯示插入號, ShowCaret
必須呼叫成員函式。
系統插入號是共享資源。 CWnd
只有當插入號具有輸入焦點或作用中時,才應該建立插入號。 它應該會在失去輸入焦點或變成非使用中之前終結插入號。
範例
// Create a 5x10 gray caret in the edit control.
void CMyDlg::OnCreateGrayCaret()
{
m_MyEdit.CreateGrayCaret(5, 10);
m_MyEdit.ShowCaret();
}
CWnd::CreateSolidCaret
建立系統插入號的實心矩形,並宣告插入號的擁有權。
void CreateSolidCaret(
int nWidth,
int nHeight);
參數
nWidth
指定插入號的寬度(以邏輯單位為單位)。 如果此參數為0,寬度會設定為系統定義的視窗框線寬度。
nHeight
指定插入號的高度(以邏輯單位為單位)。 如果此參數為 0,高度會設定為系統定義的視窗框線高度。
備註
插入號圖形可以是線條或區塊。
參數 nWidth
並 nHeight
指定插入號的寬度和高度(以邏輯單位表示):確切的寬度和高度(以像素為單位)取決於對應模式。
Windows 函式可以使用 和 SM_CYBORDER
索引來擷取GetSystemMetrics
SM_CXBORDER
系統的視窗框線寬度或高度。 使用視窗框線寬度或高度可確保插入號會顯示在高解析度顯示器上。
不論哪個視窗擁有插入號,成員 CreateSolidCaret
函式都會自動終結先前的插入號圖形。 建立之後,插入號一開始就會隱藏。 若要顯示插入號, ShowCaret
必須呼叫成員函式。
系統插入號是共享資源。 CWnd
只有當插入號具有輸入焦點或作用中時,才應該建立插入號。 它應該會在失去輸入焦點或變成非使用中之前終結插入號。
範例
// Create a 5x10 solid caret in the edit control.
void CMyDlg::OnCreateSolidCaret()
{
m_MyEdit.CreateSolidCaret(5, 10);
m_MyEdit.ShowCaret();
}
CWnd::CWnd
建構 CWnd
物件。
CWnd();
備註
在呼叫 或 Create
成員函式之前CreateEx
,不會建立及附加 Windows 視窗。
CWnd::Default
呼叫預設視窗程式。
LRESULT Default();
傳回值
取決於傳送的訊息。
備註
默認視窗程式會針對應用程式未處理的任何視窗訊息提供默認處理。 此成員函式可確保處理每個訊息。
範例
// This sample shows how to avoid any button handling in base class,
// if any, and call the default window procedure directly.
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
UNREFERENCED_PARAMETER(point);
CWnd::Default();
}
CWnd::DefWindowProc
呼叫預設視窗程式,它提供應用程式未處理之任何視窗訊息的默認處理。
virtual LRESULT DefWindowProc(
UINT message,
WPARAM wParam,
LPARAM lParam);
參數
message
指定要處理的 Windows 訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
傳回值
取決於傳送的訊息。
備註
此成員函式可確保處理每個訊息。 它應該使用與視窗程式收到的參數相同的參數來呼叫。
CWnd::DeleteTempMap
由物件的閑置時間處理程序 CWinApp
自動呼叫。
static void PASCAL DeleteTempMap();
備註
刪除成員函式所FromHandle
建立的任何暫存CWnd
物件。
範例
// DeleteTempMap() is a static member and does not need
// to be called within the scope of an instantiated CWnd object.
CWnd::DeleteTempMap();
CWnd::DestroyWindow
終結附加至 CWnd
物件的 Windows 視窗。
virtual BOOL DestroyWindow();
傳回值
如果視窗被終結,則為非零;否則為 0。
備註
成員 DestroyWindow
函式會將適當的訊息傳送至視窗,以停用並移除輸入焦點。 它也會終結視窗的功能表、排清應用程式佇列、終結未處理的定時器、移除剪貼簿擁有權,如果 CWnd
位於查看器鏈結的頂端,則會中斷剪貼簿查看器鏈結。 它會將和 WM_NCDESTROY
訊息傳送WM_DESTROY
至視窗。 它不會終結 CWnd
物件。
DestroyWindow
是執行清理的地點持有者。 因為 DestroyWindow
是虛擬函式,所以會顯示在類別檢視中任何 CWnd
衍生類別中。 但是,即使您在衍生類別中 CWnd
覆寫此函式, DestroyWindow
也不一定呼叫。 如果 DestroyWindow
MFC 程式代碼中未呼叫,則如果您想要呼叫它,則必須在自己的程式代碼中明確呼叫它。
例如,假設您已在衍生類別中CView
覆DestroyWindow
寫。 由於 MFC 原始程式碼不會在其任何CFrameWnd
衍生類別中呼叫DestroyWindow
,除非您明確呼叫它,否則不會呼叫覆寫DestroyWindow
。
如果視窗是任何視窗的父代,當父窗口終結時,這些子視窗會自動終結。 成員函式會 DestroyWindow
先終結子窗口,然後再終結視窗本身。
成員 DestroyWindow
函式也會終結 所建立的 CDialog::Create
無模式對話框。
如果被終結的 CWnd
是子視窗,而且沒有 WS_EX_NOPARENTNOTIFY
設定樣式,則會 WM_PARENTNOTIFY
將訊息傳送至父系。
範例
// CModeless is a CDialog class representing a modeless dialog
// Destruction of the modeless dialog involves calling DestroyWindow in
// OnOK() & OnCancel() handlers
void CModeless::OnOK()
{
if (!UpdateData(TRUE))
{
TRACE(_T("UpdateData failed during dialog termination\n"));
// The UpdateData routine will set focus to correct item
return;
}
DestroyWindow();
}
void CModeless::OnCancel()
{
DestroyWindow();
}
CWnd::Detach
從 CWnd
物件卸離 Windows 控制代碼,並傳回控制代碼。
HWND Detach();
傳回值
HWND
Windows 物件的 。
範例
請參閱 CWnd::Attach
的範例。
CWnd::DlgDirList
使用檔案或目錄清單填入清單方塊。
int DlgDirList(
LPTSTR lpPathSpec,
int nIDListBox,
int nIDStaticPath,
UINT nFileType);
參數
lpPathSpec
指向包含路徑或檔名的 Null 終止字串。 DlgDirList
修改此字串,其長度應該足以包含修改。 如需詳細資訊,請參閱下列一節。
nIDListBox
指定清單框的識別碼。 如果 nIDListBox
為 0, DlgDirList
則假設沒有清單框存在,而且不會嘗試填滿一個清單框。
nIDStaticPath
指定用來顯示目前磁碟驅動器和目錄之靜態文字控件的標識碼。 如果 nIDStaticPath
為 0, DlgDirList
則假設沒有這類文字控制件存在。
nFileType
指定要顯示之檔案的屬性。 它可以是下列值的任何組合:
DDL_READWRITE
沒有其他屬性的讀寫資料檔。DDL_READONLY
唯讀檔案。DDL_HIDDEN
隱藏的檔案。DDL_SYSTEM
系統檔案。DDL_DIRECTORY
目錄。DDL_ARCHIVE
檔案。DDL_POSTMSGS
LB_DIR
旗。LB_DIR
如果設定旗標,Windows 會將 所產生的DlgDirList
訊息放在應用程式的佇列中;否則,它們會直接傳送至對話框程式。DDL_DRIVES
驅動器。DDL_DRIVES
如果設定旗標,則DDL_EXCLUSIVE
會自動設定旗標。 因此,若要建立包含磁碟驅動器和檔案的目錄清單,您必須呼叫DlgDirList
兩次:一次DDL_DRIVES
具有旗標集,一次使用清單其餘部分的旗標。DDL_EXCLUSIVE
獨佔位。 如果已設定獨佔位,則只會列出指定類型的檔案;否則會列出指定類型的一般檔案和檔案。
傳回值
如果函式成功則為非零,否則為 0。
備註
DlgDirList
會將和 LB_DIR
訊息傳送LB_RESETCONTENT
至清單框。 它會以符合 所指定lpPathSpec
路徑的所有檔案名填入所指定的nIDListBox
清單框。
參數 lpPathSpec
的格式如下:
[drive:] [ [\u]directory[\idirectory]...\u] [filename]
在此範例中, drive
是驅動器號、 directory
是有效的目錄名稱,而且 filename
是必須包含至少一個通配符的有效檔名。 通配符是問號 (?),這表示符合任何字元,而星號 (*), 表示符合任意數目的字元。
如果您為 lpPathSpec
指定 0 長度的字串,或如果您只指定目錄名稱,但不包含任何檔案規格,字串將會變更為 “*.*”。
如果 lpPathSpec
包含磁碟驅動器和/或目錄名稱,則會在填入清單框之前,將目前的磁碟驅動器和目錄變更為指定的磁碟驅動器和目錄。 所 nIDStaticPath
識別的文字控制件也會以新的磁碟驅動器和/或目錄名稱進行更新。
填滿清單框之後, lpPathSpec
會移除路徑的磁碟驅動器和/或目錄部分來更新。
範例
// If pDialog points to a CDialog object with a list box
// with the identifier IDC_DIRLIST, this call will populate
// the box with only the non-hidden subdirectories in the root
// directory of the C:\ drive.
TCHAR path[MAX_PATH];
_tcscpy_s(path, MAX_PATH, _T("C:\\"));
pDialog->DlgDirList(path, IDC_DIRLIST, 0, DDL_EXCLUSIVE | DDL_DIRECTORY);
CWnd::DlgDirListComboBox
使用檔案或目錄清單來填入下拉式方塊的清單方塊。
int DlgDirListComboBox(
LPTSTR lpPathSpec,
int nIDComboBox,
int nIDStaticPath,
UINT nFileType);
參數
lpPathSpec
指向包含路徑或檔名的 Null 終止字串。 DlgDirListComboBox
修改此字串,因此此數據不應以字串常值的形式呈現。 請參閱下列一節。
nIDComboBox
指定對話框中下拉式方塊的標識碼。 如果 nIDComboBox
為 0, DlgDirListComboBox
則假設沒有下拉式方塊存在,而且不會嘗試填滿一個。
nIDStaticPath
指定用來顯示目前磁碟驅動器和目錄之靜態文字控件的標識碼。 如果 nIDStaticPath
為 0, DlgDirListComboBox
則假設沒有這類文字控制件存在。
nFileType
指定要顯示之檔案的 DOS 檔案屬性。 它可以是下列值的任何組合:
DDL_READWRITE
沒有其他屬性的讀寫資料檔。DDL_READONLY
唯讀檔案。DDL_HIDDEN
隱藏的檔案。DDL_SYSTEM
系統檔案。DDL_DIRECTORY
目錄。DDL_ARCHIVE
檔案。DDL_POSTMSGS
CB_DIR
旗。CB_DIR
如果設定旗標,Windows 會將 所產生的DlgDirListComboBox
訊息放在應用程式的佇列中;否則,它們會直接傳送至對話框程式。DDL_DRIVES
驅動器。DDL_DRIVES
如果設定旗標,則DDL_EXCLUSIVE
會自動設定旗標。 因此,若要建立包含磁碟驅動器和檔案的目錄清單,您必須呼叫DlgDirListComboBox
兩次:一次DDL_DRIVES
具有旗標集,一次使用清單其餘部分的旗標。DDL_EXCLUSIVE
獨佔位。 如果已設定獨佔位,則只會列出指定類型的檔案;否則會列出指定類型的一般檔案和檔案。
傳回值
指定函式的結果。 如果已建立清單,甚至是空白清單,則為非零。 0 傳回值表示輸入字串未包含有效的搜尋路徑。
備註
DlgDirListComboBox
會將和 CB_DIR
訊息傳送CB_RESETCONTENT
至下拉式方塊。 它會填入 所 nIDComboBox
指定下拉式方塊的清單框,以及符合 所 lpPathSpec
指定路徑的所有檔名。
參數 lpPathSpec
的格式如下:
[drive:] [ [\u]directory[\idirectory]...\u] [filename]
在此範例中, drive
是驅動器號、 directory
是有效的目錄名稱,而且 filename
是必須包含至少一個通配符的有效檔名。 通配符是問號 (?),這表示符合任何字元,而星號 (*),這表示符合任意數目的字元。
如果您為 指定長度為零的字串 lpPathSpec
,則會使用目前的目錄, lpPathSpec
而且不會修改。 如果您只指定目錄名稱,但不包含任何檔案規格,字串將會變更為 “*”。
如果 lpPathSpec
包含磁碟驅動器和/或目錄名稱,則會在填入清單框之前,將目前的磁碟驅動器和目錄變更為指定的磁碟驅動器和目錄。 所 nIDStaticPath
識別的文字控制件也會以新的磁碟驅動器和/或目錄名稱進行更新。
填滿下拉式方塊清單框之後, lpPathSpec
會移除路徑的磁碟驅動器和/或目錄部分來更新。
範例
// If pDialog points to a CDialog object with a combo box
// with the identifier IDC_DIRCOMBO, this call will populate
// the box with only the non-hidden subdirectories in the root
// directory of the C:\ drive.
TCHAR szPath[MAX_PATH];
_tcsncpy_s(szPath, MAX_PATH, _T("C:\\"), MAX_PATH);
pDialog->DlgDirListComboBox(szPath, IDC_DIRCOMBO, 0, DDL_EXCLUSIVE | DDL_DIRECTORY);
// Note that the first argument is a string and not a string
// literal. This is necessary because DlgDirListComboBox
// modifies the supplied string. Passing a string literal
// will result in an access violation.
CWnd::DlgDirSelect
從清單方塊擷取目前的選取範圍。
BOOL DlgDirSelect(
LPTSTR lpString,
int nIDListBox);
參數
lpString
指向要接收清單框中目前選取範圍的緩衝區。
nIDListBox
指定對話框中清單框的整數標識碼。
傳回值
如果成功則為非零;否則為 0。
備註
它假設清單框已由 DlgDirList
成員函式填入,而且選取範圍是驅動器號、檔案或目錄名稱。
成員 DlgDirSelect
函式會將選取範圍複製到 所 lpString
指定的緩衝區。 如果沒有選取專案, lpString
則不會變更。
DlgDirSelect
會將和 LB_GETTEXT
訊息傳送LB_GETCURSEL
至清單框。
它不允許從清單框傳回一個以上的檔名。 清單框不得為多重選取清單框。
CWnd::DlgDirSelectComboBox
從下拉式方塊的清單方塊中擷取目前的選取範圍。
BOOL DlgDirSelectComboBox(
LPTSTR lpString,
int nIDComboBox);
參數
lpString
指向要接收選取路徑的緩衝區。
nIDComboBox
指定對話框中下拉式方塊的整數標識碼。
傳回值
如果成功則為非零;否則為 0。
備註
它假設清單框已由 DlgDirListComboBox
成員函式填入,而且選取範圍是驅動器號、檔案或目錄名稱。
成員 DlgDirSelectComboBox
函式會將選取範圍複製到指定的緩衝區。 如果沒有選取專案,則不會變更緩衝區的內容。
DlgDirSelectComboBox
會將和 CB_GETLBTEXT
訊息傳送CB_GETCURSEL
至下拉式方塊。
它不允許從下拉式方塊傳回多個檔名。
CWnd::DoDataExchange
由架構呼叫以交換和驗證對話數據。
virtual void DoDataExchange(CDataExchange* pDX);
參數
pDX
CDataExchange
物件的指標。
備註
永遠不要直接呼叫此函式。 成員函式 UpdateData
會呼叫它。 呼叫 UpdateData
以初始化對話框的控件,或從對話框擷取數據。
當您從 CDialog
衍生應用程式特定對話類別時,如果您想要利用架構的自動數據交換和驗證,則必須覆寫此成員函式。 [新增變數精靈] 會為您撰寫此成員函式的覆寫版本,其中包含對話數據交換 (DDX) 和驗證 (DDV) 全域函式呼叫所需的「數據對應」。
若要自動產生此成員函式的覆寫版本,請先使用對話框編輯器建立對話資源,然後衍生應用程式特定的對話類別。 然後使用 [新增變數精靈] 將變數、數據和驗證範圍與新對話框中的各種控件產生關聯。 然後精靈會寫入覆 DoDataExchange
寫的 ,其中包含數據對應。 以下是新增變數精靈所產生的範例 DDX/DDV 程式代碼區塊:
void CPenWidthsDlg::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_THINPENWIDTH, m_nThinWidth);
DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20);
DDX_Text(pDX, IDC_THICKPENWIDTH, m_nThickWidth);
DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20);
}
DoDataExchange
覆寫的成員函式必須位於原始程序檔中的巨集語句之前。
如需對話框數據交換和驗證的詳細資訊,請參閱 在窗體 和 對話框數據交換和驗證中顯示和操作數據。 如需新增變數精靈所產生的DDX_和DDV_巨集的描述,請參閱 Technical Note 26。
CWnd::DragAcceptFiles
在CWnd
應用程式函CWinApp::InitInstance
式中使用指標從視窗內呼叫這個成員函式,以指出視窗接受 Windows 檔案管理員或 檔案總管 的已卸除檔案。
void DragAcceptFiles(BOOL bAccept = TRUE);
參數
BAccept
旗標,指出是否接受拖曳的檔案。
備註
只有使用 參數設定為 TRUE
呼叫DragAcceptFiles
的bAccept
視窗,才會將本身識別為能夠處理 Windows 訊息 WM_DROPFILES
。 例如,在 MDI 應用程式中,如果在 CMDIFrameWnd
函數調用中使用 DragAcceptFiles
視窗指標,則只有 CMDIFrameWnd
視窗會取得 WM_DROPFILES
訊息。 此訊息不會傳送至所有開啟 CMDIChildWnd
的視窗。 若要讓CMDIChildWnd
視窗接收此訊息,您必須使用CMDIChildWnd
視窗指標呼叫 DragAcceptFiles
。
若要停止接收拖曳的檔案,請呼叫成員函式,並將 bAccept
設定為 FALSE
。
CWnd::DragDetect
擷取滑鼠並追蹤其移動,直到使用者放開左側按鈕、按下 ESC 鍵,或將滑鼠移到指定點周圍的拖曳矩形外。
BOOL DragDetect(POINT pt) const;
參數
pt
滑鼠的初始位置,以螢幕座標表示。 函式會使用這個點來決定拖曳矩形的座標。
傳回值
如果使用者在按住左按鈕時將滑鼠移到拖曳矩形外,則傳回值為非零值。
如果使用者在按住左按鈕時未將滑鼠移到拖曳矩形外,則傳回值為零。
備註
此成員函式會模擬 函式的功能 DragDetect
,如 Windows SDK 中所述。
CWnd::DrawAnimatedRects
繪製框線矩形,並以動畫效果呈現它來指出圖示的開頭,或最小化或最大化視窗。
BOOL DrawAnimatedRects(
int idAni,
CONST RECT* lprcFrom,
CONST RECT* lprcTo);
參數
idAni
指定動畫的類型。 如果您指定 IDANI_CAPTION
,則視窗標題會從 所 lprcFrom
指定的位置到 所 lprcTo
指定的位置產生動畫效果。 效果類似於最小化或最大化視窗。
lprcFrom
RECT
結構的指標,指定圖示的位置和大小或最小化視窗。
lprcTo
RECT
結構指標,指定還原視窗的位置和大小
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 DrawAnimatedRects
,如 Windows SDK 中所述。
CWnd::DrawCaption
繪製視窗標題。
BOOL DrawCaption(
CDC* pDC,
LPCRECT lprc,
UINT uFlags);
參數
pDC
裝置內容的指標。 函式會將視窗標題繪製到此裝置內容中。
lprc
結構的指標 RECT
,指定視窗標題的周框。
uFlags
指定繪圖選項。 如需值的完整清單,請參閱 DrawCaption
。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 DrawCaption
,如 Windows SDK 中所述。
CWnd::DrawMenuBar
重新繪製功能表列。
void DrawMenuBar();
備註
如果在 Windows 建立視窗之後變更功能表欄,請呼叫此函式來繪製變更的功能表列。
範例
請參閱 CWnd::GetMenu
的範例。
CWnd::EnableActiveAccessibility
啟用使用者定義的 Active Accessibility 函式。
void EnableActiveAccessibility();
備註
MFC 的預設 Active Accessibility 支援足以用於標準視窗和控件,包括 ActiveX 控制件;不過,如果您的 CWnd
衍生類別包含非windowed使用者介面元素,MFC 無法知道它們。 在這裡情況下,您必須覆寫類別中適當的 Active Accessibility 成員函 式,而且您必須在類別的建構函式中呼叫 EnableActiveAccessibility
。
CWnd::EnableDynamicLayout
啟用或停用動態配置管理員。 啟用動態配置時,會在使用者調整視窗大小時動態調整子視窗的位置與大小。
void EnableDynamicLayout(BOOL bEnable = TRUE);
參數
bEnable
TRUE
表示啟用動態配置; FALSE
以停用動態版面配置。
備註
如果您想要啟用動態配置,除了呼叫這個方法之外,還必須執行其他作業。 您還必須提供動態配置資訊,該資訊指定視窗中的控制項如何回應大小變更。 您可以在資源編輯器中或以程式設計方式,為每個控制項指定這項資訊。 請參閱 動態版面配置。
CWnd::EnableD2DSupport
啟用或停用視窗 D2D 支援。 初始化主視窗之前先呼叫這個方法。
void EnableD2DSupport(
BOOL bEnable = TRUE,
BOOL bUseDCRenderTarget = FALSE);
參數
bEnable
指定是否開啟或關閉 D2D 支援。
bUseDCRenderTarget
物種是否要使用裝置內容 (DC) 轉譯目標, CDCRenderTarget
。 如果為 FALSE
,則會使用 CHwndRenderTarget
。
CWnd::EnableScrollBar
啟用或停用一個捲軸的一或兩個箭號。
BOOL EnableScrollBar(
int nSBFlags,
UINT nArrowFlags = ESB_ENABLE_BOTH);
參數
nSBFlags
指定滾動條類型。 可以有下列其中一個值:
SB_BOTH
啟用或停用與視窗相關聯的水準和垂直滾動條箭號。SB_HORZ
啟用或停用與視窗相關聯的水準滾動條箭號。SB_VERT
啟用或停用與視窗相關聯之垂直滾動條的箭號。
nArrowFlags
指定是否啟用或停用滾動條箭號,以及啟用或停用哪些箭號。 可以有下列其中一個值:
ESB_ENABLE_BOTH
啟用滾動條的兩個箭號(預設值)。ESB_DISABLE_LTUP
停用水平滾動條的向左箭號或垂直滾動條的向上箭號。ESB_DISABLE_RTDN
停用水平滾動條的向右箭號或垂直滾動條的向下箭號。ESB_DISABLE_BOTH
停用滾動條的兩個箭號。
傳回值
如果箭號已啟用或停用指定,則為非零。 否則為 0,表示箭號已處於要求狀態或發生錯誤。
CWnd::EnableScrollBarCtrl
啟用或停用此視窗的滾動條。
void EnableScrollBarCtrl(
int nBar,
BOOL bEnable = TRUE);
參數
nBar
滾動條標識碼。
bEnable
指定要啟用或停用滾動條。
備註
如果視窗具有同層級滾動條控件,則會使用該滾動條;否則會使用視窗自己的滾動條。
CWnd::EnableToolTips
啟用指定視窗的工具提示。
BOOL EnableToolTips(BOOL bEnable = TRUE);
參數
bEnable
指定是否啟用或停用工具提示控制件。 TRUE
啟用 控件; FALSE
會停用控件。
傳回值
TRUE
如果已啟用工具提示,則為 ;否則 FALSE
為 。
備註
覆寫 OnToolHitTest
以提供 TOOLINFO
窗口的結構或結構。
注意
某些視窗,例如 CToolBar
,提供的內建實作 OnToolHitTest
。
如需此結構的詳細資訊,請參閱 TOOLINFO
Windows SDK。
除非父視窗衍生自 CFrameWnd
,否則只要呼叫 EnableToolTips
就不足以顯示子控件的工具提示。 這是因為 CFrameWnd
提供通知的默認處理程式 TTN_NEEDTEXT
。 如果您的父視窗不是衍生自 CFrameWnd
,也就是說,如果是對話框或窗體檢視,除非您提供工具提示通知的 TTN_NEEDTEXT
處理程式,否則子控件的工具提示將不會正確顯示。 請參閱 工具提示。
為視窗 EnableToolTips
提供的預設工具提示沒有與其相關聯的文字。 若要擷取要顯示之工具提示的文字, TTN_NEEDTEXT
通知會傳送至工具提示控件的父視窗,再顯示工具提示視窗。 如果此訊息沒有處理程式將某些值指派給 pszText
結構的成員 TOOLTIPTEXT
,則工具提示不會顯示任何文字。
範例
// From message map for CMdiView, a CView-derived class
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &CMdiView::OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &CMdiView::OnToolTipNotify)
void CMdiView::OnInitialUpdate()
{
CView::OnInitialUpdate();
m_Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
CRect(10, 10, 100, 100), this, IDC_TTEDIT);
EnableToolTips(TRUE); // enable tool tips for view
}
//Notification handler
BOOL CMdiView::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(id);
UNREFERENCED_PARAMETER(pResult);
// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA *pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW *pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CStringA strTipText;
UINT_PTR nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0) // will be zero on a separator
strTipText.Format("Control ID = %d", nID);
if (pNMHDR->code == TTN_NEEDTEXTA)
{
strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText,
strTipText.GetLength() + 1);
}
else
{
::MultiByteToWideChar(CP_ACP, 0, strTipText, strTipText.GetLength() + 1,
pTTTW->szText, sizeof(pTTTW->szText) / (sizeof pTTTW->szText[0]));
}
return TRUE; // message was handled
}
CWnd::EnableTrackingToolTips
啟用或停用追蹤工具提示。
BOOL EnableTrackingToolTips(BOOL bEnable = TRUE);
參數
bEnable
指定是否啟用或停用追蹤工具提示。 如果此參數為 TRUE
,則會啟用追蹤工具提示。 如果此參數為 FALSE
,將會停用追蹤工具提示。
傳回值
指出呼叫成員函式之前 EnableWindow
的狀態。 如果先前停用視窗,則傳回值為非零值。 如果先前啟用視窗或發生錯誤,則傳回值為 0。
備註
追蹤工具提示是工具提示視窗,您可以在畫面上動態定位。 藉由快速更新位置,工具提示視窗似乎會順暢地移動,或「追蹤」。如果您需要工具提示文字來追蹤指標移動時的位置,這項功能會很有用。
CWnd::EnableWindow
啟用或停用滑鼠和鍵盤輸入。
BOOL EnableWindow(BOOL bEnable = TRUE);
參數
bEnable
指定要啟用或停用指定的視窗。 如果此參數為 TRUE
,則會啟用視窗。 如果此參數為 FALSE
,則會停用視窗。
傳回值
指出呼叫成員函式之前 EnableWindow
的狀態。 如果先前停用視窗,則傳回值為非零值。 如果先前啟用視窗或發生錯誤,則傳回值為 0。
備註
停用輸入時,會忽略滑鼠按鍵等輸入。 啟用輸入時,視窗會處理所有輸入。
如果啟用的狀態正在變更,則會 WM_ENABLE
在傳回此函式之前傳送訊息。
如果停用,則所有子視窗都會隱含停用,但不會傳送 WM_ENABLE
訊息。
必須先啟用視窗,才能啟用視窗。 例如,如果應用程式顯示無模式對話框且已停用其主視窗,則必須先啟用主視窗,才能終結對話方塊。 否則,另一個視窗會取得輸入焦點並啟動。 如果停用子視窗,當 Windows 嘗試判斷哪個視窗應該取得滑鼠訊息時,就會忽略它。
根據預設,視窗會在建立時啟用。 應用程式可以在 或 CreateEx
成員函式中Create
指定WS_DISABLED
樣式,以建立一開始停用的視窗。 建立窗口之後,應用程式也可以使用 EnableWindow
成員函式來啟用或停用視窗。
應用程式可以使用此函式來啟用或停用對話框中的控件。 停用的控件無法接收輸入焦點,也無法讓使用者存取它。
範例
//CMyFileDialog is a CFileDialog-derived class
//OnInitDialog is the handler for WM_INITDIALOG
BOOL CMyFileDialog::OnInitDialog()
{
CFileDialog::OnInitDialog();
CWnd *pWndParent = GetParent();
//make sure you add #include <dlgs.h> for IDs 'edt1' & 'stc3'
//disables the 'file name' edit and static control
//of the standard file open dialog
//get handle of 'file name' combobox control & disable it
CWnd *pWnd = pWndParent->GetDlgItem(cmb13);
pWnd->EnableWindow(FALSE);
//get handle of 'file name' static control & disable it
pWnd = pWndParent->GetDlgItem(stc3);
pWnd->EnableWindow(FALSE);
return TRUE;
}
CWnd::EndModalLoop
終止 對 RunModalLoop
的呼叫。
virtual void EndModalLoop(int nResult);
參數
nResult
包含要傳回給呼叫端的值 RunModalLoop
。
備註
參數 nResult
會傳播至 的 RunModalLoop
傳回值。
CWnd::EndModalState
呼叫此成員函式,將框架視窗從強制回應變更為非強制回應。
virtual void EndModalState();
CWnd::EndPaint
標記指定視窗中繪製的結尾。
void EndPaint(LPPAINTSTRUCT lpPaint);
參數
lpPaint
指向 PAINTSTRUCT
結構,其中包含成員函式所擷取的 BeginPaint
繪製資訊。
備註
每個 EndPaint
對成員函式的呼叫 BeginPaint
都需要成員函式,但只有在繪製完成之後。
如果成員函式隱藏 BeginPaint
插入號, EndPaint
請將插入號還原至畫面。
範例
請參閱 CWnd::BeginPaint
的範例。
CWnd::ExecuteDlgInit
初始化對話方塊資源。
BOOL ExecuteDlgInit(LPCTSTR lpszResourceName);
BOOL ExecuteDlgInit(LPVOID lpResource);
參數
lpszResourceName
指定資源名稱之 Null 終止字串的指標。
lpResource
資源的指標。
傳回值
TRUE
如果執行對話資源,則為 ;否則 FALSE
為 。
備註
ExecuteDlgInit
會使用系結至執行模組的資源,或來自其他來源的資源。 若要達成此目的, ExecuteDlgInit
請呼叫 AfxFindResourceHandle
來尋找資源句柄。 如果您的 MFC 應用程式未使用共用 DLL (MFCx0[U][D].DLL), AfxFindResourceHandle
則會呼叫 AfxGetResourceHandle
,這會傳回可執行檔目前的資源句柄。 如果您的 MFC 應用程式使用 MFCx0[U][D].DLL, AfxFindResourceHandle
請 CDynLinkLibrary
周遊共用和 MFC 延伸模組 DLL 的物件清單,尋找正確的資源句柄。
CWnd::FilterToolTipMessage
由架構呼叫以顯示工具提示訊息。
void FilterToolTipMessage(MSG* pMsg);
參數
pMsg
工具提示訊息的指標。
備註
在大部分的 MFC 應用程式中,此方法是由 和 EnableToolTips
的架構PreTranslateMessage
所呼叫,您不需要自行呼叫它。
不過,在某些應用程式中,例如某些 ActiveX 控件,這些方法可能不會由架構叫用,而且您必須自行呼叫 FilterToolTipMessage
。 如需詳細資訊,請參閱 建立工具提示的方法。
CWnd::FindWindow
傳回最上層 CWnd
,其窗口類別是由 lpszClassName
指定,而其視窗名稱或標題是由 lpszWindowName
提供。
static CWnd* PASCAL FindWindow(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName);
參數
lpszClassName
指向以 Null 結尾的字串,指定視窗的類別名稱( WNDCLASS
結構)。 如果 lpClassName
為 NULL
,則所有類別名稱都相符。
lpszWindowName
指向以 Null 結尾的字串,指定視窗名稱(視窗的標題)。 如果 lpWindowName
為 NULL
,則所有視窗名稱都相符。
傳回值
識別具有指定類別名稱和視窗名稱的視窗。 NULL
如果找不到這類視窗,則為 。
CWnd
* 可能是暫時的,不應該儲存以供日後使用。
備註
此函式不會搜尋子視窗。
範例
// activate an application with a window with a specific class name
BOOL CMyApp::FirstInstance()
{
CWnd *pWndPrev, *pWndChild;
// Determine if a window with the class name exists...
pWndPrev = CWnd::FindWindow(_T("MyNewClass"), NULL);
if (NULL != pWndPrev)
{
// If so, does it have any popups?
pWndChild = pWndPrev->GetLastActivePopup();
// If iconic, restore the main window
if (pWndPrev->IsIconic())
pWndPrev->ShowWindow(SW_RESTORE);
// Bring the main window or its popup to the foreground
pWndChild->SetForegroundWindow();
// and you are done activating the other application
return FALSE;
}
return TRUE;
}
CWnd::FindWindowEx
擷取其類別名稱和視窗名稱符合指定字串的 window 物件。
static CWnd* FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow);
參數
hwndParent
要搜尋其子視窗的父視窗句柄。
hwndChildAfter
子視窗的句柄。 搜尋會以 Z 順序的下一個子視窗開始。 子窗口必須是 的 hwndParent
直接子視窗,而不只是子系視窗。
lpszClass
Null 終止字串的指標,指定先前呼叫 RegisterClass
或 RegisterClassEx
所建立的類別名稱或類別 Atom。
lpszWindow
指定視窗名稱的 Null 終止字串指標(視窗標題)。 如果此參數為 NULL
,則所有視窗名稱都相符。
傳回值
如果函式成功,傳回值是具有指定類別和視窗名稱之視窗物件的指標。 如果函式失敗,傳回值為 NULL
。
備註
此成員函式會模擬 函式的功能 FindWindowEx
,如 Windows SDK 中所述。
CWnd::FlashWindow
閃爍指定的視窗一次。
BOOL FlashWindow(BOOL bInvert);
參數
bInvert
指定要 CWnd
閃爍或傳回至其原始狀態。 如果 bInvert
為 TRUE
,則會CWnd
從某個狀態閃爍至另一個狀態。 如果 bInvert
為 FALSE
,則會將視窗傳回至其原始狀態(使用中或非使用中)。
傳回值
如果窗口在成員函式呼叫 FlashWindow
之前為使用中,則為非零;否則為 0。
備註
若要連續閃爍,請建立系統定時器並重複呼叫 FlashWindow
。 閃爍 CWnd
表示變更其標題欄的外觀,就好像 CWnd
從非作用中狀態變更為作用中狀態,反之亦然。 (非作用中的標題欄會變更為使用中的標題欄;作用中的標題欄會變更為非作用中的標題列。
一般而言,視窗會閃爍,通知使用者需要注意,但目前沒有輸入焦點。
bInvert
只有在視窗取得輸入焦點且不再閃爍TRUE
時,參數才應該FALSE
在等候取得輸入焦點時連續呼叫。
此函式一律會針對最小化視窗傳回非零值。 如果視窗最小化, FlashWindow
則會閃爍視窗的圖示; bInvert
會忽略最小化視窗。
範例
BOOL CPenWidthsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// set timer to cause dialog to flash
SetTimer(1, 500, NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
void CPenWidthsDlg::OnTimer(UINT_PTR nIDEvent)
{
// cause the dialog to flash
FlashWindow(TRUE);
CDialog::OnTimer(nIDEvent);
}
CWnd::FlashWindowEx
閃爍指定的視窗。
BOOL FlashWindowEx(
DWORD dwFlags,
UINT uCount,
DWORD dwTimeout);
參數
*dwFlags*
指定快閃狀態。 如需值的完整清單,請參閱 FLASHWINFO
結構。
uCount
指定要閃爍視窗的次數。
dwTimeout
指定視窗會閃爍的速率,以毫秒為單位。 如果 dwTimeout
為零,函式會使用預設的數據指標閃爍速率。
傳回值
傳回值會指定函式呼叫 FlashWindowEx
之前窗口的狀態。 如果在呼叫之前繪製視窗標題為使用中,則傳回值是非零值。 否則,傳回值為零。
備註
此方法會模擬 函式的功能 FlashWindowEx
,如 Windows SDK 中所述。
CWnd::FromHandle
將控制代碼提供給視窗時,將指標傳回至 CWnd
物件。 CWnd
如果物件未附加至句柄,則會建立並附加暫存CWnd
物件。
static CWnd* PASCAL FromHandle(HWND hWnd);
參數
hWnd
HWND
Windows 視窗的 。
傳回值
將控制代碼提供給視窗時,將指標傳回至 CWnd
物件。 CWnd
如果物件未附加至句柄,則會建立並附加暫存CWnd
物件。
指標可能是暫時的,不應該儲存以供日後使用。
CWnd::FromHandlePermanent
將控制代碼提供給視窗時,將指標傳回至 CWnd
物件。
static CWnd* PASCAL FromHandlePermanent(HWND hWnd);
參數
hWnd
HWND
Windows 視窗的 。
傳回值
CWnd
物件的指標。
備註
CWnd
如果物件未附加至句柄,NULL
則會傳回 。
此函式與 不同 FromHandle
,不會建立暫存物件。
CWnd::get_accChild
由架構呼叫以擷取指定子系的 IDispatch
介面位址。
virtual HRESULT get_accChild(
VARIANT varChild,
IDispatch** ppdispChild);
參數
varChild
識別要擷取其介面的 IDispatch
子系。
ppdispChild
接收子物件介面的 IDispatch
位址。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accChild
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accChild
Windows SDK 中的 。
CWnd::get_accChildCount
由架構呼叫以擷取屬於此物件的子物件數目。
virtual HRESULT get_accChildCount(long* pcountChildren);
參數
pcountChildren
接收子係的數目。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accChildCount
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。 呼叫基類版本,然後新增非windowed 子專案。
如需詳細資訊,請參閱 IAccessible::get_accChildCount
Windows SDK 中的 。
CWnd::get_accDefaultAction
由架構呼叫以擷取具有物件預設動作描述的字串。
virtual HRESULT get_accDefaultAction(
VARIANT varChild,
BSTR* pszDefaultAction);
參數
varChild
指定要擷取的預設動作是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszDefaultAction
BSTR
接收本地化字串的位址,描述指定之物件的預設動作,如果NULL
這個物件沒有預設動作,則為 。
傳回值
傳回成功時S_OK失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的 IAccessible::get_accDefaultAction傳回值。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,以描述對象的默認動作。
如需詳細資訊,請參閱 IAccessible::get_accDefaultAction
Windows SDK 中的 。
CWnd::get_accDescription
由架構呼叫以擷取含有指定物件的視覺外觀描述的字串。
virtual HRESULT get_accDescription(
VARIANT varChild,
BSTR* pszDescription);
參數
varChild
指定要擷取的描述是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszDescription
BSTR
位址,接收描述指定之物件的當地語系化字串,如果NULL
這個物件沒有可用的描述,則為 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accDescription
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,以描述您的物件。 呼叫基類版本並新增您的描述。
如需詳細資訊,請參閱 IAccessible::get_accDescription
Windows SDK 中的 。
CWnd::get_accFocus
由架構呼叫以擷取具有鍵盤焦點的物件。
virtual HRESULT get_accFocus(VARIANT* pvarChild);
參數
pvarChild
接收具有焦點之對象的相關信息。 IAccessible::get_accFocus
請參閱 pvarID
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accFocus
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accFocus
Windows SDK 中的 。
CWnd::get_accHelp
由架構呼叫以擷取物件的 Help 屬性字串。
virtual HRESULT get_accHelp(
VARIANT varChild,
BSTR* pszHelp);
參數
varChild
指定要擷取的說明資訊是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszHelp
BSTR
接收本地化字串的位址,其中包含指定之物件的說明資訊,如果沒有NULL
可用的說明資訊,則為 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accHelp
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,為您的物件提供說明文字。
如需詳細資訊,請參閱 IAccessible::get_accHelp
Windows SDK 中的 。
CWnd::get_accHelpTopic
由架構呼叫,以擷取與指定對象相關聯之 WinHelp 檔案的完整路徑,以及該檔案中適當主題的標識碼。
virtual HRESULT get_accHelpTopic(
BSTR* pszHelpFile,
VARIANT varChild,
long* pidTopic);
參數
pszHelpFile
BSTR
位址,這個位址會接收與指定對象相關聯之檔案的完整路徑WinHelp
,如果有的話。
varChild
指定要擷取的 [說明] 主題是否為 物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得物件的 [說明主題] 或子標識碼 (若要取得其中一個物件的子專案的說明主題)。
pidTopic
識別與指定對象相關聯的說明檔主題。 IAccessible::get_accHelpTopic
請參閱 pidTopic
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accHelpTopic
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,以提供對象的相關說明資訊。
如需詳細資訊,請參閱 IAccessible::get_accHelpTopic
Windows SDK 中的 。
CWnd::get_accKeyboardShortcut
由架構呼叫以擷取指定物件的快速鍵或便捷鍵。
virtual HRESULT get_accKeyboardShortcut(
VARIANT varChild,
BSTR* pszKeyboardShortcut);
參數
varChild
指定要擷取的鍵盤快捷方式是否為物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszKeyboardShortcut
BSTR
接收本地化字串的 位址,識別鍵盤快捷方式,如果沒有NULL
與指定的物件相關聯,則為 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accKeyboardShortcut
。
備註
此函式是 MFC 支援的一 Active Accessibility
部分。
覆寫衍生類別中的 CWnd
這個函式,以識別對象的鍵盤快捷方式。
如需詳細資訊,請參閱 IAccessible::get_accKeyboardShortcut
Windows SDK 中的 。
CWnd::get_accName
由架構呼叫以擷取指定物件的名稱。
virtual HRESULT get_accName(
VARIANT varChild,
BSTR* pszName);
參數
varChild
指定要擷取的名稱是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszName
BSTR
接收包含指定物件名稱之字串的 位址。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accName
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
覆寫衍生類別中的 CWnd
這個函式,以傳回物件的名稱。
如需詳細資訊,請參閱 IAccessible::get_accName
Windows SDK 中的 。
CWnd::get_accParent
由架構呼叫以擷取物件之父代的 IDispatch
介面。
virtual HRESULT get_accParent(IDispatch** ppdispParent);
參數
ppdispParent
接收父物件的 IDispatch
介面位址。 如果沒有任何父代存在,或子系無法存取其父代,變數就會設定為 NULL
。
傳回值
在成功時傳 S_OK
回錯誤碼。失敗時會傳 COM
回錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accParent
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
在大部分情況下,您不需要覆寫此函式。
如需詳細資訊,請參閱 IAccessible::get_accParent
Windows SDK 中的 。
CWnd::get_accRole
由架構呼叫以擷取含有指定物件的角色描述資訊。
virtual HRESULT get_accRole(
VARIANT varChild,
VARIANT* pvarRole);
參數
varChild
指定要擷取的角色資訊是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pvarRole
接收角色資訊。 IAccessible::get_accRole
請參閱 pvarRole
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accRole
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accRole
Windows SDK 中的 。
CWnd::get_accSelection
由架構呼叫以擷取此物件的選取子物件。
virtual HRESULT get_accSelection(VARIANT* pvarChildren);
參數
pvarChildren
接收選取哪些子系的相關信息。 IAccessible::get_accSelection
請參閱 pvarChildren
Windows SDK 中的 。
傳回值
傳回成功時S_OK失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accSelection
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accSelection
Windows SDK 中的 。
CWnd::get_accState
由架構呼叫以擷取指定物件的目前狀態。
virtual HRESULT get_accState(
VARIANT varChild,
VARIANT* pvarState);
參數
varChild
指定要擷取的狀態資訊是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pvarState
接收物件狀態的相關信息。 IAccessible::get_accState
請參閱 pvarState
Windows SDK 中的 。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accState
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accState
Windows SDK 中的 。
CWnd::get_accValue
由架構呼叫以擷取指定物件的值。
virtual HRESULT get_accValue(
VARIANT varChild,
BSTR* pszValue);
參數
varChild
指定要擷取的值資訊是物件或其中一個物件的子專案。 這個參數可以是 CHILDID_SELF
(若要取得對象的相關信息)或子標識碼(以取得物件子項目的相關信息)。
pszValue
BSTR
位址,接收包含物件目前值的當地語系化字串。
傳回值
在成功時傳 S_OK
回失敗的 COM 錯誤碼。 請參閱 Windows SDK 中的傳回值IAccessible::get_accValue
。
備註
此函式是 MFC 的作用中輔助功能 支援的一部分。
如果您有非windowed使用者介面元素,則覆寫衍生類別中的 CWnd
此函式(MFC 會處理的非視窗 ActiveX 控件)。
如需詳細資訊,請參閱 IAccessible::get_accValue
Windows SDK 中的 。
CWnd::GetActiveWindow
擷取活動視窗的指標。
static CWnd* PASCAL GetActiveWindow();
傳回值
使用中的視窗, NULL
如果呼叫時沒有作用視窗, 則為 。 指標可能是暫時的,不應該儲存以供日後使用。
備註
活動視窗是具有目前輸入焦點的視窗,或是成員函式明確設為作用中的 SetActiveWindow
視窗。
CWnd::GetAncestor
擷取指定視窗的上階視窗物件。
CWnd* GetAncestor(UINT gaFlags) const;
參數
gaFlags
指定要擷取的上階。 如需可能值的完整清單,請參閱 GetAncestor
。
傳回值
如果函式成功,則傳回值是上階窗口物件的指標。 如果函式失敗,傳回值為 NULL
。
備註
此成員函式會模擬 函式的功能 GetAncestor
,如 Windows SDK 中所述。
CWnd::GetCapture
擷取具有滑鼠擷取的視窗。
static CWnd* PASCAL GetCapture();
傳回值
識別具有滑鼠擷取的視窗。 如果沒有視窗具有滑鼠擷取,則為 NULL
。
傳回值可能是暫時的,不應該儲存以供日後使用。
備註
在任何指定時間,只有一個視窗具有滑鼠擷取。 呼叫成員函式時 SetCapture
,視窗會收到滑鼠擷取。 此視窗會接收滑鼠輸入,不論游標是否在其框線內。
CWnd::GetCaretPos
擷取插入號目前位置的用戶端座標,並以 傳回它們。CPoint
static CPoint PASCAL GetCaretPos();
傳回值
CPoint
物件,包含插入號位置的座標。
備註
插入號位置是在視窗的 CWnd
用戶端座標中提供。
CWnd::GetCheckedRadioButton
擷取指定群組中目前核取單選按鈕的標識碼。
int GetCheckedRadioButton(
int nIDFirstButton,
int nIDLastButton);
參數
nIDFirstButton
指定群組中第一個單選按鈕的整數標識碼。
nIDLastButton
指定群組中最後一個單選按鈕的整數標識碼。
傳回值
核取單選按鈕的標識碼,如果未選取任何按鈕,則為 0。
CWnd::GetClientRect
將工作區的 CWnd
用戶端座標複製到 所 lpRect
指向的結構中。
void GetClientRect(LPRECT lpRect) const;
參數
lpRect
指向 RECT
要接收用戶端座標的結構 或 CRect
物件。 left
和 top
成員將會是 0。 right
和 bottom
成員將包含視窗的寬度和高度。
備註
用戶端座標會指定工作區的左上角和右下角。 由於用戶端座標相對於工作區的 CWnd
左上角,左上角的座標是 (0,0)。
範例
請參閱 CWnd::IsIconic
的範例。
CWnd::GetClipboardOwner
擷取剪貼簿的目前擁有者。
static CWnd* PASCAL GetClipboardOwner();
傳回值
識別如果函式成功,則識別擁有剪貼簿的視窗。 否則為 NULL
。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
剪貼簿仍然可以包含數據,即使數據目前尚未擁有也一樣。
CWnd::GetClipboardViewer
擷取剪貼簿查看器鏈結中的第一個視窗。
static CWnd* PASCAL GetClipboardViewer();
傳回值
識別目前負責在成功時顯示剪貼簿的視窗;否則 NULL
為 (例如,如果沒有查看器)。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
CWnd::GetControlUnknown
呼叫這個成員函式,以擷取未知 OLE 控件的指標。
LPUNKNOWN GetControlUnknown();
傳回值
這個CWnd
物件所表示之 OLE 控件介面的指標IUnknown
。 如果這個物件不代表 OLE 控制件,則傳回值為 NULL
。
備註
您不應該釋放此 IUnknown
指標。 一般而言,您會使用 來取得 控件的特定介面。
所 GetControlUnknown
傳回的介面指標不會計算參考計數。 除非您先前已呼叫指標,否則請勿 IUnknown::Release
在指標上呼叫 IUnknown::AddRef
。
範例
// The following code fragment is taken from CMyDlg::OnInitDialog
// CMyDlg is a CDialog-derived class.
// IDC_MSACALCTRL1 is the ID of the Calendar control OCX embedded
// on this dialog
CWnd *pWndCal = GetDlgItem(IDC_MSACALCTRL1);
// Use the IUnknown of the control
LPUNKNOWN pUnk = pWndCal->GetControlUnknown();
// From there get the IDispatch interface of control
LPDISPATCH pDisp = NULL;
pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDisp);
// use IDispatch method to invoke the control's functionality
CWnd::GetCurrentMessage
傳回此視窗目前正在處理的訊息指標。 只有在 OnMessage 訊息處理程式成員函式中時,才應該呼叫 。
static const MSG* PASCAL GetCurrentMessage();
傳回值
傳回結構指標 MSG
,其中包含視窗目前正在處理的訊息。 只有在 OnMessage 處理程式中時,才應該呼叫 。
範例
請參閱 CMDIFrameWnd::MDICascade
的範例。
CWnd::GetDC
根據 指定的 CWnd
類別樣式,擷取工作區的通用、類別或私人裝置內容的指標。
CDC* GetDC();
傳回值
如果成功,識別工作區的 CWnd
裝置內容,否則傳回值為 NULL
。 指標可能是暫時的,不應該儲存以供日後使用。
備註
針對常見的裝置內容,在每次擷取內容時, GetDC
將預設屬性指派給內容。 針對類別和私用內容, GetDC
保留先前指派的屬性不變。 裝置內容可用於後續圖形裝置介面 (GDI) 函式,以在工作區中繪製。
除非裝置內容屬於窗口類別, ReleaseDC
否則必須呼叫成員函式,才能在繪製之後釋放內容。
如果CS_OWNDC
CS_CLASSDC
、 或 CS_PARENTDC
是在註冊 類別時,當類別註冊時,成員函式會傳回GetDC
屬於 CWnd
類別的WNDCLASS
裝置內容。
CWnd::GetDCEx
擷取視窗裝置內容的 CWnd
句柄。
CDC* GetDCEx(
CRgn* prgnClip,
DWORD flags);
參數
prgnClip
識別可能與客戶端視窗可見區域結合的裁剪區域。
flags
可以有下列其中一個預設值:
DCX_CACHE
從快取傳回裝置內容,而不是OWNDC
或CLASSDC
視窗。 覆寫CS_OWNDC
和CS_CLASSDC
。DCX_CLIPCHILDREN
排除視窗下方CWnd
所有子視窗的可見區域。DCX_CLIPSIBLINGS
排除視窗上方CWnd
所有同層級視窗的可見區域。DCX_EXCLUDERGN
從傳回裝置內容的可見區域排除 所prgnClip
識別的裁剪區域。DCX_INTERSECTRGN
與所傳回裝置內容可見區域內所識別prgnClip
的裁剪區域相交。DCX_LOCKWINDOWUPDATE
允許繪圖,即使有LockWindowUpdate
有效的呼叫,否則會排除此視窗。 此值用於追蹤期間繪製。DCX_PARENTCLIP
使用父視窗的可見區域,並忽略父視窗的WS_CLIPCHILDREN
和WS_PARENTDC
樣式位。 此值會將裝置內容的原點設定為視窗左上角CWnd
。DCX_WINDOW
傳回對應至視窗矩形而非用戶端矩形的裝置內容。
傳回值
如果函式成功,則為指定視窗的裝置內容;否則 NULL
為 。
備註
裝置內容可用於後續的 GDI 函式中,以在工作區中繪製。
此函式是函式的 GetDC
延伸模組,可讓應用程式更充分掌控視窗的裝置內容如何及是否裁剪。
除非裝置內容屬於窗口類別,否則必須呼叫 函 ReleaseDC
式,才能在繪圖之後釋放內容。 由於在任何指定時間只能使用五個通用裝置內容,因此無法釋放裝置內容可能會防止其他應用程式存取裝置內容。
若要取得快取的裝置內容,應用程式必須指定 DCX_CACHE
。 如果未指定DCX_CACHE,而且視窗既不是 CS_OWNDC
,也不是 CS_CLASSDC
,則此函式會傳 NULL
回 。
如果註冊 類別時,函式會傳回GetDCEx
具有特殊特性的裝置內容,如果 CS_CLASSDC
已在結構中WNDCLASS
指定、 CS_OWNDC
或 CS_PARENTDC
樣式。
如需這些特性的詳細資訊,請參閱 Windows SDK 中結構的描述 WNDCLASS
。
CWnd::GetDCRenderTarget
擷取裝置內容 (DC) 會呈現 CWnd
視窗的目標。
CDCRenderTarget* GetDCRenderTarget();
傳回值
如果函式成功,則指定視窗的裝置內容轉譯目標;否則 NULL
為 。
備註
CWnd::GetDescendantWindow
呼叫這個成員函式,以尋找指定標識碼所指定的子代視窗。
CWnd* GetDescendantWindow(
int nID,
BOOL bOnlyPerm = FALSE) const;
參數
nID
指定要擷取之控件或子視窗的標識碼。
bOnlyPerm
指定要傳回的視窗是否為暫時的。 如果 TRUE
為 ,則只能傳回永久視窗;如果 FALSE
為 ,則函式可以傳回暫存視窗。 如需暫存視窗的詳細資訊,請參閱 技術附註 3。
傳回值
物件的指標 CWnd
,如果找不到子視窗, NULL
則為 。
備註
這個成員函式會搜尋子視窗的整個樹狀結構,而不只是直接子系的視窗。
CWnd::GetDesktopWindow
傳回 Windows 桌面視窗。
static CWnd* PASCAL GetDesktopWindow();
傳回值
識別 Windows 桌面視窗。 此指標可能是暫時的,不應該儲存以供日後使用。
備註
桌面視窗會涵蓋整個螢幕,而且是所有圖示和其他視窗都繪製在頂端的區域。
CWnd::GetDlgCtrlID
傳回任何子視窗的視窗或控件標識碼,不只傳回對話框中控件的視窗或控件識別碼值。
int GetDlgCtrlID() const;
傳回值
如果函式成功,則為子視窗的 CWnd
數值標識符,否則為 0。
備註
由於最上層視窗沒有標識符值,如果 CWnd
是最上層視窗,則此函式的傳回值無效。
範例
請參閱 CWnd::OnCtlColor
的範例。
CWnd::GetDlgItem
擷取對話框或其他視窗中指定控件或子視窗的指標。
CWnd* GetDlgItem(int nID) const;
void GetDlgItem(
int nID,
HWND* phWnd) const;
參數
nID
指定要擷取之控件或子視窗的標識碼。
phWnd
子視窗的指標。
傳回值
指定控制項或子視窗的指標。 如果參數指定 nID
之整數識別碼的控制項不存在,則值為 NULL
。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
傳回的指標通常會轉換成 所 nID
識別的控件類型。
範例
// uses GetDlgItem to return a pointer to a user interface control
CEdit *pBoxOne;
pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);
GotoDlgCtrl(pBoxOne);
CWnd::GetDlgItemInt
擷取 所 nID
識別之控件的文字。
UINT GetDlgItemInt(
int nID,
BOOL* lpTrans = NULL,
BOOL bSigned = TRUE) const;
參數
nID
指定要轉譯之對話框控件的整數標識碼。
lpTrans
指向要接收已轉譯旗標的布爾變數。
bSigned
指定要擷取的值是否帶正負號。
傳回值
指定對話框項目文字的翻譯值。 由於 0 是有效的傳回值, lpTrans
因此必須用來偵測錯誤。 如果需要帶正負號的傳回值,請將它 int
轉換成類型。
如果翻譯的數位大於 INT_MAX
(若為帶正負號的數位)或 UINT_MAX
(未帶正負號),則函式會傳回 0。
發生錯誤時,例如遇到非數值字元且超過上述最大值, GetDlgItemInt
會將0複製到所 lpTrans
指向的位置。 如果沒有錯誤, lpTrans
則會收到非零值。 如果 lpTrans
為 NULL
, GetDlgItemInt
則不會警告錯誤。
備註
它會將指定對話框中指定控件的文字轉譯為整數值,方法是在文字開頭去除任何額外的空格,並轉換小數字數。 它會在到達文字結尾或遇到任何非數值字元時停止翻譯。
如果 bSigned
為 TRUE
, GetDlgItemInt
則會檢查文字開頭的減號 (-),並將文字轉譯為帶正負號的數位。 否則,它會建立不帶正負號的值。
它會將訊息傳送 WM_GETTEXT
至控件。
CWnd::GetDlgItemText
呼叫這個成員函式,以擷取與對話框中控件相關聯的標題或文字。
int GetDlgItemText(
int nID,
LPTSTR lpStr,
int nMaxCount) const;
int GetDlgItemText(
int nID,
CString& rString) const;
參數
nID
指定要擷取標題之控件的整數標識碼。
lpStr
指向緩衝區以接收控件的標題或文字。
nMaxCount
指定要複製到 lpStr
之字串的最大長度(以字元為單位)。 如果字串超過 nMaxCount
,則會截斷字串。
rString
的 CString
參考。
傳回值
指定複製到緩衝區的實際字元數,不包括終止的 Null 字元。 如果未複製任何文字,則值為 0。
備註
成員 GetDlgItemText
函式會將文字複製到 所 lpStr
指向的位置,並傳回所複製位元組數目的計數。
CWnd::GetDSCCursor
呼叫這個成員函式,以擷取數據源控件之 、UserName
、 Password
和 SQL 屬性所DataSource
定義的基礎數據指標。
IUnknown* GetDSCCursor();
傳回值
數據源控件所定義的數據指標。 MFC 會負責呼叫 AddRef
指標。
備註
使用傳回的指標來設定 ICursor
複雜數據綁定控件的 屬性,例如數據綁定方格控件。 除非第一個綁定控件要求其數據指標,否則數據源控件將不會變成作用中。 這可以透過呼叫 GetDSCCursor
或 MFC 系結管理員隱含的方式進行。 在任一情況下,您可以呼叫 ,然後在 傳回的指標IUnknown
上呼叫 GetDSCCursor
Release
,強制數據源控件變成作用中。 啟用會導致數據源控件嘗試連線到基礎數據源。 傳回的指標可用於下列內容:
範例
BOOL CMyDlg::OnInitDialog()
{
// Find the child controls on the dialog
HRESULT hr = E_FAIL;
CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
CWnd *pListWnd = GetDlgItem(IDC_DBLIST1);
IUnknown *punkList = pListWnd->GetControlUnknown();
IDBList *pList = NULL;
if (NULL != punkList)
{
hr = punkList->QueryInterface(__uuidof(IDBList), (void **)&pList);
}
if (SUCCEEDED(hr))
{
// Tell the MFC binding manager that we are
// binding DISPID 3 to the data-source control.
pListWnd->BindProperty(0x3, pDSC);
// Tell the listbox which field to expose as its bound column
pList->put_BoundColumn(_T("ContactFirstName"));
// Tell the listbox which cursor and column to populate its list from
pList->put_ListField(_T("ContactFirstName"));
IUnknown *punkCursor = pDSC->GetDSCCursor();
if (NULL != punkCursor)
{
punkCursor->Release();
}
pList->Release();
return TRUE;
}
CWnd::GetDynamicLayout
擷取動態配置管理員物件的指標。
CMFCDynamicLayout* GetDynamicLayout();
傳回值
動態設定管理員物件的指標,如果未 NULL
啟用動態配置,則為 。
備註
視窗物件擁有及管理傳回的指標存留期,因此它只應該用來存取物件;請勿永久刪除指標或儲存指標。
CWnd::GetExStyle
傳回視窗的延伸樣式。
DWORD GetExStyle() const;
傳回值
視窗的延伸樣式。 如需 MFC 中使用的擴充視窗樣式詳細資訊,請參閱 擴充視窗樣式。
CWnd::GetFocus
擷取目前具有輸入焦點之的指標 CWnd
。
static CWnd* PASCAL GetFocus();
傳回值
具有目前焦點的視窗指標,如果沒有 NULL
焦點視窗,則為 。
指標可能是暫時的,不應該儲存以供日後使用。
CWnd::GetFont
將 WM_GETFONT
訊息傳送至視窗以擷取目前的字型。
CFont* GetFont() const;
傳回值
CFont
附加至視窗目前字型之物件的指標。
備註
除非窗口處理訊息, WM_GETFONT
否則這個方法不會有任何作用。 許多衍生自 CWnd
此訊息的 MFC 類別,因為它們會附加至預先定義的窗口類別,其中包含訊息的 WM_GETFONT
訊息處理程式。 若要使用此方法,衍生自 CWnd
的類別必須定義訊息的方法處理程式 WM_GETFONT
。
CWnd::GetForegroundWindow
傳回前景視窗的指標(使用者目前使用的視窗)。
static CWnd* PASCAL GetForegroundWindow();
傳回值
前景視窗的指標。 這可能是暫存 CWnd
物件。
備註
前景視窗僅適用於最上層視窗(框架視窗或對話框)。
CWnd::GetIcon
呼叫這個成員函式,以取得大型 (32x32) 或小型 (16x16) 圖示的句柄,如 所示 bBigIcon
。
HICON GetIcon(BOOL bBigIcon) const;
參數
bBigIcon
如果 TRUE
,則指定 32 圖元的 32 像素圖示;如果 FALSE
,則指定 16 像素 x 16 像素圖示。
傳回值
圖示的句柄。 如果失敗,則傳 NULL
回 。
CWnd::GetLastActivePopup
判斷 CWnd
擁有的快顯視窗哪一個是最近啟用的。
CWnd* GetLastActivePopup() const;
傳回值
識別最近使用中的彈出視窗。 如果符合下列任何條件,則傳回值會是視窗本身:
視窗本身最近使用中。
視窗沒有任何彈出視窗。
視窗不是最上層視窗,或是由另一個窗口擁有。
指標可能是暫時的,不應該儲存以供日後使用。
範例
請參閱 CWnd::FindWindow
的範例。
CWnd::GetLayeredWindowAttributes
擷取分層視窗的不透明和透明色鍵。
BOOL GetLayeredWindowAttributes(
COLORREF* pcrKey,
BYTE* pbAlpha,
DWORD* pdwFlags) const;
參數
pcrKey
COLORREF
值指標,這個值會接收組成分層視窗時要使用的透明度色彩索引鍵。 以這個色彩繪製的視窗所繪製的所有像素都會是透明的。 如果不需要自變數,則這可以是 NULL
。
pbAlpha
BYTE
的指標,接收用來描述分層視窗不透明度的Alpha值。 當所參考 pbAlpha
的變數是 0 時,視窗會完全透明。 當所參考 pbAlpha
的變數是 255 時,視窗是不透明的。 如果不需要自變數,則這可以是 NULL
。
pdwFlags
DWORD
接收分層旗標的指標。 如果不需要自變數,則這可以是 NULL
。 如需可能值的完整清單,請參閱 『GetLayeredWindowAttributes。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 GetLayeredWindowAttributes
,如 Windows SDK 中所述。
CWnd::GetMenu
擷取此視窗功能表的指標。
CMenu* GetMenu() const;
傳回值
識別功能表。 如果沒有任何選單,則值為 NULL
CWnd
。 如果 CWnd
為子視窗,則傳回值為未定義。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
此函式不應該用於子視窗,因為它們沒有功能表。
範例
void CMainFrame::OnCwndDeletefilemenu()
{
// This example deletes the leftmost popup menu or leftmost
// popup menu item from the application's main window.
CWnd *pMain = AfxGetMainWnd();
// The main window _can_ be NULL, so this code
// doesn't ASSERT and actually tests.
if (pMain != NULL)
{
// Get the main window's menu
CMenu *pMenu = pMain->GetMenu();
// If there is a menu and it has items, we'll
// delete the first one.
if (pMenu != NULL && pMenu->GetMenuItemCount() > 0)
{
pMenu->DeleteMenu(0, MF_BYPOSITION);
// force a redraw of the menu bar
pMain->DrawMenuBar();
}
// No need to delete pMenu because it is an MFC
// temporary object.
}
}
CWnd::GetMenuBarInfo
擷取指定功能表欄的相關信息。
BOOL GetMenuBarInfo(
LONG idObject,
LONG idItem,
PMENUBARINFO pmbi) const;
參數
idObject
指定功能表物件。 如需可能值的清單,請參閱 GetMenuBarInfo
。
idItem
指定要擷取信息的專案。 如果此參數為零,函式會擷取功能表本身的相關信息。 如果此參數為 1,則函式會擷取功能表上第一個專案的相關信息,依這類方式。
pmbi
MENUBARINFO
接收資訊之結構的指標。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 GetMenuBarInfo
,如 Windows SDK 中所述。
CWnd::GetNextDlgGroupItem
搜尋對話框中控件群組內的上一個或下一個控件。
CWnd* GetNextDlgGroupItem(
CWnd* pWndCtl,
BOOL bPrevious = FALSE) const;
COleControlSiteOrWnd* GetNextDlgGroupItem(
COleControlSiteOrWnd* pCurSiteOrWnd = NULL) const;
參數
pWndCtl
識別要作為搜尋起點的控件。
bPrevious
指定函式如何在對話框中搜尋控件群組。 如果 TRUE
為 ,則函式會搜尋群組中的上一個控件;如果是 FALSE
,則會搜尋群組中的下一個控件。
pCurSiteOrWnd
識別 COleControlSiteOrWnd
控制項。 如需 的詳細資訊COleControlSiteOrWnd
,請參閱。
傳回值
如果成員函式成功,則為群組中上一個或下一個控件的指標。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
一組控件會以以樣式建立的 WS_GROUP
控件開始,最後一個不是以樣式建立的 WS_GROUP
控件結尾。
根據預設, GetNextDlgGroupItem
成員函式會傳回群組中下一個控件的指標。 如果 pWndCtl
識別群組中的第一個控件,且 bPrevious
為 TRUE
, GetNextDlgGroupItem
則會傳回群組中最後一個控件的指標。
注意
因為 MFC 支援無視窗 ActiveX 控制件、標準 ActiveX 控制件和視窗,因此只參考控制件 HWND
不再足夠。 物件 COleControlSiteOrWnd
包含將對象識別為視窗式 ActiveX 控制件、無視窗 ActiveX 控制件或視窗的資訊,如下所示:
控制件或視窗類型 | 識別資訊 |
---|---|
視窗式 ActiveX 控制件 | 包含 HWND ,並將 COleControlSite 對象與其產生關聯。 的成員m_hWnd COleControlSiteOrWnd 會設定為 HWND 控制件的 ,而 m_pSite 成員指向控制項的 COleControlSite 。 |
無視窗 ActiveX 控制件 | 不包含 HWND 。 的成員m_pSite COleControlSiteOrWnd 指向 控制件的 COleControlSite ,而 m_hWnd 成員為 NULL 。 |
標準視窗 | 只包含 。HWND 的成員m_hWnd COleControlSiteOrWnd 會設定為視窗的 HWND,而m_pSite 成員為 NULL 。 |
CWnd::GetNextDlgTabItem
擷取第一個以樣式建立之 WS_TABSTOP
控件的指標,該控件在指定控件之前或之後建立。
CWnd* GetNextDlgTabItem(
CWnd* pWndCtl,
BOOL bPrevious = FALSE) const;
COleControlSiteOrWnd* GetNextDlgTabItem(
COleControlSiteOrWnd* pCurSiteOrWnd,
BOOL bPrevious) const;
參數
pWndCtl
識別要作為搜尋起點的控件。
pCurSiteOrWnd
識別 COleControlSiteOrWnd
控制項。 如需 COleControlSiteOrWnd
的詳細資訊,請參閱CWnd::GetNextDlgGroupItem
。
bPrevious
指定函式搜尋對話框的方式。 如果 TRUE
為 ,則函式會在對話框中搜尋上一個控件;如果 FALSE
為 ,則會搜尋下一個控件。
傳回值
如果成員函式成功,則為具有 WS_TABSTOP
樣式的上一個或下一個控件指標。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
如需 COleControlSiteOrWnd
的詳細資訊,請參閱CWnd::GetNextDlgGroupItem
。
CWnd::GetNextWindow
在視窗管理員清單中搜尋下一個 (或上一個) 視窗。
CWnd* GetNextWindow(UINT nFlag = GW_HWNDNEXT) const;
參數
nFlag
指定函式會傳回下一個視窗或上一個視窗的指標。 它可以是 GW_HWNDNEXT
,它會傳回視窗管理員清單上物件後面的 CWnd
視窗,或 GW_HWNDPREV
,它會傳回視窗管理員清單上的上一個視窗。
傳回值
如果成員函式成功,則識別視窗管理員清單中的下一個 (或上一個) 視窗。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
視窗管理員的清單包含所有最上層視窗、其相關聯的子視窗,以及任何子視窗的子視窗專案。
如果 CWnd
是最上層視窗,則函式會搜尋下一個 (或上一個) 最上層視窗;如果是 CWnd
子視窗,則函式會搜尋下一個 (或上一個) 子視窗。
CWnd::GetOleControlSite
擷取指定的 ActiveX 控制項的自訂網站。
COleControlSite* GetOleControlSite(UINT idControl) const;
參數
idControl
ActiveX 控件的標識碼。
CWnd::GetOpenClipboardWindow
擷取目前開啟剪貼簿之視窗的句柄。
static CWnd* PASCAL GetOpenClipboardWindow();
傳回值
如果函式成功,目前已開啟剪貼簿的視窗句柄;否則 NULL
為 。
CWnd::GetOwner
擷取視窗擁有者的指標。
CWnd* GetOwner() const;
傳回值
CWnd
物件的指標。
備註
如果視窗沒有擁有者,則預設會傳回父視窗物件的指標。 請注意,擁有者與擁有者之間的關係與父子層面在幾個重要方面不同。 例如,具有父系的視窗受限於其父視窗的工作區。 擁有的視窗可以在桌面上的任何位置繪製。
此函式的擁有權概念與的 GetWindow
擁有權概念不同。
CWnd::GetParent
呼叫此函式以取得子視窗父視窗的指標(如果有的話)。
CWnd* GetParent() const;
傳回值
請參閱 Windows SDK 中的 GetParent
傳回值一節。
備註
函 GetParent
式會傳回直接父系的指標(如果存在的話)。 相反地,函 GetParentOwner
式會傳回不是子視窗之最直接父視窗或擁有者視窗的指標(沒有 WS_CHILD
樣式)。 如果您在子視窗內有子視窗 GetParent
,並 GetParentOwner
傳回不同的結果。
CWnd::GetParentFrame
呼叫這個成員函式以擷取父框架視窗。
CFrameWnd* GetParentFrame() const;
傳回值
如果成功,則為框架視窗的指標;否則 NULL
為 。
備註
成員函式會搜尋父鏈結,直到 CFrameWnd
找到 (或衍生類別) 對象為止。
CWnd::GetParentOwner
呼叫這個成員函式,以取得子視窗父視窗或擁有者視窗的指標。
CWnd* GetParentOwner() const;
傳回值
CWnd
物件的指標。 CWnd
如果物件未附加至句柄,則會建立並附加暫存CWnd
物件。 指標可能是暫時的,不應該儲存以供日後使用。
備註
GetParentOwner
會傳回不是子視窗之最直接父視窗或擁有者視窗的指標(沒有 WS_CHILD
樣式)。 目前的擁有者視窗可以使用 來設定 SetOwner
。 根據預設,視窗的父代是其擁有者。
相反地,函 GetParent
式會傳回直接父系的指標,不論其是否為子視窗。 如果您在子視窗內有子視窗 GetParent
,並 GetParentOwner
傳回不同的結果。
CWnd::GetProperty
呼叫這個成員函式,以取得 所 dwDispID
指定的 ActiveX 控件屬性。
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp)const;
參數
dwDispID
識別要擷取的屬性。
vtProp
指定要擷取的屬性類型。 如需可能的值,請參閱 的一 COleDispatchDriver::InvokeHelper
節。
pvProp
將接收屬性值之變數的位址。 其必須符合 vtProp
所指定的類型。
備註
GetProperty
透過 pvProp
傳回 值。
注意
這個函式應該只在代表 ActiveX 控制件的物件上 CWnd
呼叫。
如需搭配 ActiveX 控制件容器使用此成員函式的詳細資訊,請參閱 ActiveX 控件容器:在 ActiveX 控制件容器中設計 ActiveX 控制件一文。
CWnd::GetRenderTarget
取得與此視窗相關聯的呈現目標。
CHwndRenderTarget* GetRenderTarget();
傳回值
轉譯目標或 NULL
的指標。
CWnd::GetSafeHwnd
傳m_hWnd
回 ,如果指標為 ,則NULL
this
傳NULL
回 。
HWND GetSafeHwnd() const;
傳回值
傳回視窗的視窗句柄。 NULL
如果 CWnd
未附加至視窗,或與指標搭配使用,則傳回 NULL
CWnd
。
範例
請參閱 CWnd::SubclassWindow
的範例。
CWnd::GetSafeOwner
呼叫這個成員函式,擷取應該用於對話方塊或其他強制回應窗口的擁有者視窗。
static CWnd* GetSafeOwner(
CWnd* pParent = NULL,
HWND* pWndTop = NULL);
參數
pParent
父 CWnd
視窗的指標。 可以是 NULL
。
pWndTop
目前位於頂端之視窗的指標。 可以是 NULL
。
傳回值
指定視窗之安全擁有者的指標。
備註
安全擁有者是的第一個非子系父視窗 pParent
。 如果 pParent
為 NULL
,則會使用線程的主視窗(透過 AfxGetMainWnd
擷取)來尋找擁有者。
注意
架構本身會使用此函式來判斷未指定擁有者之對話框和屬性表的正確擁有者視窗。
CWnd::GetScrollBarCtrl
呼叫這個成員函式,以取得指定同層級滾動條或分隔視窗的指標。
virtual CScrollBar* GetScrollBarCtrl(int nBar) const;
參數
nBar
指定滾動條的類型。 參數可以採用下列其中一個值:
SB_HORZ
擷取水平滾動條的位置。SB_VERT
擷取垂直滾動條的位置。
傳回值
同層級滾動條控制件,如果沒有,則 NULL
為 。
備註
此成員函式不會在建立窗口期間設定 或 WS_VSCROLL
位時WS_HSCROLL
所建立的滾動條上運作。 這個 CWnd
函式的實作只會傳 NULL
回 。 衍生類別,例如 CView
,實作所述的功能。
CWnd::GetScrollBarInfo
擷取所指定之捲軸的相關資訊。
BOOL GetScrollBarInfo(
LONG idObject,
PSCROLLBARINFO psbi) const;
參數
idObject
指定功能表物件。 如需可能值的清單,請參閱 GetScrollBarInfo
。
psbi
SCROLLBARINFO
接收資訊之結構的指標。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 GetScrollBarInfo
,如 Windows SDK 中所述。
CWnd::GetScrollInfo
呼叫這個成員函式,以擷 SCROLLINFO
取結構關於滾動條的資訊。
BOOL GetScrollInfo(
int nBar,
LPSCROLLINFO lpScrollInfo,
UINT nMask = SIF_ALL);
參數
nBar
指定滾動條是視窗非工作區的控件或一部分。 如果它是非工作區的一部分, nBar
也表示滾動條是水準、垂直或兩者的位置。 它必須是下列其中一項:
SB_CTL
擷取滾動條控件的參數。 數據m_hWnd
成員必須是滾動條控件的句柄。SB_HORZ
擷取視窗標準水準滾動條的參數。SB_VERT
擷取視窗標準垂直滾動條的參數。
lpScrollInfo
結構的指標 SCROLLINFO
。 如需此結構的詳細資訊,請參閱 Windows SDK。
nMask
指定要擷取的滾動條參數。 預設值會指定、 SIF_POS
SIF_TRACKPOS
和 SIF_RANGE
的組合SIF_PAGE
。 如需值的詳細資訊,nMask
請參閱 SCROLLINFO
。
傳回值
如果訊息擷取任何值,則傳回為 TRUE
。 否則為 FALSE
。
備註
GetScrollInfo
可讓應用程式使用32位捲動位置。
結構 SCROLLINFO
包含滾動條的相關信息,包括滾動條的下限和最大捲動位置、頁面大小,以及滾動盒的位置(拇指)。 SCROLLINFO
如需變更結構預設值的詳細資訊,請參閱 Windows SDK 中的結構主題。
指出滾動條位置的 MFC Windows 訊息處理程式 CWnd::OnHScroll 和 CWnd::OnVScroll 僅提供 16 位的位置數據。 GetScrollInfo
並提供 SetScrollInfo
32位的滾動條位置數據。 因此,應用程式可以在處理 CWnd::OnHScroll
或 CWnd::OnVScroll
時呼叫 GetScrollInfo
,以取得32位滾動條位置數據。
CWnd::GetScrollLimit
呼叫這個成員函式以擷取滾動條的最大捲動位置。
int GetScrollLimit(int nBar);
參數
nBar
指定滾動條的類型。 參數可以採用下列其中一個值:
SB_HORZ
擷取水準滾動條的捲動限制。SB_VERT
擷取垂直滾動條的滾動限制。
傳回值
如果成功,指定滾動條的最大位置;否則為 0。
CWnd::GetScrollPos
擷取滾動條滾動條滾動盒的目前位置。
int GetScrollPos(int nBar) const;
參數
nBar
指定要檢查的滾動條。 參數可以採用下列其中一個值:
SB_HORZ
擷取水平滾動條的位置。SB_VERT
擷取垂直滾動條的位置。
傳回值
如果成功,指定滾動條中滾動盒的目前位置;否則為 0。
備註
目前的位置是相依於目前卷動範圍的相對值。 例如,如果卷動範圍是 50 到 100,而滾動盒位於列中間,則目前的位置為 75。
CWnd::GetScrollRange
將指定滾動條的目前最小和最大滾動條位置複製到 和 lpMaxPos
所lpMinPos
指定的位置。
void GetScrollRange(
int nBar,
LPINT lpMinPos,
LPINT lpMaxPos) const;
參數
nBar
指定要檢查的滾動條。 參數可以採用下列其中一個值:
SB_HORZ
擷取水平滾動條的位置。SB_VERT
擷取垂直滾動條的位置。
lpMinPos
指向要接收最小位置的整數變數。
lpMaxPos
指向要接收最大位置的整數變數。
備註
如果沒有 CWnd
捲動條,則 GetScrollRange
成員函式會將 0 lpMinPos
複製到 和 lpMaxPos
。
標準滾動條的預設範圍是 0 到 100。 滾動條控件的預設範圍是空的(兩個值都是0)。
CWnd::GetStyle
傳回目前的視窗樣式。
DWORD GetStyle() const;
傳回值
窗口的樣式。 如需 MFC 中使用的視窗樣式詳細資訊,請參閱 視窗樣式。
CWnd::GetSystemMenu
可讓應用程式存取控制功能表以進行複製和修改。
CMenu* GetSystemMenu(BOOL bRevert) const;
參數
bRevert
指定要採取的動作。 如果 bRevert
為 FALSE
, GetSystemMenu
則會傳回目前使用中之 [控件] 功能表複本的句柄。 此複本一開始與 [控件] 功能表相同,但可以修改。 如果 bRevert
為 TRUE
, GetSystemMenu
則會將 [控件] 功能表重設為默認狀態。 先前可能已修改的 [控件] 功能表,如果有的話,就會終結。 在此案例中,傳回值未定義。
傳回值
如果 bRevert
為 FALSE
,則識別 [控件] 功能表的複本。 如果 bRevert
為 TRUE
,則傳回值未定義。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
任何不用來 GetSystemMenu
製作自己的 [控件] 功能表複本的視窗,都會收到標準 [控件] 功能表。
成員函式傳回的GetSystemMenu
指標可以與 、 CMenu::InsertMenu
或 CMenu::ModifyMenu
函式搭配CMenu::AppendMenu
使用,以變更 [控件] 功能表。
[控制單一開始包含以各種識別碼值識別的專案,例如 SC_CLOSE
、 SC_MOVE
和 SC_SIZE
。 [控件] 功能表上的項目會產生 WM_SYSCOMMAND
訊息。 所有預先定義的 Control-menu 專案都有大於0xF000的標識碼。 如果應用程式將專案新增至 [控件] 功能表,它應該使用小於 F000 的識別碼。
Windows 可能會自動讓項目無法在標準 [控件] 功能表上使用。 CWnd
可以藉由回應任何功能表顯示之前傳送的 WM_INITMENU
訊息,來執行自己的選取或無法使用。
範例
// The following code fragment is taken from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu *pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUT);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CWnd::GetTitleBarInfo
擷取指定之標題列的相關資訊。
BOOL GetTitleBarInfo(PTITLEBARINFO pti) const;
參數
pti
TITLEBARINFO
接收資訊之結構的指標。
備註
此成員函式會模擬 函式的功能 GetTitleBarInfo
,如 Windows SDK 中所述。
CWnd::GetTopLevelFrame
呼叫這個成員函式,以擷取視窗的最上層框架視窗,如果有的話。
CFrameWnd* GetTopLevelFrame() const;
傳回值
識別視窗的最上層框架視窗。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
如果沒有 CWnd
附加的視窗,或其最上層父系不是 CFrameWnd
衍生的物件,則此函式會傳 NULL
回 。
CWnd::GetTopLevelOwner
呼叫此成員函式以擷取最上層視窗。
CWnd* GetTopLevelOwner() const;
傳回值
識別最上層視窗。 傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
最上層視窗是桌面子視窗。 如果沒有 CWnd
附加的視窗,則此函式會傳 NULL
回 。
CWnd::GetTopLevelParent
呼叫這個成員函式以擷取視窗的最上層父系。
CWnd* GetTopLevelParent() const;
傳回值
識別視窗的最上層父視窗。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
GetTopLevelParent
與 GetTopLevelFrame
和 GetTopLevelOwner
類似;不過,它會忽略設定為目前擁有者視窗的值。
CWnd::GetTopWindow
搜尋屬於 CWnd
的最上層子視窗。
CWnd* GetTopWindow() const;
傳回值
識別子視窗連結清單中的最上層子視窗 CWnd
。 如果沒有子視窗存在,則值為 NULL
。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
如果沒有 CWnd
子系,則此函式會傳 NULL
回 。
CWnd::GetUpdateRect
擷取完全圍住 更新區域的最小矩形座標。
BOOL GetUpdateRect(
LPRECT lpRect,
BOOL bErase = FALSE);
參數
lpRect
指向 CRect
物件或結構,這個對象或 RECT
結構 會接收包含更新區域的更新用戶端座標。
將此參數設定為 NULL
,以判斷更新區域是否存在於 內 CWnd
。 如果 lpRect
為 NULL
, GetUpdateRect
如果更新區域存在,則成員函式會傳回非零,如果更新區域不存在,則傳回 0。 這提供一種方式來判斷訊息是否 WM_PAINT
由無效區域所產生。 請勿在 Windows 3.0 版和更早版本中將此參數設定為 NULL
。
bErase
指定是否要清除更新區域中的背景。
傳回值
指定更新區域的狀態。 如果更新區域不是空的,則此值為非零值;否則為 0。
lpRect
如果參數設定為 NULL
,則如果更新區域存在,則傳回值為非零值,否則為 0。
備註
如果使用 CWnd
樣式建立 CS_OWNDC
,而且對應模式不是 MM_TEXT
, GetUpdateRect
則成員函式會以邏輯座標提供矩形。 否則, GetUpdateRect
在用戶端座標中提供矩形。 如果沒有更新區域, GetUpdateRect
請將矩形設定為空白(將所有座標設為0)。
參數 bErase
會指定是否 GetUpdateRect
應該清除更新區域的背景。 如果 bErase
是 TRUE
且更新區域不是空的,則會清除背景。 若要清除背景, GetUpdateRect
請傳送 WM_ERASEBKGND
訊息。
成員函式所擷取的 BeginPaint
更新矩形與成員函式所擷取的 GetUpdateRect
更新矩形相同。
成員 BeginPaint
函式會自動驗證更新區域,因此呼叫之後立即進行的任何呼叫 GetUpdateRect
,以 BeginPaint
擷取空的更新區域。
CWnd::GetUpdateRgn
將更新區域擷取至 所 pRgn
識別的區域。
int GetUpdateRgn(
CRgn* pRgn,
BOOL bErase = FALSE);
參數
pRgn
識別更新區域。
bErase
指定是否要清除背景,並繪製子視窗的非工作區。 如果值為 FALSE
,則不會完成繪圖。
傳回值
指定短整數旗標,指出產生的區域類型。 此值可以接受下列任一項:
SIMPLEREGION
區域沒有重疊的框線。COMPLEXREGION
區域有重疊的框線。NULLREGION
區域是空的。ERROR
未建立任何區域。
備註
此區域的座標相對於左上角(用戶端座標)。
成員 BeginPaint
函式會自動驗證更新區域,因此呼叫之後立即進行的任何呼叫 GetUpdateRgn
,以 BeginPaint
擷取空的更新區域。
CWnd::GetWindow
傳回要求之視窗的指標,如果沒有 NULL
,則傳回 。
CWnd* GetWindow(UINT nCmd) const;
參數
*nCmd*
指定與傳回視窗之間的 CWnd
關聯性。 它可能需要下列其中一個值:
GW_CHILD
識別第一個CWnd
子視窗。GW_HWNDFIRST
如果CWnd
是子視窗,則傳回第一個同層級視窗。 否則,它會傳回清單中的第一個最上層視窗。GW_HWNDLAST
如果CWnd
為子視窗,則傳回最後一個同層級視窗。 否則,它會傳回清單中的最後一個最上層視窗。GW_HWNDNEXT
傳回視窗管理員清單上的下一個視窗。GW_HWNDPREV
傳回視窗管理員清單上的上一個視窗。GW_OWNER
識別CWnd
擁有者。
傳回值
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
CWnd::GetWindowContextHelpId
呼叫這個成員函式,以擷取與視窗相關聯的說明內容標識碼。
DWORD GetWindowContextHelpId() const;
傳回值
說明內容識別碼。 如果窗口沒有,則傳回 0。
CWnd::GetWindowedChildCount
呼叫這個成員函式以擷取相關聯的子視窗數目。
long GetWindowedChildCount();
傳回值
與 CWnd
對象相關聯的子視窗數目。
CWnd::GetWindowDC
擷取整個視窗的顯示內容,包括標題列、功能表和滾動條。
CDC* GetWindowDC();
傳回值
如果函式成功,則識別指定視窗的顯示內容;否則 NULL
為 。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。 ReleaseDC
每次成功呼叫 GetWindowDC
時,都應該呼叫一次。
備註
窗口顯示內容允許在 中的任何 CWnd
位置繪製,因為內容的來源是的左上角 CWnd
,而不是工作區。
每次擷取內容時,默認屬性都會指派給顯示內容。 先前的屬性會遺失。
GetWindowDC
是要用於非工作區區域內 CWnd
的特殊繪製效果。 不建議在任何視窗的非工作區中繪製。
GetSystemMetrics
Windows 函式可用來擷取非工作區各部分的維度,例如標題欄、功能表和滾動條。
繪製完成之後, ReleaseDC
必須呼叫成員函式來釋放顯示內容。 由於可以同時開啟的裝置內容數目限制,無法釋出顯示內容將嚴重影響應用程式所要求的繪製。
CWnd::GetWindowInfo
擷取視窗的相關信息。
BOOL GetWindowInfo(PWINDOWINFO pwi) const;
參數
pwi
結構的指標 WINDOWINFO
。
備註
此成員函式會模擬 函式的功能 GetWindowInfo
,如 Windows SDK 中所述。
CWnd::GetWindowlessChildCount
擷取相關聯的無視窗子視窗數目。
long GetWindowlessChildCount();
傳回值
與對象相關聯的 CWnd
無視窗子視窗數目。
CWnd::GetWindowPlacement
擷取視窗的顯示狀態和一般 (還原)、最小化和最大化位置。
BOOL GetWindowPlacement(WINDOWPLACEMENT* lpwndpl) const;
參數
lpwndpl
指向 WINDOWPLACEMENT
接收顯示狀態和位置信息的結構。
傳回值
如果函式成功則為非零,否則為 0。
備註
這個 flags
函式所擷取之 WINDOWPLACEMENT
結構的成員一律為 0。 如果 CWnd
最大化,則 showCmd
的成員 WINDOWPLACEMENT
為 SW_SHOWMAXIMIZED
。 如果視窗最小化, 則為 SW_SHOWMINIMIZED
。 否則為 SW_SHOWNORMAL
。
CWnd::GetWindowRect
將物件周框 CWnd
的維度複製到 所 lpRect
指向的結構。
void GetWindowRect(LPRECT lpRect) const;
參數
lpRect
CRect
指向對象或RECT
結構,這個結構將接收左上角和右下角的螢幕座標。
備註
維度會以相對於顯示畫面左上角的螢幕座標來指定。 標題、框線和滾動條的維度,如果有的話,就會包含。
CWnd::GetWindowRgn
呼叫這個成員函式以取得視窗的窗口區域。
int GetWindowRgn(HRGN hRgn)const;
參數
hRgn
視窗區域的句柄。
傳回值
傳回值會指定函式取得的區域類型。 它可能是下列其中一個值:
NULLREGION
區域是空的。SIMPLEREGION
區域是單一矩形。COMPLEXREGION
區域是一個以上的矩形。ERROR
發生錯誤;區域不會受到影響。
備註
視窗區域會決定作業系統允許繪製之視窗內的區域。 操作系統不會顯示位於視窗區域外部之視窗的任何部分。
視窗視窗區域的座標相對於視窗左上角,而不是視窗的工作區。
若要設定視窗的視窗區域,請呼叫 CWnd::SetWindowRgn
。
CWnd::GetWindowText
標 CWnd
題標題 (如果有的話) 複製到 所 lpszStringBuf
指向的緩衝區,或複製到目的地字串 rString
。
int GetWindowText(
LPTSTR lpszStringBuf,
int nMaxCount) const;
void GetWindowText(
CString& rString) const;
參數
lpszStringBuf
指向要接收視窗標題複製字串的緩衝區。
nMaxCount
指定要複製到緩衝區的最大字元數,包括終止的 Null 字元。 如果字串的長度超過 中指定的 nMaxCount
字元數,則會截斷字串。
rString
物件 CString
,用來接收視窗標題的複製字串。
傳回值
指定複製字串的長度,以字元為單位,不包括終止的 Null 字元。 如果沒有 CWnd
標題或標題是空的,則為 0。
備註
CWnd
如果對像是控件,GetWindowText
則成員函式會複製控件內的文字,而不是複製標題。
這個成員函式會使 WM_GETTEXT
訊息傳送至 CWnd
物件。
範例
請參閱 CWnd::SetWindowText
的範例。
CWnd::GetWindowTextLength
傳回物件標題標題的 CWnd
長度。
int GetWindowTextLength() const;
傳回值
指定字元的文字長度,不包括任何 Null 終止字元。 如果不存在這類文字,則值為 0。
備註
如果 CWnd
是控件, GetWindowTextLength
成員函式會傳回控件內的文字長度,而不是標題。
這個成員函式會使 WM_GETTEXTLENGTH
訊息傳送至 CWnd
物件。
範例
請參閱 CWnd::SetWindowText
的範例。
CWnd::HideCaret
藉由從顯示畫面移除插入號來隱藏該插入號。
void HideCaret();
備註
雖然插入號已不再顯示,但可以使用成員函式再次 ShowCaret
顯示插入號。 隱藏插入號不會終結其目前圖形。
隱藏是累計的。 如果 HideCaret
已在一個數據列中呼叫五次, ShowCaret
則必須在顯示插入號之前呼叫成員函式五次。
CWnd::HiliteMenuItem
醒目提示或移除最上層功能表項的醒目提示或移除醒目提示。
BOOL HiliteMenuItem(
CMenu* pMenu,
UINT nIDHiliteItem,
UINT nHilite);
參數
pMenu
識別包含要反白顯示之專案的最上層功能表。
nIDHiliteItem
根據 參數的值 nHilite
,指定要反白顯示的功能表項。
nHilite
指定功能表項是反白顯示還是移除醒目提示。 它可以是 或與 MF_BYCOMMAND
或 MF_UNHILITE
MF_BYPOSITION
的組合MF_HILITE
。 這些值可以使用位 OR
運算符來結合。 這些值具有以下意義:
MF_BYCOMMAND
解nIDHiliteItem
譯為功能表項標識碼(預設解譯)。MF_BYPOSITION
解nIDHiliteItem
譯為功能表項以零起始的位移。MF_HILITE
醒目提示專案。 如果未指定此值,則會從專案中移除醒目提示。MF_UNHILITE
從專案移除醒目提示。
傳回值
指定功能表項是否已反白顯示。 如果專案已反白顯示,則為非零;否則為 0。
備註
MF_HILITE
和 MF_UNHILITE
旗標只能與這個成員函式搭配使用;不能與成員函式搭配CMenu::ModifyMenu
使用。
CWnd::HtmlHelp
呼叫此成員函式以叫用 HTMLHelp 應用程式。
virtual void HtmlHelp(
DWORD_PTR dwData,
UINT nCmd = 0x000F);
參數
dwData
指定其他數據。 所使用的值取決於 參數的值 nCmd
。
nCmd
指定要求的說明類型。 如需可能值的清單及其影響 dwData
參數的方式,請參閱 uCommand
Windows SDK 中 HTML 說明 API 參考中所述的參數。
備註
如需相關資訊,請參閱 CWinApp::HtmlHelp
。
CWnd::InitDynamicLayout
由架構呼叫以初始化視窗的動態配置。
void InitDynamicLayout();
備註
請勿直接呼叫這個方法。
CWnd::Invalidate
使的整個工作區失效 CWnd
。
void Invalidate(BOOL bErase = TRUE);
參數
bErase
指定更新區域內的背景是否要清除。
備註
下一 WM_PAINT
則訊息發生時,工作區會標示為繪製。 區域也可以在 或 ValidateRgn
成員函式發生ValidateRect
訊息之前WM_PAINT
進行驗證。
參數 bErase
會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bErase
為 TRUE
,則會在呼叫成員函式時 BeginPaint
清除背景;如果 bErase
為 FALSE
,背景會保持不變。 如果 bErase
為 TRUE
更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。
每當CWnd
更新區域不是空的,且該視窗的應用程式佇列中沒有其他訊息時,Windows 就會傳送WM_PAINT
訊息。
範例
請參閱 CWnd::UpdateWindow
的範例。
CWnd::InvalidateRect
將該矩形新增至 CWnd
更新區域,使指定矩形內的工作區失效。
void InvalidateRect(
LPCRECT lpRect,
BOOL bErase = TRUE);
參數
lpRect
指向 CRect
物件或 RECT
結構 ,其中包含要加入至更新區域的矩形(在用戶端座標中)。 如果 lpRect
為 NULL
,則會將整個工作區新增至區域。
bErase
指定更新區域內的背景是否要清除。
備註
無效的矩形以及更新區域中的所有其他區域,會在傳送下一 WM_PAINT
則訊息時標示為繪製。 無效的區域會在更新區域中累積,直到下一個WM_PAINT
呼叫發生時處理區域,或直到 或 ValidateRgn
成員函式驗證ValidateRect
區域為止。
參數 bErase
會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bErase
為 TRUE
,則會在呼叫成員函式時 BeginPaint
清除背景;如果 bErase
為 FALSE
,背景會保持不變。 如果 bErase
為 TRUE
更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。
每當CWnd
更新區域不是空的,且該視窗的應用程式佇列中沒有其他訊息時,Windows 就會傳送WM_PAINT
訊息。
CWnd::InvalidateRgn
藉由將工作區新增至 的目前更新區域,使指定區域內的 CWnd
工作區失效。
void InvalidateRgn(
CRgn* pRgn,
BOOL bErase = TRUE);
參數
pRgn
物件的指標 CRgn
,識別要加入至更新區域的區域。 區域假設有用戶端座標。 如果此參數為 NULL
,則會將整個工作區新增至更新區域。
bErase
指定更新區域內的背景是否要清除。
備註
無效的區域以及更新區域中的所有其他區域,會在下次傳送訊息時 WM_PAINT
標示為繪製。 無效的區域會累積在更新區域中,直到下一次WM_PAINT
傳送訊息時處理區域,或直到 或 ValidateRgn
成員函式驗證ValidateRect
區域為止。
參數 bErase
會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bErase
為 TRUE
,則會在呼叫成員函式時 BeginPaint
清除背景;如果 bErase
為 FALSE
,背景會保持不變。 如果 bErase
為 TRUE
更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。
每當CWnd
更新區域不是空的,且該視窗的應用程式佇列中沒有其他訊息時,Windows 就會傳送WM_PAINT
訊息。
指定的區域之前必須由其中一個區域函式建立。
CWnd::InvokeHelper
呼叫這個成員函式,以在 所wFlags
指定的內容中叫用 所dwDispID
指定的 ActiveX Control 方法或屬性。
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo,
... );
參數
dwDispID
指定所要叫用的屬性或方法。
wFlags
旗標,描述對 IDispatch::Invoke
的呼叫內容。
vtRet
指定傳回值的類型。 如需可能的值,請參閱 的一 COleDispatchDriver::InvokeHelper
節。
pvRet
將接收屬性值或傳回值的變數位址。 其必須符合 vtRet
所指定的類型。
pbParamInfo
指定以 null終止,並尾隨在 pbParamInfo
之後之參數類型的位元組的字串指標。 如需可能的值,請參閱 的一 COleDispatchDriver::InvokeHelper
節。
...
變數 參數清單,在中指定的 pbParamInfo
類型。
備註
pbParamInfo
參數會指定傳遞給方法或屬性的參數類型。 自變數的變數清單會在語法宣告中表示 ...
。
此函式會將參數 VARIANTARG
轉換成值,然後在 ActiveX 控件上叫用 IDispatch::Invoke
方法。 若呼叫 IDispatch::Invoke
失敗,此函式會擲回例外狀況。 如果傳回的 SCODE
(狀態代碼) 為 DISP_E_EXCEPTION
,則此函式會擲回 COleException
物件,否則會擲回 COleDispatchException
。IDispatch::Invoke
注意
這個函式應該只在代表 ActiveX 控制件的物件上 CWnd
呼叫。
如需搭配 ActiveX 控制件容器使用此成員函式的詳細資訊,請參閱 ActiveX 控件容器:在 ActiveX 控制件容器中設計 ActiveX 控制件一文。
CWnd::IsChild
指出所 pWnd
指定的視窗是子視窗或其他的 CWnd
直接子代。
BOOL IsChild(const CWnd* pWnd) const;
參數
pWnd
識別要測試的視窗。
傳回值
指定函式的結果。 如果 所 pWnd
識別的視窗是 的 CWnd
子視窗,則值為非零,否則為 0。
備註
如果CWnd
對象位於從原始彈出視窗到子視窗的父視窗鏈結中,則子視窗是的直接子CWnd
代。
CWnd::IsD2DSupportEnabled
判斷是否啟用 D2D 支援。
BOOL IsD2DSupportEnabled();
傳回值
TRUE
如果已啟用此功能,則為 ;否則 FALSE
為 。
CWnd::IsDialogMessage
呼叫這個成員函式,以判斷指定的訊息是否適用於無模式對話方塊;如果是,則此函式會處理訊息。
BOOL IsDialogMessage(LPMSG lpMsg);
參數
lpMsg
指向 MSG
包含要檢查之訊息的結構。
傳回值
指定成員函式是否已處理指定的訊息。 如果訊息已處理,則為非零;否則為 0。 如果傳回為 0,請呼叫 CWnd::PreTranslateMessage
基類的成員函式來處理訊息。 在成員函式的覆寫中 CWnd::PreTranslateMessage
,程式代碼看起來像這樣:
BOOL CAboutDlg::PreTranslateMessage(MSG *pMsg)
{
if (IsDialogMessage(pMsg))
return TRUE;
else
return CDialog::PreTranslateMessage(pMsg);
}
備註
當函 IsDialogMessage
式處理訊息時,它會檢查鍵盤訊息,並將其轉換成對應對話框的選取命令。 例如,TAB 鍵會選取下一個控件或控件群組,而向下鍵會選取群組中的下一個控件。
您不得將 所 IsDialogMessage
處理的訊息傳遞至 TranslateMessage
或 DispatchMessage
Windows 函式,因為它已經處理過。
CWnd::IsDlgButtonChecked
判斷按鈕控件旁邊是否有複選標記。
UINT IsDlgButtonChecked(int nIDButton) const;
參數
nIDButton
指定按鈕控制件的整數識別碼。
傳回值
如果已檢查指定的控件,則為非零,如果未核取,則為 0。 只能核取單選按鈕和複選框。 針對三個狀態按鈕,如果按鈕不確定,則傳回值可以是 2。 這個成員函式會針對按鈕傳回 0。
備註
如果按鈕是三狀態控件,則成員函式會判斷它是否呈現暗灰色、已核取或兩者都沒有。
CWnd::IsDynamicLayoutEnabled
決定是否在這個視窗上啟用動態配置。 如果啟用動態配置時,則使用者可在調整父視窗大小時變更子視窗的位置與大小。
BOOL IsDynamicLayoutEnabled() const;
傳回值
TRUE
如果已啟用動態配置,則為 ;否則 FALSE
為 。
備註
CWnd::IsIconic
指定是否 CWnd
最小化 (圖示)。
BOOL IsIconic() const;
傳回值
如果 CWnd
最小化則為非零,否則為 0。
範例
void CAboutDlg::OnPaint()
{
// This code, normally emitted by the Application Wizard for a dialog-
// based project for the dialog's WM_PAINT handler, runs only if the
// window is iconic. The window erases the icon's area, then
// paints the icon referenced by m_hIcon.
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
CWnd::IsTouchWindow
指定 CWnd
是否有觸控支援。
BOOL IsTouchWindow() const;
傳回值
TRUE
如果 CWnd
具有觸控支援,則為 ,否則 FALSE
為 。
備註
CWnd::IsWindowEnabled
指定是否 CWnd
啟用滑鼠和鍵盤輸入。
BOOL IsWindowEnabled() const;
傳回值
如果 CWnd
已啟用,則為非零;否則為 0。
範例
//change the background color of an edit control on the dialog
HBRUSH CMyDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_MYEDIT)
{
if (pWnd->IsWindowEnabled())
{
// Red brush for the background...
pDC->SetBkColor(RGB(255, 0, 0));
// m_pRedBrush is the CBrush object initialized with a red brush
// using CreateSolidBrush
return (HBRUSH)m_RedBrush.GetSafeHandle();
}
else
{
// Blue brush for the background...
pDC->SetBkColor(RGB(0, 0, 255));
// m_pBlueBrush is the CBrush object initialized with a blue
// brush using CreateSolidBrush
return (HBRUSH)m_BlueBrush.GetSafeHandle();
}
}
return hbr;
}
CWnd::IsWindowVisible
決定指定視窗的可見性狀態。
BOOL IsWindowVisible() const;
傳回值
如果 CWnd
為可見, WS_VISIBLE
則為非零值(已設定樣式位,且父視窗為可見)。 因為傳回值反映樣式位的狀態 WS_VISIBLE
,即使其他視窗完全遮蔽,傳回值也可能是非零 CWnd
值。
備註
視窗擁有樣式位所表示的 WS_VISIBLE
可見性狀態。 當這個樣式位是以成員函式的呼叫 ShowWindow
來設定時,只要視窗已設定樣式位,就會顯示視窗,而視窗的後續繪圖就會顯示。
如果視窗是由其他視窗所覆蓋,或是由其父視窗裁剪,則不會顯示具有 WS_VISIBLE
樣式的視窗的任何繪圖。
範例
// This example uses the CWnd::IsWindowVisible() function to
// determine if a dialog box is visible. If it is not, it calls
// CWnd::ShowWindow with the SW_SHOWNORMAL command.
void CMainFrame::DisplayModeless()
{
if(!m_Modeless.IsWindowVisible())
{
m_Modeless.ShowWindow(SW_SHOWNORMAL);
}
}
// This example uses the CWnd::IsWindowVisible() function to
// determine if a dialog box is visible. If it is, it calls
// CWnd::ShowWindow with the SW_HIDE command.
void CMainFrame::HideModeless()
{
if(m_Modeless.IsWindowVisible())
{
m_Modeless.ShowWindow(SW_HIDE);
}
}
CWnd::IsZoomed
判斷是否已 CWnd
最大化。
BOOL IsZoomed() const;
傳回值
如果 CWnd
最大化,則為非零;否則為 0。
CWnd::KillTimer
從先前呼叫 所識別 nIDEvent
的 SetTimer
定時器事件終止。
BOOL KillTimer(UINT_PTR nIDEvent);
參數
nIDEvent
傳遞給 SetTimer
的定時器事件值。
傳回值
指定函式的結果。 如果事件已終止,此值為非零值。 如果 KillTimer
成員函式找不到指定的定時器事件,則為 0。
備註
與定時器相關聯的擱 WM_TIMER
置訊息不會從消息佇列中移除。
範例
請參閱 CWnd::SetTimer
的範例。
CWnd::LoadDynamicLayoutResource
由架構呼叫以從資源檔載入動態配置資訊。
BOOL LoadDynamicLayoutResource(LPCTSTR lpszResourceName);
參數
lpszResourceName
包含此視窗所需之動態配置資訊的資源名稱。
傳回值
如果函式成功,則為非零。 如果發生失敗,則為 0。
備註
請勿直接呼叫這個方法。
CWnd::LockWindowUpdate
停用指定視窗中的繪圖。
BOOL LockWindowUpdate();
傳回值
如果函式成功,則為非零。 如果發生失敗,或函式已用來鎖定另一個視窗, LockWindowUpdate
則為0。
備註
無法移動鎖定的視窗。 一次只能鎖定一個視窗。 若要解除鎖定使用 LockWindowUpdate
鎖定的視窗,請呼叫 UnlockWindowUpdate
。
如果具有鎖定視窗的應用程式(或任何鎖定的子視窗)呼叫 GetDC
、 GetDCEx
或 BeginPaint
Windows 函式,則呼叫的函式會傳回其可見區域空白的裝置內容。 直到應用程式藉由呼叫 UnlockWindowUpdate
成員函式來解除鎖定窗口為止。
當視窗更新鎖定時,系統會追蹤與鎖定視窗相關聯的裝置內容之任何繪圖作業的周框矩形。 重新啟用繪圖時,此周框會在鎖定的視窗中及其子視窗失效,以強制最終 WM_PAINT
訊息更新畫面。 如果視窗更新鎖定時未發生繪圖,則不會有任何區域失效。
成員 LockWindowUpdate
函式不會讓指定的視窗不可見,也不會清除 WS_VISIBLE
樣式位。
CWnd::m_hWnd
附加至這個 CWnd
之 Windows 視窗的句柄。
HWND m_hWnd;
備註
數據 m_hWnd
成員是類型的 HWND
公用變數。
CWnd::MapWindowPoints
將一組點從 CWnd
的座標空間轉換 (對應) 至另一個視窗的座標空間。
void MapWindowPoints(
CWnd* pwndTo,
LPRECT lpRect) const;
void MapWindowPoints(
CWnd* pwndTo,
LPPOINT lpPoint,
UINT nCount) const;
參數
pwndTo
識別要轉換點的視窗。 如果此參數為 NULL
,則會將點轉換成螢幕座標。
lpRect
指定要轉換其點的矩形。 此函式的第一個版本僅適用於 Windows 3.1 和更新版本。
lpPoint
結構的陣列POINT
指標,其中包含要轉換的一組點。
nCount
指定所指向lpPoint
之陣列中的結構數目POINT
。
CWnd::MessageBox
建立並顯示一個視窗,其中包含應用程式提供的訊息和標題,以及消息框樣式清單中描述的預先定義圖示和按鈕的組合。
int MessageBox(
LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK);
參數
lpszText
CString
指向包含要顯示之訊息的物件或以 Null 結束的字串。
lpszCaption
指向 CString
要用於消息框標題的物件或 Null 終止字串。 如果 lpszCaption
為 NULL
,則會使用預設標題 「Error」。
nType
指定消息框的內容和行為。
傳回值
此方法會 MessageBox
利用 Windows SDK 中所定義的函式。 這個方法會傳回呼叫此函式的結果。
備註
使用全域函式,而不是此成員函 AfxMessageBox
式,在您的應用程式中實作消息框。
下列顯示可在訊息框中使用的各種系統圖示:
Icon | Macro |
---|---|
MB_ICONHAND 、MB_ICONSTOP 和 MB_ICONERROR |
|
MB_ICONQUESTION | |
MB_ICONEXCLAMATION和MB_ICONWARNING | |
MB_ICONASTERISK和MB_ICONINFORMATION |
範例
void CMainFrame::OnDisplayErrorMessage()
{
// This displays a message box with the title "Error"
// and the message "Help, Something went wrong."
// The error icon is displayed in the message box, along with
// an OK button.
MessageBox(_T("Help, Something went wrong."), _T("Error"),
MB_ICONERROR | MB_OK);
}
CWnd::ModifyStyle
呼叫這個成員函式以修改窗口的樣式。
BOOL ModifyStyle(
DWORD dwRemove,
DWORD dwAdd,
UINT nFlags = 0);
參數
dwRemove
指定要在樣式修改期間移除的視窗樣式。
dwAdd
指定要在樣式修改期間新增的視窗樣式。
nFlags
要傳遞至 SetWindowPos
的旗標,如果 SetWindowPos
不應該呼叫,則為零。 預設值為 0。 如需預設旗標的清單,請參閱一節。
傳回值
如果已成功修改樣式,則為非零;否則為 0。
備註
要加入或移除的樣式可以使用位 OR (|
) 運算符來結合。 如需可用視窗樣式的相關資訊,請參閱 Windows SDK 中的視窗樣式主題CreateWindow
和 。
如果 nFlags
為非零值, ModifyStyle
請呼叫 Windows API 函 SetWindowPos
式,並結合 nFlags
下列四個預設旗標來重新繪製視窗:
SWP_NOSIZE
保留目前的大小。SWP_NOMOVE
保留目前的位置。SWP_NOZORDER
保留目前的 Z 順序。SWP_NOACTIVATE
不會啟動視窗。
若要修改視窗的延伸樣式,請參閱 ModifyStyleEx
。
注意
對於某些控制項中的某些樣式( ES_READONLY
例如,編輯控制件中的樣式), ModifyStyle
可能無法正確變更樣式,因為控件可能需要執行特殊的內部處理。 在這些情況下,將會有對應的訊息來變更樣式( EM_SETREADONLY
在所述的範例中)。
範例
// This example adds the WS_CLIPCHILDREN style to the window.
// No Styles are removed from the window.
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
ModifyStyle(0, WS_CLIPCHILDREN);
}
CWnd::ModifyStyleEx
呼叫這個成員函式以修改視窗的延伸樣式。
BOOL ModifyStyleEx(
DWORD dwRemove,
DWORD dwAdd,
UINT nFlags = 0);
參數
dwRemove
指定要在樣式修改期間移除的延伸樣式。
dwAdd
指定要在樣式修改期間加入的擴充樣式。
nFlags
要傳遞至 SetWindowPos
的旗標,如果 SetWindowPos
不應該呼叫,則為零。 預設值為 0。 如需預設旗標的清單,請參閱一節。
傳回值
如果已成功修改樣式,則為非零;否則為 0。
備註
要加入或移除的樣式可以使用位 OR (|
) 運算符來結合。 如需可用擴充樣式的詳細資訊,請參閱本書和 CreateWindowEx
Windows SDK 中的擴充視窗樣式主題
如果 nFlags
為非零值, ModifyStyleEx
請呼叫 Windows API 函 SetWindowPos
式,並結合 nFlags
下列四個預設旗標來重新繪製視窗:
SWP_NOSIZE
保留目前的大小。SWP_NOMOVE
保留目前的位置。SWP_NOZORDER
保留目前的 Z 順序。SWP_NOACTIVATE
不會啟動視窗。
若要使用一般視窗樣式修改視窗,請參閱 ModifyStyle
。
範例
// This example would make the dialog box transparent by
// changing the dialog window's extended styles.
int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
ModifyStyleEx(0, WS_EX_TRANSPARENT);
return 0;
}
CWnd::MoveWindow
變更位置和維度。
void MoveWindow(
int x,
int y,
int nWidth,
int nHeight,
BOOL bRepaint = TRUE);
void MoveWindow(
LPCRECT lpRect,
BOOL bRepaint = TRUE);
參數
x
指定左側 CWnd
的新位置。
y
指定 頂端 CWnd
的新位置。
nWidth
指定的新寬度 CWnd
。
nHeight
指定的新高度 CWnd
。
bRepaint
指定是否 CWnd
要重新繪製。 如果TRUE
為 ,CWnd
則會OnPaint
像往常一WM_PAINT
樣在其訊息處理程式中接收訊息。 如果此參數為 FALSE
,則不會重新繪製任何種類的 。 這適用於工作區、非工作區區域(包括標題和滾動條),以及因移動而發現 CWnd
父視窗的任何部分。 當此參數為 FALSE
時,應用程式必須明確失效或重新繪製任何必須重新繪製的 CWnd
和 父視窗部分。
lpRect
指定 CRect
新大小和位置的物件或 RECT
結構 。
備註
對於最上層 CWnd
物件, x
和 y
參數會相對於畫面左上角。 對於子 CWnd
對象,它們相對於父視窗工作區的左上角。
函式 MoveWindow
會傳送 WM_GETMINMAXINFO
訊息。 處理此訊息可讓您 CWnd
修改最大和最小可能視窗的預設值。 如果成員函式的參數 MoveWindow
超過這些值,則可以將值取代為處理程式中的 WM_GETMINMAXINFO
最小值或最大值。
範例
請參閱 CWnd::ClientToScreen
的範例。
CWnd::NotifyWinEvent
表示發生預先定義之事件的系統。 如果任何用戶端應用程式已註冊事件的攔截函式,系統就會呼叫客戶端的攔截函式。
void NotifyWinEvent(
DWORD event,
LONG idObjectType,
LONG idObject);
參數
event
指定發生的事件。 此值必須是其中 一個事件常數。
idObjectType
識別產生事件的物件種類。 此值是其中一個預先定義的 物件標識碼 或自定義物件標識碼值。
idObject
識別事件是由物件或物件的子專案所產生。 如果此值為 CHILDID_SELF
,則事件是由物件本身所產生。 如果沒有,這個值就是產生事件之專案的子標識碼。
備註
此成員函式會模擬 函式的功能 NotifyWinEvent
,如 Windows SDK 中所述。
CWnd::OnActivate
架構會在物件啟動或停用時 CWnd
呼叫這個成員函式。
afx_msg void OnActivate(
UINT nState,
CWnd* pWndOther,
BOOL bMinimized);
參數
nState
指定 CWnd
正在啟動或停用 。 它可能是下列其中一個值:
WA_INACTIVE
視窗正在停用。WA_ACTIVE
視窗正透過滑鼠按兩下以外的某些方法啟動(例如,使用鍵盤介面來選取視窗)。WA_CLICKACTIVE
視窗正由滑鼠按兩下來啟動。
pWndOther
要啟動或停用之 CWnd
的指標。 指標可以是 NULL
,而且可能是暫時的。
bMinimized
指定所啟動或停用 的 CWnd
最小化狀態。 的值 TRUE
表示視窗最小化。
如果 TRUE
為 , CWnd
表示正在啟動,否則為停用。
備註
CWnd
如果物件以滑鼠按一下啟動,它也會接收OnMouseActivate
成員函式呼叫。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnActivateApp
架構會將此成員函式呼叫為要啟動之工作的所有最上層視窗,以及要停用之工作的所有最上層視窗。
afx_msg void OnActivateApp(
BOOL bActive,
DWORD dwThreadID);
參數
bActive
指定 CWnd
正在啟動或停用 。 TRUE
CWnd
表示正在啟動 。 FALSE
CWnd
表示正在停用 。
dwThreadID
指定線程標識碼的值。 如果 bActive
為 TRUE
, dwThreadID
則識別擁有所停用 之的 CWnd
線程。 如果 bActive
為 FALSE
, dwThreadID
則識別擁有所啟動之的 CWnd
線程。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnAmbientProperty
架構會呼叫這個成員函式,從包含 OLE 控制件的視窗取得環境屬性值。
virtual BOOL OnAmbientProperty(
COleControlSite* pSite,
DISPID dispid,
VARIANT* pvar);
參數
pSite
要求環境屬性之控件的月臺指標。
dispid
所要求環境屬性的分派標識碼。
pvar
呼叫端配置的 VARIANT
結構的指標,其會透過該結構傳回環境屬性值。
傳回值
TRUE
如果支援環境屬性,則為 ; FALSE
如果不是,則為 。
備註
覆寫此函式,將 OLE 控制項容器傳回的預設環境屬性值變更為其控件。 覆寫函式未處理的任何環境屬性要求,都應該轉送至基類實作。
CWnd::OnAppCommand
當使用者產生應用程式命令事件時,架構會呼叫這個成員函式。 當使用者按下應用程式命令按鈕或輸入應用程式命令金鑰時,就會發生這類事件。
afx_msg void OnAppCommand(
CWnd* pWnd,
UINT nCmd,
UINT nDevice,
UINT nKey);
參數
pWnd
[in] CWnd
物件的指標,代表使用者按下命令按鈕或按下命令鍵的視窗。 此視窗可以是接收訊息之視窗的子視窗。
nCmd
[in]指出應用程式命令。 如需可能值的清單,請參閱 參數WM_APPCOMMAND
區lParam
段底下的cmd
命令。
nDevice
[in]產生輸入事件的輸入裝置。 如需可能值的清單,請參閱 的 參數WM_APPCOMMAND
區段lParam
底下的uDevice
裝置。
nKey
[in]指出已關閉的任何虛擬密鑰,例如 CTRL 鍵或滑鼠左鍵。 如需可能值的清單,請參閱 參數WM_APPCOMMAND
區段底下的dwKeys
lParam
索引鍵。 如需詳細資訊,請參閱關於滑鼠輸入中的子標題。
備註
此方法會 WM_APPCOMMAND
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnAskCbFormatName
當剪貼簿包含格式的數據句柄 CF_OWNERDISPLAY
時,架構會呼叫這個成員函式(也就是當剪貼簿擁有者會顯示剪貼簿內容時)。
afx_msg void OnAskCbFormatName(
UINT nMaxCount,
LPTSTR lpszString);
參數
nMaxCount
指定要複製的位元組數目上限。
lpszString
指向要儲存格式名稱複本的緩衝區。
備註
剪貼簿擁有者應該為其格式提供名稱。
覆寫這個成員函式,並將格式的名稱 CF_OWNERDISPLAY
複製到指定的緩衝區,而不會超過指定的位元組數目上限。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCancelMode
架構會呼叫此成員函式,以通知 CWnd
取消任何內部模式。
afx_msg void OnCancelMode();
備註
CWnd
如果物件具有焦點,則會在顯示對話框或消息框時呼叫其OnCancelMode
成員函式。 這可讓您 CWnd
取消滑鼠擷取等模式。
默認實作會呼叫 Windows 函式來 ReleaseCapture
回應。 覆寫衍生類別中的這個成員函式以處理其他模式。
CWnd::OnCaptureChanged
架構會呼叫這個成員函式,以通知視窗遺失滑鼠擷取。
afx_msg void OnCaptureChanged(CWnd* pWnd);
參數
pWnd
取得滑鼠擷取之視窗的指標
備註
視窗會接收此訊息,即使它呼叫 ReleaseCapture
本身也一樣。 應用程式不應該嘗試設定滑鼠擷取以回應此訊息。 收到此訊息時,視窗應該視需要重新繪製本身,以反映新的滑鼠擷取狀態。
如需 Windows 函式的相關信息, ReleaseCapture
請參閱 Windows SDK。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnChangeCbChain
架構會針對剪貼簿查看器鏈結中的每個視窗呼叫這個成員函式,以通知視窗正從鏈結中移除。
afx_msg void OnChangeCbChain(
HWND hWndRemove,
HWND hWndAfter);
參數
hWndRemove
指定要從剪貼簿查看器鏈結中移除的視窗句柄。
hWndAfter
指定從剪貼簿查看器鏈結中移除之視窗後面的視窗句柄。
備註
接收呼叫的每個CWnd
物件都應該使用 SendMessage
Windows 函式,將訊息傳送WM_CHANGECBCHAIN
至剪貼簿查看器鏈結中的下一個視窗(由 傳回的SetClipboardViewer
句OnChangeCbChain
柄)。 如果 hWndRemove
是鏈結中的下一個視窗,則 指定的 hWndAfter
視窗會變成下一個視窗,並將剪貼簿訊息傳遞給它。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnChangeUIState
應變更使用者介面 (UI) 狀態時呼叫。
afx_msg void OnChangeUIState(
UINT nAction,
UINT nUIElement);
參數
nAction
指定要採取的動作。 可以是下列值之一:
UIS_CLEAR
UI 狀態元素 (由nUIElement
指定) 應隱藏。UIS_INITIALIZE
UI 狀態元素 (由nUIElement
指定) 應該根據最後一個輸入事件來變更。 如需詳細資訊,請參閱 的 一WM_CHANGEUISTATE
節。UIS_SET
UI 狀態元素 (由nUIElement
指定) 應該可見。
nUIElement
指定受影響的UI狀態元素或控件的樣式。 可以是下列值之一:
UISF_HIDEACCEL
鍵盤快捷方式。UISF_HIDEFOCUS
焦點指標。UISF_ACTIVE
Windows XP:控制項應該以用於使用中控件的樣式繪製。
備註
此成員函式會模擬訊息的功能 WM_CHANGEUISTATE
,如 Windows SDK 中所述。
CWnd::OnChar
當擊鍵轉譯為非系統字元時,架構會呼叫這個成員函式。
afx_msg void OnChar(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
包含索引鍵的字元碼值。
nRepCnt
包含重複計數,當使用者按住按鍵時,會重複擊鍵的次數。
nFlags
包含掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | 意義 |
---|---|
0-15 | 指定重複計數。 值是使用者按住按鍵而重複擊鍵的次數。 |
16-23 | 指定掃描碼。 此值取決於原始裝置製造商 (OEM) |
24 | 指定按鍵是否為擴充按鍵,例如增強型 101 鍵或 102 鍵鍵盤上出現的右鍵 ALT 鍵和 CTRL 鍵。 如果它是擴充索引鍵,則值為 1;否則為 0。 |
25-28 | Windows 在內部使用。 |
29 | 指定內容程序代碼。 如果按下按鍵時按住 ALT 鍵,則值為 1;否則,值為 0。 |
30 | 指定先前的索引鍵狀態。 如果索引鍵在傳送訊息之前關閉,則值為 1,如果機碼已啟動,則為 0。 |
31 | 指定轉換狀態。 如果放開按鍵,則值為 1,如果按下按鍵則為 0。 |
備註
在成員函式和 OnKeyUp
呼叫成員函式之後 OnKeyDown
,會呼叫此函式。 OnChar
包含按下或放開的鍵盤按鍵值。
由於按下按鍵和 OnChar
產生的呼叫之間不一定有一對一的對應,因此中的 nFlags
資訊通常不適用於應用程式。 中的 nFlags
資訊只適用於最近對成員函式的呼叫 OnKeyUp
,或 OnKeyDown
呼叫 之前 OnChar
的成員函式。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 其他一些鍵盤可能支援 中的 nFlags
擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCharToItem
當具有 LBS_WANTKEYBOARDINPUT
樣式的清單框傳送其擁有者 WM_CHARTOITEM
回應 WM_CHAR
訊息時呼叫。
afx_msg int OnCharToItem(
UINT nChar,
CListBox* pListBox,
UINT nIndex);
參數
nChar
指定使用者按下的按鍵值。
pListBox
指定清單框的指標。 這可能是暫時的。
nIndex
指定目前的插入號位置。
傳回值
架構會呼叫這個成員函式,以指定應用程式回應呼叫時所執行的動作。 -2 的傳回值表示應用程式會處理選取專案的所有層面,而且清單框不想要採取任何進一步的動作。 -1 的傳回值表示清單框應該執行預設動作以響應擊鍵。 傳回值 0 或更新值會指定清單框中專案以零起始的索引,並指出清單框應該對指定項目執行按鍵的預設動作。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnChildActivate
CWnd
如果物件是多個文件介面 (MDI) 子視窗,OnChildActivate
當使用者按兩下視窗的標題列或視窗啟用、移動或調整大小時,架構就會呼叫架構。
afx_msg void OnChildActivate();
CWnd::OnChildNotify
這個視窗的父視窗收到套用至此視窗的通知訊息時,會呼叫此成員函式。
virtual BOOL OnChildNotify(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
參數
message
傳送至父視窗的 Windows 訊息編號。
wParam
與 訊息相關聯的 wparam 。
lParam
與 訊息相關聯的 lparam 。
pLResult
要從父視窗程序傳回之值的指標。 如果沒有預期的傳回值,這個指標將會 NULL
是 。
傳回值
如果此視窗負責處理傳送至其父代的訊息,則為非零;否則為 0。
備註
永遠不要直接呼叫這個成員函式。
這個成員函式的預設實作會傳回 0,這表示父系應該處理訊息。
覆寫此成員函式,以擴充控件回應通知訊息的方式。
CWnd::OnClipboardUpdate
架構會在剪貼簿的內容變更時呼叫這個成員函式。
afx_msg void OnClipboardUpdate();
CWnd::OnClose
架構會將這個成員函式呼叫為 或 CWnd
應用程式要終止的訊號。
afx_msg void OnClose();
備註
預設實作會呼叫 DestroyWindow
。
CWnd::OnColorizationColorChanged
當非工作區的轉譯原則變更時,架構會呼叫這個成員。
afx_msg void OnColorizationColorChanged(
DWORD dwColorizationColor,
BOOL bOpacity);
參數
dwColorizationColor
[in]指定新的色彩標示色彩。 色彩格式是 0xAARRGGBB 格式的十六進位數位,其中四個元件中的每一個範圍從0x00到0xFF。 AA 元件是 Alpha 值,RR 是紅色,GG 為綠色,而 BB 為藍色。
bOpacity
[in] TRUE
如果新色彩與不透明度混合,則為 ; FALSE
如果不是,則為 。
備註
此方法會 WM_DWMNCRENDERINGCHANGED
接收 Windows SDK 中所述的通知訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCommand
當使用者從功能表選取專案、子控件傳送通知訊息或翻譯快捷鍵時,架構會呼叫這個成員函式。
virtual BOOL OnCommand(
WPARAM wParam,
LPARAM lParam);
參數
wParam
的低序字 wParam
會識別功能表項、控制項或快捷鍵的命令標識碼。 的高序字會 wParam
指定訊息是否來自控件的通知訊息。 如果訊息來自快捷鍵,則高階單字為 1。 如果訊息來自功能表,則高序單字為0。
lParam
識別如果訊息來自控件,則會傳送訊息的控件。 否則為 lParam
0。
傳回值
如果應用程式處理此訊息,則會傳回非零;否則為 0。
備註
OnCommand
會處理控件通知和 ON_COMMAND
專案的訊息對應,並呼叫適當的成員函式。
覆寫衍生類別中的這個成員函式來處理 WM_COMMAND
訊息。 除非呼叫基類 OnCommand
,否則覆寫不會處理訊息對應。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCompacting
當 Windows 偵測到超過 30 到 60 秒間隔的系統時間超過 12.5% 時,架構會針對所有最上層視窗呼叫這個成員函式。
afx_msg void OnCompacting(UINT nCpuTime);
參數
nCpuTime
指定 Windows 壓縮記憶體目前花費的 CPU 時間與執行其他作業所花費 CPU 時間的比例。 例如,8000h 代表壓縮記憶體所花費的 50% CPU 時間。
備註
這表示系統記憶體不足。
CWnd
當物件收到此呼叫時,它應該儘可能釋放記憶體,並考慮應用程式目前的活動層級,以及 Windows 中執行的應用程式總數。 應用程式可以呼叫 Windows 函式,以判斷有多少應用程式正在執行。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCompareItem
架構會呼叫這個成員函式,以指定子系排序擁有者繪製下拉式方塊或清單框中新項目的相對位置。
afx_msg int OnCompareItem(
int nIDCtl,
LPCOMPAREITEMSTRUCT lpCompareItemStruct);
參數
nIDCtl
傳送訊息之控件的 WM_COMPAREITEM
標識碼。
lpCompareItemStruct
包含數據結構長指標 COMPAREITEMSTRUCT
,其中包含下拉式方塊或清單框中兩個專案的標識碼和應用程式提供的數據。
傳回值
表示兩個項目的相對位置。 它可以是下列任何一個值:
值 | 意義 |
---|---|
-1 | 專案 1 在專案 2 之前排序。 |
0 | 專案1和專案 2 會排序相同。 |
1 | 專案 1 在專案 2 之後排序。 |
備註
如果使用 或 LBS_SORT
樣式建立CBS_SORT
下拉式或清單框,則每當應用程式新增專案時,Windows 就會傳送下拉式方塊或清單框擁有者WM_COMPAREITEM
訊息。
下拉式方塊或清單框中的兩個專案會在 所lpCompareItemStruct
指向的結構中COMPAREITEMSTRUCT
進行改革。 OnCompareItem
應該傳回值,指出哪些專案應該出現在另一個專案之前。 一般而言,Windows 會進行多次呼叫,直到它判斷新專案的確切位置為止。
hwndItem
如果結構的成員COMPAREITEMSTRUCT
屬於 CListBox
或 CComboBox
物件,則會CompareItem
呼叫適當類別的虛擬函式。 覆寫 CComboBox::CompareItem
或 CListBox::CompareItem
在您的衍生 CListBox
或 CComboBox
類別中執行項目比較。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCompositionChanged
當桌面視窗管理員 (DWM) 組合啟用或停用時,架構會針對所有最上層視窗呼叫這個成員函式。
afx_msg void OnCompositionChanged();
備註
此方法會 WM_DWMCOMPOSITIONCHANGED
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnContextMenu
當使用者在視窗中按兩下滑鼠右鍵(按兩下滑鼠右鍵)時,由架構呼叫。
afx_msg void OnContextMenu(
CWnd* pWnd,
CPoint pos);
參數
pWnd
用戶以滑鼠右鍵按下滑鼠的視窗句柄。 這可以是接收訊息之視窗的子視窗。 如需處理此訊息的詳細資訊,請參閱一節。
pos
游標的位置,在螢幕座標中,按兩下滑鼠時。
備註
您可以使用 來顯示操作功能表 TrackPopupMenu
,以處理此訊息。
如果您未顯示操作功能表,您應該將此訊息傳遞至函 DefWindowProc
式。 如果您的視窗是子視窗, DefWindowProc
請將訊息傳送至父代。 否則,如果指定的位置位於視窗的標題中, DefWindowProc
則會顯示預設操作功能表。
CWnd::OnCopyData
架構會呼叫此成員函式,以將數據從一個應用程式複製到另一個應用程式。
afx_msg BOOL OnCopyData(
CWnd* pWnd,
COPYDATASTRUCT* pCopyDataStruct);
參數
pWnd
傳送數據之物件的指標 CWnd
。
pCopyDataStruct
結構的指標 COPYDATASTRUCT
,其中包含要傳送的數據。
傳回值
如果接收的應用程式成功接受資料,則傳 TRUE
回 。 否則傳回 FALSE
。
備註
所傳遞的數據不得包含接收數據之應用程式無法存取之物件的指標或其他參考。
複製數據時,傳送進程的另一個線程不得變更數據。
接收應用程式應該考慮唯讀數據。 參數 pCopyDataStruct
所指向的結構只有在數據傳輸期間才有效;不過,接收應用程式不應該釋放與 結構相關聯的記憶體。
如果接收應用程式在傳回此函式之後需要存取數據,則必須將數據複製到本機緩衝區。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCreate
當應用程式要求呼叫 或 CreateEx
成員函式來建立 Windows 視窗時,架構會呼叫Create
這個成員函式。
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
參數
lpCreateStruct
指向 CREATESTRUCT
包含所建立對象相關信息的結構 CWnd
。
傳回值
OnCreate
必須傳回 0,才能繼續建立 CWnd
物件。 如果應用程式傳回 -1,視窗將會終結。
備註
CWnd
物件會在建立窗口之後收到這個呼叫,但在它變成可見之前。 OnCreate
會在或 CreateEx
成員函式傳回之前Create
呼叫。
覆寫此成員函式,以執行衍生類別的任何必要初始化。
結構 CREATESTRUCT
包含用來建立視窗的參數複本。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnCtlColor
架構會在即將繪製子控件時呼叫這個成員函式。
afx_msg HBRUSH OnCtlColor(
CDC* pDC,
CWnd* pWnd,
UINT nCtlColor);
參數
pDC
包含子視窗之顯示內容的指標。 可能是暫時的。
pWnd
包含要求色彩之控件的指標。 可能是暫時的。
nCtlColor
包含下列其中一個值,指定控制項的類型:
CTLCOLOR_BTN
按鈕控制件CTLCOLOR_DLG
對話方塊CTLCOLOR_EDIT
編輯控制件CTLCOLOR_LISTBOX
清單框控制件CTLCOLOR_MSGBOX
消息框CTLCOLOR_SCROLLBAR
滾動條控件CTLCOLOR_STATIC
靜態控件
傳回值
OnCtlColor
必須傳回筆刷的句柄,該筆刷要用於繪製控件背景。
備註
大部分的控件都會將此訊息傳送至其父代(通常是對話框),以準備 pDC
使用正確的色彩繪製控件。
若要變更文字色彩,請使用所需的紅色、綠色和藍色 (RGB) 值呼叫 SetTextColor
成員函式。
若要變更單行編輯控件的背景色彩,請在 和 CTLCOLOR_MSGBOX
訊息碼中CTLCOLOR_EDIT
設定筆刷句柄,並呼叫 CDC::SetBkColor
函式以響應程序CTLCOLOR_EDIT
代碼。
OnCtlColor
不會針對下拉式下拉式方塊的清單框呼叫 ,因為下拉式清單框實際上是下拉式方塊的子系,而不是視窗的子系。 若要變更下拉式清單框的色彩,請使用 參數中nCtlColor
檢查CTLCOLOR_LISTBOX
的 OnCtlColor
覆寫建立 CComboBox
。 在此處理程式中 SetBkColor
,成員函式必須用來設定文字的背景色彩。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。 若要將下列方法新增至對話框類別,請使用 [Visual Studio 屬性] 窗格來新增 的 WM_CTLCOLOR
訊息處理程式。 或者,您也可以手動將專案新增 ON_WM_CTLCOLOR()
至訊息對應。
範例
// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0));
// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);
// Return handle to our CBrush object
hbr = m_brush;
}
return hbr;
}
CWnd::OnDeadChar
當呼叫成員函式和OnKeyDown
成員函式時,OnKeyUp
架構會呼叫這個成員函式。
afx_msg void OnDeadChar(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定死鍵字元值。
nRepCnt
指定重複計數。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | Description |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 高序字組的低位元組。 |
8 | 擴充鍵,例如數字鍵臺上的函數鍵或索引鍵(如果它是擴充鍵則為 1,否則為 0)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1;否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在呼叫之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
備註
這個成員函式可用來指定死鍵的字元值。 死鍵是索引鍵,例如 umlaut (雙點) 字元,會與其他字元結合以形成複合字元。 例如,umlaut-O 字元是由死鍵、umlaut 和 O 鍵所組成。
應用程式通常會使用 OnDeadChar
來提供用戶關於按下每個按鍵的意見反應。 例如,應用程式可以在目前字元位置顯示輔色,而不移動插入號。
由於按下和 OnDeadChar
呼叫的按鍵之間不一定有一對一的對應,因此中的 nFlags
資訊通常不適用於應用程式。 中的 nFlags
資訊僅適用於最近呼叫 OnKeyUp
成員函式或 OnKeyDown
呼叫前面的 OnDeadChar
成員函式。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 其他一些鍵盤可能支援 中的 nFlags
擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnDeleteItem
架構會呼叫這個成員函式,通知擁有者繪製清單框或下拉式方塊的擁有者清單框或下拉式方塊,清單框或下拉式方塊已被 、CListBox::DeleteString
、 CComboBox::ResetContent
或 CListBox::ResetContent
移除CComboBox::DeleteString
。
afx_msg void OnDeleteItem(
int nIDCtl,
LPDELETEITEMSTRUCT lpDeleteItemStruct);
參數
nIDCtl
傳送訊息之控件的 WM_DELETEITEM
標識碼。
lpDeleteItemStruct
指定包含已刪除清單框專案相關信息之數據結構的長指標 DELETEITEMSTRUCT
。
備註
hwndItem
如果 結構的成員DELETEITEMSTRUCT
屬於下拉式方塊或清單框,則會DeleteItem
呼叫適當類別的虛擬函式。 DeleteItem
覆寫適當控件類別的成員函式,以刪除專案特定數據。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnDestroy
架構會呼叫這個成員函式,通知 CWnd
物件正在終結。
afx_msg void OnDestroy();
備註
OnDestroy
會在對象從畫面中移除之後 CWnd
呼叫。
OnDestroy
會先針對被摧毀的 CWnd
呼叫,然後針對的子視窗 CWnd
呼叫,因為它們被終結。 可以假設所有子視窗在執行時 OnDestroy
仍存在。
CWnd
如果被終結的對像是剪貼簿查看器鏈結的一部分(藉由呼叫SetClipboardViewer
成員函式所設定),CWnd
則 必須先呼叫ChangeClipboardChain
成員函式,再從OnDestroy
函式傳回之前,先從剪貼簿查看器鏈結中移除本身。
CWnd::OnDestroyClipboard
架構會在剪貼簿透過 Windows 函式的呼叫 EmptyClipboard
清空時,呼叫剪貼簿擁有者的這個成員函式。
afx_msg void OnDestroyClipboard();
CWnd::OnDeviceChange
架構會呼叫此成員函式,以通知應用程式或設備驅動器變更裝置或計算機的硬體組態。
afx_msg BOOL OnDeviceChange(
UINT nEventType,
DWORD_PTR dwData);
參數
nEventType
事件類型。 如需可用值的描述,請參閱一節
dwData
包含事件特定數據之結構的位址。 其意義取決於指定的事件。
備註
針對提供軟體控制功能的裝置,例如退出和鎖定,操作系統通常會傳送 DBT_DEVICEREMOVEPENDING
訊息,讓應用程式和設備驅動器正常地結束使用裝置。
如果操作系統強制移除裝置,在這麼做之前可能不會傳送 DBT_DEVICEQUERYREMOVE
訊息。
參數 nEvent
可以是下列其中一個值:
DBT_DEVICEARRIVAL
已插入裝置,現已可供使用。DBT_DEVICEQUERYREMOVE
要求移除裝置的許可權。 任何應用程式都可以拒絕此要求並取消移除。DBT_DEVICEQUERYREMOVEFAILED
已取消移除裝置的要求。DBT_DEVICEREMOVEPENDING
即將移除裝置。 無法拒絕。DBT_DEVICEREMOVECOMPLETE
裝置已移除。DBT_DEVICETYPESPECIFIC
裝置特定事件。DBT_CONFIGCHANGED
目前的組態已變更。DBT_DEVNODES_CHANGED
裝置節點已變更。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnDevModeChange
當使用者變更裝置模式設定時,架構會針對所有最上層 CWnd
物件呼叫這個成員函式。
afx_msg void OnDevModeChange(LPTSTR lpDeviceName);
參數
lpDeviceName
指向 Windows 初始化檔案中指定的裝置名稱。 WIN.INI
備註
處理 WM_DEVMODECHANGE
訊息的應用程式可能會重新初始化其裝置模式設定。 使用 Windows ExtDeviceMode
函式來儲存和還原裝置設定的應用程式通常不會處理此函式。
當使用者從 控制台 變更預設印表機時,不會呼叫此函式。 在此情況下,會呼叫 函 OnWinIniChange
式。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnDrawClipboard
架構會在剪貼簿內容變更時,針對剪貼簿查看器鏈結中的每個視窗呼叫這個成員函式。
afx_msg void OnDrawClipboard();
備註
只有藉由呼叫 SetClipboardViewer
成員函式來加入剪貼簿查看器鏈結的應用程式需要回應此呼叫。
每個接收呼叫的 OnDrawClipboard
視窗都應該呼叫 SendMessage
Windows 函式,將訊息傳遞至剪貼簿查看器鏈結中的下一個 WM_DRAWCLIPBOARD
視窗。 下一個視窗的句柄是由 SetClipboardViewer
成員函式傳回;它可能會修改以響應 OnChangeCbChain
成員函式呼叫。
CWnd::OnDrawIconicThumbnailOrLivePreview
需要取得點陣圖,在 Windows 7 索引標籤上顯示為縮圖時,或顯示在用戶端上以查看應用程式時,由架構呼叫。
virtual void OnDrawIconicThumbnailOrLivePreview(
CDC& dc,
CRect rect,
CSize szRequiredThumbnailSize,
BOOL bIsThumbnail,
BOOL& bAlphaChannelSet);
參數
dc
指定裝置內容。
rect
指定要呈現的區域周框。
szRequiredThumbnailSize
指定目標縮圖的大小。 如果 bIsThumbnail
為 FALSE
,則應該忽略 。
bIsThumbnail
指定這個方法是針對圖示縮圖或即時預覽呼叫 (查看)。
bAlphaChannelSet
[out]勾選取dc
位陣圖的 Alpha 色板,請將它TRUE
設定為 。
備註
覆寫衍生類別中的這個方法,並在指定的裝置內容上繪製,以自定義縮圖和查看。 如果 bThumbnail
為 TRUE
, szRequiredThumbnailSize
則可以忽略 。 在此情況下,您應該注意繪製完整大小的點陣圖(也就是涵蓋整個工作區的點陣圖)。 裝置內容 (dc
) 隨附選取的 32 位位元陣圖。 默認實作會使用PRF_CLIENT
、 PRF_CHILDREN
和 PRF_NONCLIENT
旗標傳送WM_PRINT
至此視窗。
CWnd::OnDrawItem
當控件或功能表的視覺層面變更時,架構會呼叫這個成員函式,以取得擁有者繪製按鈕控件、下拉式方塊控件、清單框控件或功能表的擁有者。
afx_msg void OnDrawItem(
int nIDCtl,
LPDRAWITEMSTRUCT lpDrawItemStruct);
參數
nIDCtl
包含傳送訊息之控件的 WM_DRAWITEM
標識碼。 如果功能表傳送訊息, nIDCtl
則包含 0。
lpDrawItemStruct
指定數據結構的長指標 DRAWITEMSTRUCT
,其中包含要繪製之專案的相關信息,以及所需的繪圖類型。
備註
結構 itemAction
的成員 DRAWITEMSTRUCT
會定義要執行的繪圖作業。 此成員中的數據可讓控件的擁有者判斷所需的繪圖動作。
從處理此訊息傳回之前,應用程式應確定結構成員所 hDC
識別的 DRAWITEMSTRUCT
裝置內容會還原為默認狀態。
hwndItem
如果成員屬於 CButton
、CMenu
、 CListBox
或 CComboBox 物件,則會DrawItem
呼叫適當類別的虛擬函式。 DrawItem
覆寫適當控件類別的成員函式以繪製專案。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnDropFiles
當使用者將滑鼠左鍵放開至已卸除檔案收件者的視窗上時,架構會呼叫這個成員函式。
afx_msg void OnDropFiles(HDROP hDropInfo);
參數
hDropInfo
描述已卸除檔案之內部數據結構的指標。 、 DragQueryFile
和 DragQueryPoint
Windows 函式會使用此DragFinish
句柄來擷取已卸除檔案的相關信息。
備註
一般而言,衍生類別的設計訴求是支援卸除的檔案,而且會在視窗建構期間自行註冊。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEnable
當應用程式變更物件的啟用狀態 CWnd
時,架構會呼叫這個成員函式。
afx_msg void OnEnable(BOOL bEnable);
參數
bEnable
指定 CWnd
物件是否已啟用或停用。 如果 CWnd
已開啟 ,則此參數TRUE
為 ,如果 CWnd
已停用,則FALSE
為 。
備註
OnEnable
會在 EnableWindow
成員函式傳回之前呼叫,但在窗口啟用狀態 (WS_DISABLED
樣式位) 變更之後。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEndSession
架構會在 CWnd
對象從 OnQueryEndSession
成員函式呼叫傳回非零值之後,呼叫這個成員函式。
afx_msg void OnEndSession(BOOL bEnding);
參數
bEnding
指定工作階段是否正在結束。 如果 TRUE
工作階段正在結束,則為 ,否則 FALSE
為 。
備註
呼叫 OnEndSession
會 CWnd
通知物件會話是否實際結束。
如果 bEnding
為 TRUE
,Windows 可以在所有應用程式從處理此呼叫傳回之後隨時終止。 因此,讓應用程式在內 OnEndSession
執行終止所需的所有工作。
當會話結束時,您不需要呼叫 DestroyWindow
成員函式或 PostQuitMessage
Windows 函式。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEnterIdle
架構會呼叫這個成員函式,通知應用程式主視窗程式模式對話框或功能表進入閑置狀態。
afx_msg void OnEnterIdle(
UINT nWhy,
CWnd* pWho);
參數
nWhy
指定訊息是對話框的結果或正在顯示的功能表。 這個參數可以是下列其中一個 值:
MSGF_DIALOGBOX
系統閑置,因為正在顯示對話方塊。MSGF_MENU
系統閑置,因為功能表正在顯示。
pWho
指定對話框的指標(如果 nWhy
為 ),或包含顯示功能表的視窗(如果 nWhy
為 MSGF_DIALOGBOX
MSGF_MENU
)。 此指標可能是暫時的,不應該儲存以供日後使用。
備註
模式對話框或功能表會在處理一或多個先前的訊息之後,在其佇列中等候訊息時進入閑置狀態。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEnterMenuLoop
架構會在輸入功能表強制回應迴圈時呼叫這個成員函式。
afx_msg void OnEnterMenuLoop(BOOL bIsTrackPopupMenu);
參數
bIsTrackPopupMenu
指定所涉及的功能表是否為快捷功能表。 如果函式成功,則具有非零值;否則為 0。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEnterSizeMove
架構會在受影響的視窗進入移動或重設大小模式循環之後一次呼叫這個成員函式。
afx_msg void OnEnterSizeMove();
備註
此方法會 WM_ENTERSIZEMOVE
接收 Windows SDK 中所述的通知。
當使用者按兩下視窗的標題列或重設大小框線時,或視窗將訊息傳遞 WM_SYSCOMMAND
至 CWnd::DefWindowProc
函式,以及 該訊息的 wParam 參數指定 SC_MOVE
或 SC_SIZE
時,視窗會進入移動或重設大小模式迴圈。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnEraseBkgnd
架構會在 CWnd
物件背景需要清除時呼叫這個成員函式(例如,重設大小時)。
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
參數
pDC
指定 device-context 物件。
傳回值
如果清除背景,則為非零;否則為 0。
備註
呼叫它以準備無效的區域進行繪製。
默認實作會使用視窗類別背景筆刷,清除視窗類別結構成員所 hbrBackground
指定的背景。
hbrBackground
如果成員為 NULL
,則覆寫的 OnEraseBkgnd
版本應該會清除背景色彩。 您的版本也應該先呼叫UnrealizeObject
筆刷,然後選取筆刷,將預定筆刷的原點與CWnd
座標對齊。
覆 OnEraseBkgnd
寫應該傳回非零,以回應 WM_ERASEBKGND
它是否處理訊息並清除背景;這表示不需要進一步清除。 如果傳回 0,視窗會保持標示為需要清除。 (通常,這表示 fErase
結構的成員 PAINTSTRUCT
會是 TRUE
。
Windows 假設背景是以對應模式計算 MM_TEXT
。 如果裝置內容使用任何其他對應模式,則清除的區域可能不在工作區的可見部分內。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnExitMenuLoop
架構會在功能表強制回應循環結束時呼叫這個成員函式。
afx_msg void OnExitMenuLoop(BOOL bIsTrackPopupMenu);
參數
bIsTrackPopupMenu
指定所涉及的功能表是否為快捷功能表。 如果函式成功,則具有非零值;否則為 0。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnExitSizeMove
架構會在受影響的窗口結束移動或重設大小模式循環之後一次呼叫這個成員函式。
afx_msg void OnExitSizeMove();
備註
此方法會 WM_EXITSIZEMOVE
接收 Windows SDK 中所述的通知。
當使用者按兩下視窗的標題列或重設大小框線時,或視窗將訊息傳遞 WM_SYSCOMMAND
至 CWnd::DefWindowProc
函式,以及 wParam
該訊息的 參數指定 SC_MOVE
或 SC_SIZE
時,視窗會進入移動或重設大小的強制回應迴圈。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnFontChange
在應用程式變更字型資源集區之後,系統中的所有最上層視窗都會收到 OnFontChange
來自架構的呼叫。
afx_msg void OnFontChange();
備註
從系統新增或移除字型的應用程式(例如,透過 AddFontResource
或 RemoveFontResource
Windows 函式)應該將訊息傳送 WM_FONTCHANGE
至所有最上層視窗。
若要傳送此訊息,請使用 SendMessage
Windows 函式,並將 hWnd
參數設定為 HWND_BROADCAST
。
CWnd::OnGetDlgCode
呼叫控制項,讓控制項可以處理方向鍵和 TAB 鍵輸入本身。
afx_msg UINT OnGetDlgCode();
傳回值
下列其中一或多個值,指出應用程式處理的輸入類型:
DLGC_BUTTON
按鈕(泛型)。DLGC_DEFPUSHBUTTON
默認推播按鈕。DLGC_HASSETSEL
EM_SETSEL
消息。DLGC_UNDEFPUSHBUTTON
沒有預設的按鈕處理。 (應用程式可以使用這個旗標搭配DLGC_BUTTON
來指出它正在處理按鈕輸入,但依賴系統來處理預設的按鈕處理。DLGC_RADIOBUTTON
單選按鈕。DLGC_STATIC
靜態控件。DLGC_WANTALLKEYS
所有鍵盤輸入。DLGC_WANTARROWS
箭頭鍵。DLGC_WANTCHARS
WM_CHAR
消息。DLGC_WANTMESSAGE
所有鍵盤輸入。 應用程式會將這個訊息傳遞給控件。DLGC_WANTTAB
TAB 鍵。
備註
一般而言,Windows 會處理控件的所有箭頭鍵和 TAB 鍵輸入 CWnd
。 藉由覆寫 OnGetDlgCode
, CWnd
控件可以選擇特定類型的輸入來處理本身。
預先定義控件類別的預設 OnGetDlgCode
函式會傳回適用於每個類別的程序代碼。
CWnd::OnGetMinMaxInfo
每當 Windows 需要知道最大化的位置或維度,或最小或最大追蹤大小時,架構就會呼叫這個成員函式。
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
參數
lpMMI
MINMAXINFO
指向結構,其中包含視窗最大大小和位置的相關信息,以及其最小和最大追蹤大小。 如需此結構的詳細資訊,請參閱 MINMAXINFO
結構。
備註
最大化的大小是視窗的框線完全延伸時的大小。 窗口的追蹤大小上限是可使用框線調整視窗大小來達成的最大視窗大小。 視窗的最小追蹤大小是可使用框線調整視窗大小的最小視窗大小。
Windows 會填入點陣列,指定各種位置和維度的預設值。 應用程式可能會在 中 OnGetMinMaxInfo
變更這些值。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnHelp
在應用程式 (使用目前的內容) 中處理 F1 說明。
afx_msg void OnHelp();
備註
如需相關資訊,請參閱 CWinApp::OnHelp
。
CWnd::OnHelpFinder
ID_HELP_FINDER
處理和 ID_DEFAULT_HELP
命令。
afx_msg void OnHelpFinder();
備註
如需相關資訊,請參閱 CWinApp::OnHelpFinder
。
CWnd::OnHelpIndex
ID_HELP_INDEX
處理命令並提供預設的 [說明] 主題。
afx_msg void OnHelpIndex();
備註
如需相關資訊,請參閱 CWinApp::OnHelpIndex
。
CWnd::OnHelpInfo
當使用者按下 F1 鍵時,由架構呼叫。
afx_msg BOOL OnHelpInfo(HELPINFO* lpHelpInfo);
參數
lpHelpInfo
HELPINFO
結構的指標,其中包含要求說明之功能表項、控件、對話框或視窗的相關信息。
傳回值
TRUE
如果視窗具有鍵盤焦點,或選單在視窗內為使用中,則傳回 。 如果沒有視窗具有鍵盤焦點,則會傳 FALSE
回 。
備註
如果按下 F1 時功能表為使用中, WM_HELP
則會傳送至與功能表相關聯的視窗,否則會 WM_HELP
傳送至具有鍵盤焦點的視窗。 如果沒有視窗具有鍵盤焦點, WM_HELP
則會傳送至目前使用中的視窗。
CWnd::OnHelpUsing
處理 ID_HELP_USING
命令。
afx_msg void OnHelpUsing();
備註
如需相關資訊,請參閱 CWinApp::OnHelpUsing
。
CWnd::OnHotKey
當使用者按下全系統熱鍵時,架構會呼叫這個成員函式。
afx_msg void OnHotKey(
UINT nHotKeyId,
UINT nKey1,
UINT nKey2);
參數
nHotKeyId
[in]產生訊息之作用中索引鍵的標識碼。 如果訊息是由系統定義的熱鍵所產生,此參數將是下列其中一個值:
IDHOT_SNAPDESKTOP
- 按下貼齊桌面熱鍵。IDHOT_SNAPWINDOW
- 按下貼齊視窗熱鍵。
nKey1
[in]旗標的位元組合 (OR) 表示按下的索引鍵與 參數所 nKey2
指定的索引鍵。 可能的值是:
MOD_ALT
- 任一 ALT 鍵被按住。MOD_CONTROL
- 已按住 CTRL 鍵。MOD_SHIFT
- 任一 SHIFT 鍵被按住。MOD_WIN
- 任一個 WINDOWS 金鑰都已按住。 這些索引鍵會標示為 Microsoft Windows 標誌。
nKey2
[in]作用中金鑰的虛擬金鑰程式代碼。
備註
此方法會 WM_HOTKEY
接收 Windows SDK 中所述的通知。 此訊息會放在與註冊作用密鑰之線程相關聯的消息仱列頂端。 使用函 RegisterHotKey
式來註冊全系統的熱鍵。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnHScroll
當使用者按兩下視窗的水平滾動條時,架構會呼叫這個成員函式。
afx_msg void OnHScroll(
UINT nSBCode,
UINT nPos,
CScrollBar* pScrollBar);
參數
nSBCode
指定滾動條代碼,指出使用者的捲動要求。 此參數可以是下列其中一項:
SB_LEFT
向左卷動。SB_ENDSCROLL
結束卷動。SB_LINELEFT
向左卷動。SB_LINERIGHT
向右卷動。SB_PAGELEFT
向左卷動一頁。SB_PAGERIGHT
向右卷動一頁。SB_RIGHT
向右卷動。SB_THUMBPOSITION
捲動至絕對位置。 目前的位置是由nPos
參數指定。SB_THUMBTRACK
將滾動盒拖曳至指定的位置。 目前的位置是由nPos
參數指定。
nPos
如果滾動條代碼為 SB_THUMBPOSITION
或 SB_THUMBTRACK
,則指定滾動盒位置,否則不會使用。 視初始捲動範圍而定,可能是負數, nPos
而且應該視需要轉換成 int
。
pScrollBar
如果卷動訊息來自滾動條控件,則包含控件的指標。 如果使用者按下視窗的捲動條,此參數為 NULL
。 指標可能是暫時的,不應該儲存以供日後使用。
備註
滾動 SB_THUMBTRACK
條程式代碼通常是由在拖曳滾動盒時提供一些意見反應的應用程式使用。
如果應用程式捲動滾動條所控制的內容,它也必須使用 SetScrollPos
成員函式重設滾動盒的位置。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
範例
void CMdiView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
{
// Get the minimum and maximum scroll-bar positions.
int minpos;
int maxpos;
GetScrollRange(SB_HORZ, &minpos, &maxpos);
maxpos = GetScrollLimit(SB_HORZ);
// Get the current position of scroll box.
int curpos = GetScrollPos(SB_HORZ);
// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
curpos = minpos;
break;
case SB_RIGHT: // Scroll to far right.
curpos = maxpos;
break;
case SB_ENDSCROLL: // End scroll.
break;
case SB_LINELEFT: // Scroll left.
if (curpos > minpos)
curpos--;
break;
case SB_LINERIGHT: // Scroll right.
if (curpos < maxpos)
curpos++;
break;
case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
GetScrollInfo(SB_HORZ, &info, SIF_ALL);
if (curpos > minpos)
curpos = max(minpos, curpos - (int)info.nPage);
}
break;
case SB_PAGERIGHT: // Scroll one page right.
{
// Get the page size.
SCROLLINFO info;
GetScrollInfo(SB_HORZ, &info, SIF_ALL);
if (curpos < maxpos)
curpos = min(maxpos, curpos + (int)info.nPage);
}
break;
case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
curpos = nPos; // of the scroll box at the end of the drag operation.
break;
case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
curpos = nPos; // position that the scroll box has been dragged to.
break;
}
// Set the new position of the thumb (scroll box).
SetScrollPos(SB_HORZ, curpos);
CView::OnHScroll(nSBCode, nPos, pScrollBar);
}
CWnd::OnHScrollClipboard
當剪貼簿數據具有CF_OWNERDISPLAY
格式,且剪貼簿查看器的水準滾動條中有事件時,剪貼簿擁有OnHScrollClipboard
者的成員函式會由剪貼簿查看器呼叫。
afx_msg void OnHScrollClipboard(
CWnd* pClipAppWnd,
UINT nSBCode,
UINT nPos);
參數
pClipAppWnd
指定剪貼簿查看器視窗的指標。 指標可能是暫時的,不應該儲存以供日後使用。
nSBCode
以低序字指定下列其中一個滾動條代碼:
SB_BOTTOM
向右下方捲動。SB_ENDSCROLL
結束卷動。SB_LINEDOWN
向下捲動一行。SB_LINEUP
向上捲動一行。SB_PAGEDOWN
向下捲動一頁。SB_PAGEUP
向上捲動一頁。SB_THUMBPOSITION
捲動至絕對位置。 目前的位置是在 中nPos
提供。SB_TOP
捲動至左上方。
nPos
如果滾動條代碼為 SB_THUMBPOSITION
,則包含滾動盒位置,否則不會使用。
備註
擁有者應該捲動剪貼簿影像、使適當的區段失效,並更新滾動條值。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnIconEraseBkgnd
架構會在繪製圖示之前必須填滿圖示的背景時,呼叫這個成員函式作為最小化的 (icon) CWnd
物件。
afx_msg void OnIconEraseBkgnd(CDC* pDC);
參數
pDC
指定圖示的裝置內容物件。 可能是暫時的,不應該儲存以供日後使用。
備註
CWnd
只有在定義窗口默認實作的類別圖示時,才會收到此呼叫;否則 OnEraseBkgnd
會呼叫 。
成員 DefWindowProc
函式會以父視窗的背景筆刷填滿圖示背景。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnInitMenu
當功能表即將變成作用中時,架構會呼叫這個成員函式。
afx_msg void OnInitMenu(CMenu* pMenu);
參數
pMenu
指定要初始化的功能表。 可能是暫時的,不應該儲存以供日後使用。
備註
OnInitMenu
當使用者按單列上的項目或按下選單鍵時,就會呼叫 。 覆寫此成員函式以在功能表顯示之前修改功能表。
OnInitMenu
只有在第一次存取功能表時呼叫一次(例如,當使用者按單下功能表欄上的專案時)。 此方法不提供功能表項的相關信息。 當使用者移至功能表內的專案時,不會再次呼叫函式(例如,將滑鼠移至數個功能表項中)。 一旦使用者從功能表結束(例如,按兩下應用程式工作區),之後再按下選單欄上的專案,就會再次呼叫函式。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnInitMenuPopup
當快顯功能表即將變成作用中時,架構會呼叫這個成員函式。
afx_msg void OnInitMenuPopup(
CMenu* pPopupMenu,
UINT nIndex,
BOOL bSysMenu);
參數
pPopupMenu
指定快捷功能表的功能表物件。 可能是暫時的,不應該儲存以供日後使用。
nIndex
指定主選單中快捷功能表的索引。
bSysMenu
TRUE
如果快捷功能表是 [控件] 功能表,則為 ;否則 FALSE
為 。
備註
這可讓應用程式先修改快捷功能表,再顯示,而不需變更整個功能表。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnInputDeviceChange
架構會在從系統新增或移除 I/O 裝置時呼叫這個成員函式。
afx_msg void OnInputDeviceChange(unsigned short uFlag);
參數
uFlag
[in]此旗標可以包含下列值:
GIDC_ARRIVAL
- 新的裝置已新增至系統。GIDC_REMOVAL
- 裝置已從系統移除。
備註
此方法會 WM_INPUT_DEVICE_CHANGE
接收 Windows SDK 中所述的通知。 是一般輸入設備訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnInputLangChange
架構會在應用程式輸入語言變更之後,針對最受影響的視窗呼叫這個成員。
afx_msg void OnInputLangChange(
UINT nCharSet,
UINT nLocaleId);
參數
nCharSet
[in]新地區設定的字元集。 如需詳細資訊,請參閱 lfCharSet
結構的 參數 LOGFONT
。
nLocaleId
[in]輸入地區設定標識碼。 如需詳細資訊,請參閱 語言標識元常數和字串。
備註
此方法會 WM_INPUTLANGCHANGE
接收 Windows SDK 中所述的通知訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnInputLangChangeRequest
當使用者選擇新的輸入語言時,架構會針對具有焦點的視窗呼叫這個成員。
afx_msg void OnInputLangChangeRequest(
UINT nFlags,
UINT nLocaleId);
參數
nFlags
[in]旗標的位 (OR) 組合,表示已在安裝的地區設定清單中選取新的地區設定或下一個地區設定,或新的輸入地區設定的鍵盤配置可以與系統字元集搭配使用。 可能的值為:INPUTLANGCHANGE_BACKWARD
、INPUTLANGCHANGE_FORWARD
和 INPUTLANGCHANGE_SYSCHARSET
。
nLocaleId
[in]輸入地區設定標識碼。 如需詳細資訊,請參閱 語言標識元常數和字串。
備註
此方法會 WM_INPUTLANGCHANGEREQUEST
接收 Windows SDK 中所述的通知訊息。 當使用者使用鍵盤控制面板應用程式中指定的快速鍵,或從系統任務列上的指標選擇新的輸入語言時,就會張貼此訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnKeyDown
當按下非系統索引鍵時,架構會呼叫這個成員函式。
afx_msg void OnKeyDown(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定指定金鑰的虛擬金鑰碼。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h
nRepCnt
重複計數(由於使用者按住按鍵而重複擊鍵的次數)。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | Description |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 |
8 | 擴充鍵,例如數位按鍵上的函數鍵或按鍵(如果它是擴充鍵則為 1)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1;否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在呼叫之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
WM_KEYDOWN
對於訊息,金鑰轉換位 (位元 15) 為 0,而內容代碼位 (位元 13) 為 0。
備註
非系統按鍵是按下 ALT 鍵時所按下的鍵盤按鍵,或是輸入焦點時 CWnd
按下的鍵盤按鍵。
由於自動重複,在進行成員函式呼叫之前OnKeyUp
,可能會發生多個OnKeyDown
呼叫。 指出先前索引鍵狀態的位可用來判斷 OnKeyDown
呼叫是第一個向下轉換還是重複的向下轉換。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 其他一些鍵盤可能支援 中的 nFlags
擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnKeyUp
架構會在釋放非系統金鑰時呼叫這個成員函式。
afx_msg void OnKeyUp(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定指定金鑰的虛擬金鑰碼。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h
nRepCnt
重複計數(由於使用者按住按鍵而重複擊鍵的次數)。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | Description |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 高序字組的低位元組。 |
8 | 擴充鍵,例如數字鍵臺上的函數鍵或索引鍵(如果它是擴充鍵則為 1,否則為 0)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1;否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在呼叫之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
WM_KEYUP
對於訊息,金鑰轉換位 (位元 15) 為 1,而內容代碼位 (位元 13) 為 0。
備註
非系統按鍵是按下 ALT 鍵時所按下的鍵盤按鍵,或是當 具有輸入焦點時 CWnd
按下的鍵盤按鍵。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 有些其他鍵盤可能支持 nFlags 中的擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnKillFocus
架構會在失去輸入焦點之前立即呼叫這個成員函式。
afx_msg void OnKillFocus(CWnd* pNewWnd);
參數
pNewWnd
指定接收輸入焦點之視窗的指標(可能是 NULL
或可能是暫時的)。
備註
CWnd
如果對象顯示插入號,則此時應該終結插入號。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnLButtonDblClk
當使用者按兩下滑鼠左鍵時,架構會呼叫這個成員函式。
afx_msg void OnLButtonDblClk(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
只有具有樣式的CS_DBLCLKS
WNDCLASS
視窗才會收到OnLButtonDblClk
呼叫。 這是 Microsoft Foundation Class 視窗的預設值。 當使用者按下、放開,然後在系統的按兩下時間限制內再次按下滑鼠左鍵時,Windows 會呼叫 OnLButtonDblClk
。 按兩下滑鼠左鍵實際上會產生四個事件:WM_LBUTTONDOWN
、訊息、WM_LBUTTONDBLCLK
呼叫,以及釋放按鈕時的另一則WM_LBUTTONUP
WM_LBUTTONUP
訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnLButtonDown
當使用者按下滑鼠左鍵時,架構會呼叫這個成員函式。
afx_msg void OnLButtonDown(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnLButtonUp
當使用者放開滑鼠左鍵時,架構會呼叫這個成員函式。
afx_msg void OnLButtonUp(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMButtonDblClk
當使用者按兩下滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnMButtonDblClk(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
只有具有樣式的CS_DBLCLKS
WNDCLASS
視窗才會收到OnMButtonDblClk
呼叫。 這是所有 Microsoft Foundation Class 視窗的預設值。 當使用者按下、放開,然後在系統按兩下時間限制內再次按下滑鼠中間按鈕時,Windows 會產生 OnMButtonDblClk
呼叫。 按兩下中間滑鼠按鈕實際上會產生四個事件:WM_MBUTTONDOWN
和訊息、WM_MBUTTONDBLCLK
呼叫,以及另一則WM_MBUTTONUP
WM_MBUTTONUP
訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMButtonDown
當使用者按下滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnMButtonDown(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMButtonUp
當使用者放開滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnMButtonUp(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMDIActivate
架構會針對要停用的子視窗和正在啟動的子視窗呼叫這個成員函式。
afx_msg void OnMDIActivate(
BOOL bActivate,
CWnd* pActivateWnd,
CWnd* pDeactivateWnd);
參數
bActivate
TRUE
如果子系正在啟動,而且 FALSE
正在停用,則為 。
pActivateWnd
包含要啟動之 MDI 子視窗的指標。 由 MDI 子視窗接收時, pActivateWnd
包含正在啟動之子視窗的指標。 此指標可能是暫時的,不應該儲存以供日後使用。
pDeactivateWnd
包含停用之 MDI 子視窗的指標。 此指標可能是暫時的,不應該儲存以供日後使用。
備註
MDI 子窗口獨立於 MDI 框架視窗啟動。 當框架變成使用中時,上次以呼叫啟動 OnMDIActivate
的子視窗會收到 WM_NCACTIVATE
訊息來繪製活動視窗框架和標題列,但不會收到另一個 OnMDIActivate
呼叫。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMeasureItem
架構會在建立控件時,由架構呼叫此成員函式,以取得擁有者繪製按鈕、下拉式方塊、清單框或功能表項的擁有者。
afx_msg void OnMeasureItem(
int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
參數
nIDCtl
控件的標識碼。
lpMeasureItemStruct
指向 MEASUREITEMSTRUCT
包含擁有者繪製控件維度的數據結構。
備註
覆寫這個成員函式,並填入 MEASUREITEMSTRUCT
所 lpMeasureItemStruct
指向的數據結構並傳回;這會通知 Windows 控件的維度,並允許 Windows 正確處理使用者與控件的互動。
如果使用 或 CBS_OWNERDRAWVARIABLE
樣式建立LBS_OWNERDRAWVARIABLE
清單框或下拉式方塊,架構會針對控件中的每個專案呼叫此函式,否則會呼叫此函式一次。
Windows 會在傳送WM_INITDIALOG
訊息之前,起始下拉式方塊的擁有者和清單框OWNERDRAWFIXED
擁有者的呼叫OnMeasureItem
。 因此,當擁有者收到此呼叫時,Windows 尚未決定控件中使用的字型高度和寬度:需要這些值的函數調用和計算應該發生在應用程式或連結庫的主要函式中。
如果要測量的專案為 CMenu
或 CListBox
CComboBox
物件,則會 MeasureItem
呼叫適當類別的虛擬函式。 MeasureItem
覆寫適當控件類別的成員函式,以計算和設定每個專案的大小。
OnMeasureItem
只有在控件的類別是在運行時間建立,或是使用 LBS_OWNERDRAWVARIABLE
或 CBS_OWNERDRAWVARIABLE
樣式建立時,才會呼叫它。 如果控件是由對話框編輯器所建立, OnMeasureItem
則不會呼叫。 這是因為 WM_MEASUREITEM
訊息會在控件的建立程式中早期傳送。 如果您使用、 SubclassDlgItem
或 SubclassWindow
子類別,子類別DDX_Control
通常發生在建立程序之後。 因此,無法處理 WM_MEASUREITEM
控件函 OnChildNotify
式中的訊息,這是 MFC 用來實 ON_WM_MEASUREITEM_REFLECT
作 的機制。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMenuChar
當使用者按下與目前功能表中任何預先定義的助記鍵不符的功能表助記字元時,架構會呼叫這個成員函式。
afx_msg LRESULT OnMenuChar(
UINT nChar,
UINT nFlags,
CMenu* pMenu);
參數
nChar
根據組建設定,指定使用者按下的 ANSI 或 Unicode 字元。
nFlags
如果功能表是快捷功能表,則包含 MF_POPUP
旗標。 如果功能表是 [控件] 功能表, MF_SYSMENU
則會包含旗標。
pMenu
包含所選 CMenu
的指標。 指標可能是暫時的,不應該儲存。
傳回值
傳回值的高序字應該包含下列其中一個命令代碼:
值 | 描述 |
---|---|
0 | 告知 Windows 捨棄使用者按下的字元,並在系統喇叭上建立簡短的嗶聲。 |
1 | 告知 Windows 關閉目前的功能表。 |
2 | 通知 Windows 傳回值的低序字包含特定專案的項目編號。 Windows 會選取此專案。 |
如果高序單字包含 0 或 1,則會忽略低序字。 當快捷鍵(快速鍵)用來選取放在功能表中的點陣圖時,應用程式應該處理此訊息。
備註
它會傳送至 CWnd
擁有選單的 。 OnMenuChar
當使用者按下 ALT 鍵和任何其他按鍵時,也會呼叫 ,即使按鍵未對應至助記字元也一樣。 在此情況下,指向 pMenu
由 擁有的 CWnd
功能表,且 nFlags
為 0。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMenuDrag
當用戶開始拖曳功能表項時,架構會呼叫目前拖放功能表的這個成員函式。
afx_msg UINT OnMenuDrag(
UINT nPos,
CMenu* pMenu);
參數
nPos
[in]當拖曳作業開始時,功能表項的索引位置。
pMenu
[in] CMenu
包含功能表項之物件的指標。
傳回值
傳回值 | 意義 |
---|---|
MND_CONTINUE |
功能表應該保持作用中。 如果放開滑鼠,則應該忽略它。 |
MND_ENDMENU |
功能表應該結束。 |
備註
此方法會 WM_MENUDRAG
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMenuGetObject
當滑鼠游標進入功能表項或從專案中央移至專案頂端或底部時,架構會呼叫目前拖放功能表的這個成員函式。
afx_msg UINT OnMenuGetObject(MENUGETOBJECTINFO* pMenuGetObjectInfo);
參數
pMenu
[in] MENUGETOBJECTINFO
結構的指標,其中包含滑鼠游標開啟之拖放功能表的相關信息。
傳回值
傳回值 | 意義 |
---|---|
MNGO_NOERROR |
支援拖放作業的MENUGETOBJECTINFO 介面指標會在 結構的成員中pvObj 傳回。 目前僅 IDropTarget 支援 介面。 |
MNGO_NOINTERFACE |
不支援拖放介面。 |
備註
此方法會 WM_MENUGETOBJECT
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMenuRButtonUp
當使用者在游標位於功能表項時放開滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnMenuRButtonUp(
UINT nPos,
CMenu* pMenu);
參數
nPos
[in]放開滑鼠右鍵時功能表項的索引位置。
pMenu
[in] CMenu
包含功能表項之物件的指標。
備註
此方法會 WM_MENURBUTTONUP
接收 Windows SDK 中所述的通知。 訊息 WM_MENURBUTTONUP
可讓應用程式提供訊息中所指定功能表項的內容相關功能表。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMenuSelect
CWnd
如果物件與選單相關聯,當使用者選取選單選項時,OnMenuSelect
架構會呼叫 。
afx_msg void OnMenuSelect(
UINT nItemID,
UINT nFlags,
HMENU hSysMenu);
參數
nItemID
識別選取的專案。 如果選取的專案是功能表項, nItemID
則包含功能表項識別碼。 如果選取的專案包含快捷功能表, nItemID
則包含快捷功能表索引,並 hSysMenu
包含主選單的句柄(已點選) 功能表。
nFlags
包含下列選單旗標的組合:
MF_BITMAP
Item 是位圖。MF_CHECKED
已核取專案。MF_DISABLED
專案已停用。MF_GRAYED
項目呈現暗灰色。MF_MOUSESELECT
已使用滑鼠選取專案。MF_OWNERDRAW
項目是擁有者繪製專案。MF_POPUP
專案包含快捷功能表。MF_SEPARATOR
Item 是功能表項分隔符。MF_SYSMENU
專案包含在 [控件] 選單中。
hSysMenu
如果 nFlags
包含 MF_SYSMENU
,則會識別與訊息相關聯的功能表。 如果 nFlags
包含 MF_POPUP
,則會識別主功能表的句柄。 如果 nFlags
不包含 MF_SYSMENU
或 MF_POPUP
,則不會使用。
備註
如果 nFlags
包含0xFFFF且 hSysMenu
包含 0,Windows 已關閉功能表,因為使用者按下 ESC 鍵或按下選單外部。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMouseActivate
當游標位於非使用中視窗,且使用者按下滑鼠按鈕時,架構會呼叫這個成員函式。
afx_msg int OnMouseActivate(
CWnd* pDesktopWnd,
UINT nHitTest,
UINT message);
參數
pDesktopWnd
指定要啟動之視窗的最上層父視窗指標。 指標可能是暫時的,不應該儲存。
nHitTest
指定 點擊測試 區域代碼。 點擊測試是決定游標位置的測試。
message
指定滑鼠訊息編號。
傳回值
指定是否要啟動 CWnd
,以及是否要捨棄滑鼠事件。 它必須是下列其中一個值:
MA_ACTIVATE
ActivateCWnd
物件。MA_NOACTIVATE
請勿啟動CWnd
物件。MA_ACTIVATEANDEAT
啟動CWnd
物件並捨棄滑鼠事件。MA_NOACTIVATEANDEAT
請勿啟動CWnd
物件並捨棄滑鼠事件。
備註
默認實作會在進行任何處理之前,將此訊息傳遞至父視窗。 如果父視窗傳回 TRUE,則會停止處理。
如需個別點擊測試區域代碼的描述,請參閱 OnNcHitTest
成員函式
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
範例
// The code fragment below shows how to UI activate an ActiveX control.
// CMyAxCtrl is a COleControl-derived class.
int CMyAxCtrl::OnMouseActivate(CWnd *pDesktopWnd, UINT nHitTest, UINT message)
{
OnActivateInPlace(TRUE, NULL); // OnActivateInPlace() is an undocumented function
return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
CWnd::OnMouseHover
當游標停留在視窗的工作區上時,架構會呼叫這個成員函式,以在之前呼叫 TrackMouseEvent
中所指定的時段內。
afx_msg void OnMouseHover(
UINT nFlags,
CPoint point);
參數
nFlags
[in]旗標的位元組合 (OR) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。
point
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_MOUSEHOVER
接收 Windows SDK 中所述的通知。
參數 nFlags
可以是下表所列的修飾詞索引鍵組合。 如需詳細資訊,請參閱 關於滑鼠輸入。
修飾詞索引鍵 | 描述 |
---|---|
MK_CONTROL |
按下 CTRL 鍵。 |
MK_LBUTTON |
按下滑鼠左鍵。 |
MK_MBUTTON |
按下滑鼠中間按鈕。 |
MK_RBUTTON |
按下滑鼠右鍵。 |
MK_SHIFT |
按下SHIFT鍵。 |
MK_XBUTTON1 |
XBUTTON1 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
MK_XBUTTON2 |
XBUTTON2 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMouseHWheel
當滑鼠的水準滾動滾輪傾斜或旋轉時,架構會呼叫這個成員。
afx_msg void OnMouseHWheel(
UINT nFlags,
short zDelta,
CPoint pt);
參數
nFlags
[in]旗標的位元組合 (OR) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。 如需旗標清單,請參閱關於滑鼠輸入中的「訊息參數」子標題。
zDelta
[in]表示方向盤旋轉的距離,以的倍數或除 WHEEL_DELTA
數表示,也就是 120。 正值表示方向盤向右旋轉;負值表示方向盤向左旋轉。
pt
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_MOUSEHWHEEL
接收 Windows SDK 中所述的通知訊息。 當滑鼠的水準滾動滾輪傾斜或旋轉時,此訊息會傳送至具有焦點的視窗。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMouseLeave
當游標離開之前呼叫 TrackMouseEvent
中所指定視窗的工作區時,架構會呼叫這個成員函式。
afx_msg void OnMouseLeave();
備註
此方法會 WM_MOUSELEAVE
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMouseMove
架構會在滑鼠游標移動時呼叫這個成員函式。
afx_msg void OnMouseMove(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對。
備註
如果未擷取滑鼠, WM_MOUSEMOVE
則滑鼠游標下方的物件會收到 CWnd
訊息,否則訊息會移至擷取滑鼠的視窗。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMouseWheel
架構會在使用者旋轉滑鼠滾輪時呼叫這個成員函式,並遇到滾輪的下一個凹口。
afx_msg BOOL OnMouseWheel(
UINT nFlags,
short zDelta,
CPoint pt);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
如果滑鼠中間按鈕已關閉,請設定 。MK_RBUTTON
如果滑鼠右鍵已關閉,請設定 。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
zDelta
表示旋轉距離。 此值 zDelta
以的倍數或除 WHEEL_DELTA
法表示,也就是 120。 小於零的值表示向後旋轉(朝用戶旋轉),而大於零的值則表示向前旋轉(遠離使用者)。 用戶可以變更滑鼠軟體中的 Wheel 設定來反轉此回應。 如需此參數的詳細資訊,請參閱。
pt
指定游標的 x 和 Y 座標。 這些座標一律與畫面左上角相對。
傳回值
如果啟用滑鼠滾輪捲動,則為非零;否則為 0。
備註
除非覆寫,否則會 OnMouseWheel
呼叫的預設值 WM_MOUSEWHEEL
。 Windows 會自動將訊息路由傳送至具有焦點的控件或子視窗。 Win32 函式 DefWindowProc
會將訊息向上傳播至處理它的視窗。
參數 zDelta
是的倍數 WHEEL_DELTA
,其設定為120。 此值是要採取的動作閾值,而且每個差異應該發生一個這類動作(例如,向前捲動一個指標)。
WHEEL_DELTA
設定為 120,以允許更精細的車輪,例如自由旋轉的滾輪,沒有針腳。 更精細的解析度轉輪會依輪替傳送更多訊息,但每個訊息都有較小的差異值。 若要使用這類轉輪,請新增連入 zDelta
值直到 WHEEL_DELTA
到達為止(以便您取得指定差異旋轉的相同回應),或捲動部分行以回應更頻繁的訊息。 您也可以選擇捲動粒度並累積差異,直到 WHEEL_DELTA
到達為止。
覆寫此成員函式,以提供您自己的滑鼠滾輪捲動行為。
注意
OnMouseWheel
處理 Windows NT 4.0 和更新版本的訊息。 針對 Windows 95/98 或 Windows NT 3.51 訊息處理,請使用 OnRegisteredMouseWheel
。
CWnd::OnMove
架構會在物件移動之後 CWnd
呼叫這個成員函式。
afx_msg void OnMove(
int x,
int y);
參數
x
指定工作區左上角的新 X 座標位置。 這個新位置會在重疊和彈出視窗的螢幕座標中提供,以及子視窗的父用戶端座標。
y
指定工作區左上角的新 Y 座標位置。 這個新位置會在重疊和彈出視窗的螢幕座標中提供,以及子視窗的父用戶端座標。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnMoving
當用戶行動 CWnd
物件時,架構會呼叫這個成員函式。
afx_msg void OnMoving(
UINT nSide,
LPRECT lpRect);
參數
nSide
要移動之視窗的邊緣。
lpRect
CRect
將包含專案座標的 或 RECT
結構的位址。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcActivate
架構需要變更非工作區以指出作用中或非使用中狀態時,架構會呼叫這個成員函式。
afx_msg BOOL OnNcActivate(BOOL bActive);
參數
bActive
指定何時需要變更標題列或圖示,以指出作用中或非使用中狀態。 如果要繪製使用中的標題或圖示, 則 bActive
參數 TRUE
為 。 它 FALSE
適用於非使用中的標題或圖示。
傳回值
如果 Windows 應該繼續進行默認處理,則為非零;0 以防止停用標題列或圖示。
備註
如果 為 ,則預設實作會在 為 bActive
TRUE
時,在其使用bActive
FALSE
中色彩中繪製標題列和標題欄文字。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcCalcSize
架構需要計算工作區的大小和位置時,架構會呼叫這個成員函式。
afx_msg void OnNcCalcSize(
BOOL bCalcValidRects,
NCCALCSIZE_PARAMS* lpncsp);
參數
bCalcValidRects
指定應用程式是否應該指定工作區的哪個部分包含有效資訊。 Windows 會將有效資訊複製到新工作區內的指定區域。 如果此參數為TRUE,應用程式應該指定工作區的哪個部分有效。
lpncsp
NCCALCSIZE_PARAMS
指向數據結構,其中包含應用程式可用來計算矩形的新大小和位置CWnd
(包括工作區、框線、標題、滾動條等等)。
備註
藉由處理此訊息,當視窗的大小或位置變更時,應用程式可以控制視窗工作區的內容。
不論的值bCalcValidRects
為何,結構結構成員NCCALCSIZE_PARAMS
所rgrc
指定數位中的第一個矩形都包含視窗的座標。 如果是子視窗,座標會相對於父視窗的工作區。 對於最上層視窗,座標是螢幕座標。 應用程式應該修改 rgrc[0]
矩形,以反映工作區的大小和位置。
rgrc[1]
和 rgrc[2]
矩形只有在 是 TRUE
時才bCalcValidRects
有效。 在此情況下, rgrc[1]
矩形會包含視窗移動或重設大小的座標。 矩形 rgrc[2]
包含視窗工作區移動前視窗工作區的座標。 所有座標都與父視窗或畫面相對。
默認實作會根據視窗特性計算工作區的大小(滾動條、功能表等等),並將結果 lpncsp
放在 中。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcCreate
架構會在第一次建立物件時CWnd
,先呼叫訊息之前的WM_CREATE
這個成員函式。
afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct);
參數
lpCreateStruct
指向 CREATESTRUCT
的數據結構 CWnd
。
傳回值
如果建立非客戶端區域,則為非零。 如果發生錯誤,則為 0; Create
此函式會在此案例中傳回 failure
。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcDestroy
當非客戶端區域被終結時,由架構呼叫,而且是在 Windows 視窗終結時呼叫的最後一個成員函式。
afx_msg void OnNcDestroy();
備註
預設實作會執行一些清除,然後呼叫虛擬成員函式 PostNcDestroy
。
如果您想要執行自己的清除,請覆寫 PostNcDestroy
,例如 delete this
作業。 如果您覆寫 OnNcDestroy
,您必須在基類中呼叫 OnNcDestroy
,以確保釋放為窗口內部配置的任何記憶體。
CWnd::OnNcHitTest
架構會針對 CWnd
包含游標的物件呼叫這個成員函式(或 CWnd
每次移動滑鼠時使用 SetCapture
成員函式來擷取滑鼠輸入的物件)。
afx_msg LRESULT OnNcHitTest(CPoint point);
參數
point
包含游標的 x 和 Y 座標。 這些座標一律為螢幕座標。
傳回值
其中一個滑鼠點擊測試列舉值。 如需值清單,請參閱 WM_NCHITTEST
。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcLButtonDblClk
當使用者按兩下滑鼠左鍵,而游標位於的非工作區 CWnd
內時,架構會呼叫這個成員函式。
afx_msg void OnNcLButtonDblClk(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。 如需值清單,請參閱 WM_NCHITTEST
。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
如果適用,則會 WM_SYSCOMMAND
傳送訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcLButtonDown
當使用者按下滑鼠左鍵,而游標位於物件的非工作區 CWnd
時,架構會呼叫這個成員函式。
afx_msg void OnNcLButtonDown(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。 如需值清單,請參閱 WM_NCHITTEST
。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
如果適用, WM_SYSCOMMAND
則會傳送 。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數會反映收到訊息時架構所接收的參數。如果您呼叫此函式的基類實作,該實作會使用原本以訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcLButtonUp
當使用者在游標位於非工作區時釋放滑鼠左鍵時,架構會呼叫這個成員函式。
afx_msg void OnNcLButtonUp(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。 如需值清單,請參閱 WM_NCHITTEST
。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
如果適用, WM_SYSCOMMAND
則會傳送 。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMButtonDblClk
當使用者在游標位於非工作區時按兩下滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnNcMButtonDblClk(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMButtonDown
當使用者在游標位於非工作區時按下滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnNcMButtonDown(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMButtonUp
當使用者在游標位於非工作區時放開滑鼠中間按鈕時,架構會呼叫這個成員函式。
afx_msg void OnNcMButtonUp(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMouseHover
架構會在游標停留在視窗的非工作區上,在之前呼叫 TrackMouseEvent
中指定的一段時間內,架構會呼叫這個成員函式。
afx_msg void OnNcMouseHover(
UINT nHitTest,
CPoint point);
參數
nHitTest
[in]函式傳 CWnd::DefWindowProc
回的點擊測試值,因為處理 WM_NCHITTEST
訊息。
point
[in] CPoint
物件,指定 相對於螢幕左上角之游標的 x 和 y 座標。
備註
此方法會 WM_NCMOUSEHOVER
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMouseLeave
當游標離開之前呼叫 TrackMouseEvent
中所指定視窗的非工作區時,架構會呼叫這個成員函式。
afx_msg void OnNcMouseLeave();
備註
此方法會 WM_NCMOUSELEAVE
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcMouseMove
當游標在非工作區內移動時,架構會呼叫這個成員函式。
afx_msg void OnNcMouseMove(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
如果適用,則會 WM_SYSCOMMAND
傳送訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcPaint
需要繪製非工作區時,架構會呼叫這個成員函式。
afx_msg void OnNcPaint();
備註
默認實作會繪製視窗框架。
應用程式可以覆寫此呼叫,並繪製自己的自定義視窗框架。 裁剪區域一律為矩形,即使改變框架的形狀也一樣。
CWnd::OnNcRButtonDblClk
當使用者按兩下滑鼠右鍵,而游標位於的非工作區 CWnd
時,架構會呼叫這個成員函式。
afx_msg void OnNcRButtonDblClk(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcRButtonDown
當使用者在游標位於非工作區時按下滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnNcRButtonDown(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcRButtonUp
當使用者在游標位於非工作區時釋放滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnNcRButtonUp(
UINT nHitTest,
CPoint point);
參數
nHitTest
指定 點擊測試程序代碼。 點擊測試是決定游標位置的測試。
point
指定 CPoint
物件,其中包含游標位置的 x 和 y 螢幕座標。 這些座標一律與畫面左上角相對。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcRenderingChanged
當非工作區的轉譯原則變更時,架構會呼叫這個成員。
afx_msg void OnNcRenderingChanged(BOOL bIsRendering);
參數
bIsRendering
[in] TRUE
如果視窗管理員 (DWM) 轉譯已啟用視窗的非工作區,則為 ; FALSE
如果停用轉譯,則為 。
備註
此方法會 WM_DWMNCRENDERINGCHANGED
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcXButtonDblClk
當使用者按兩下 XBUTTON1
或 XBUTTON2
游標位於視窗的非工作區時,架構會呼叫這個成員函式。
void OnNcXButtonDblClk(
short nHitTest,
UINT nButton,
CPoint point);
參數
nHitTest
[in]函式傳 CWnd::DefWindowProc
回的點擊測試值,因為處理 WM_NCHITTEST
訊息。
nButton
[in]如果第一個Microsoft Intellimouse X 按鈕被按兩下,或XBUTTON2
按兩下第二個 X 按鈕,則為的值XBUTTON1
。
point
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_XBUTTONDBLCLK
接收 Windows SDK 中所述的通知。 此訊息會張貼至包含游標的視窗。 如果視窗已擷取滑鼠,則不會張貼此訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcXButtonDown
當使用者按下 XBUTTON1
滑鼠或 XBUTTON2
滑鼠時,當游標位於視窗的非工作區時,架構會呼叫這個成員函式。
afx_msg void OnNcXButtonDown(
short nHitTest,
UINT nButton,
CPoint point);
參數
nHitTest
[in]函式傳 CWnd::DefWindowProc
回的點擊測試值,因為處理 WM_NCHITTEST
訊息。
nButton
[in]如果按下第一個滑鼠 X 按鈕,或XBUTTON2
按下第二個 X 按鈕,則為的值XBUTTON1
。
point
[in] CPoint
物件,指定 x
相對於螢幕左上角之游標的和 y
座標。
備註
此方法會 WM_NCXBUTTONDOWN
接收 Windows SDK 中所述的通知。 此訊息會張貼至包含游標的視窗。 如果視窗已擷取滑鼠,則不會張貼此訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNcXButtonUp
當使用者放開 XBUTTON1
滑鼠或 XBUTTON2
游標位於視窗的非工作區時,架構會呼叫這個成員函式。
afx_msg void OnNcXButtonUp(
short nHitTest,
UINT nButton,
CPoint point);
參數
nHitTest
[in]函式傳 CWnd::DefWindowProc
回的點擊測試值,因為處理 WM_NCHITTEST
訊息。
nButton
[in]如果放開第一個滑鼠 X 按鈕,或XBUTTON2
釋放第二個 X 按鈕,則為的值XBUTTON1
。
point
[in] CPoint
物件,指定 相對於螢幕左上角之游標的 x 和 y 座標。
備註
此方法會 WM_NCXBUTTONUP
接收 Windows SDK 中所述的通知。 此訊息會張貼至包含游標的視窗。 如果視窗已擷取滑鼠,則不會張貼此訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNextMenu
當使用向右鍵或向左鍵在功能表列與系統功能表之間切換時,架構會呼叫這個成員函式。
afx_msg void OnNextMenu(
UINT nKey,
LPMDINEXTMENU lpMdiNextMenu);
參數
nKey
[in]旗標的位元組合 (OR
) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。 如需旗標清單,請參閱關於滑鼠輸入中的「訊息參數」子標題。
lpMdiNextMenu
[in] MDINEXTMENU
結構的指標,其中包含要啟動之功能表的相關信息。
備註
此方法會 WM_UNINITMENUPOPUP
接收 Windows SDK 中所述的通知。 為了回應此訊息,您的應用程式可以設定 hmenuNext
結構的成員 MDINEXTMENU
來指定要切換的功能表,以及 hwndNext
指定要接收功能表通知訊息窗口的成員。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnNotify
架構會呼叫這個成員函式,通知控件的父視窗,控件中已發生事件,或控件需要某種資訊。
virtual BOOL OnNotify(
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
參數
wParam
識別如果訊息來自控件,則會傳送訊息的控件。 否則為 wParam
0。
lParam
通知訊息 (NMHDR
) 結構的指標,其中包含通知程式代碼和其他資訊。 對於某些通知訊息,此參數會指向具有 結構做為其第一個成員的較大結構 NMHDR
。
pResult
LRESULT
當處理訊息時,要在其中儲存結果碼的變數指標。
傳回值
如果應用程式處理此訊息,則會傳回非零;否則為 0。
備註
OnNotify
處理控件通知的訊息對應。
覆寫衍生類別中的這個成員函式來處理 WM_NOTIFY
訊息。 除非呼叫基類 OnNotify
,否則覆寫不會處理訊息對應。
如需訊息的詳細資訊 WM_NOTIFY
,請參閱技術附註 61 (TN061) ON_NOTIFY
和 WM_NOTIFY
訊息。 您可能也對控件主題和 TN062 Windows 控件的訊息反映中所述的相關主題感興趣。
CWnd::OnNotifyFormat
架構會呼叫這個成員函式,以判斷目前視窗是否接受通知訊息中的 WM_NOTIFY
ANSI 或 Unicode 結構。
afx_msg UINT OnNotifyFormat(
CWnd* pWnd,
UINT nCommand);
參數
pWnd
[in]物件的指標 CWnd
,表示傳送訊息的 WM_NOTIFY
視窗。 如果 nCommand
參數為 ,則這個參數是 控件的指標,如果 nCommand
NF_REQUERY
為 NF_QUERY
,則為 控件的父視窗指標。
nCommand
[in]特製化訊息的 WM_NOTIFY
命令值。 可能的值是:
NF_QUERY
- 訊息是用來判斷 ANSI 或 Unicode 結構是否應該用於訊息的WM_NOTIFY
查詢。 此訊息會在控件建立期間從控件傳送至其父視窗,並回應NF_REQUERY
此訊息的格式。NF_REQUERY
- 訊息是控制件將這個訊息形式傳送NF_QUERY
至其父視窗的要求。 此要求會從父視窗傳送,並要求控制項重新查詢父代訊息中WM_NOTIFY
要使用的結構類型。nCommand
如果 參數是NF_REQUERY
,則傳回值是重新查詢作業的結果。
傳回值
傳回值 | 意義 |
---|---|
NFR_ANSI |
ANSI 結構應該用於 WM_NOTIFY 控件所傳送的訊息中。 |
NFR_UNICODE |
Unicode 結構應該用於 WM_NOTIFY 控件所傳送的訊息中。 |
0 | 發生錯誤。 |
備註
此方法會 WM_NOTIFYFORMAT
接收 Windows SDK 中所述的通知。 WM_NOTIFY
訊息會從通用控件傳送至其父視窗,以及從父視窗傳送至通用控件。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnPaint
當 Windows 或應用程式提出重新繪出應用程式視窗部分的要求時,架構會呼叫這個成員函式。
afx_msg void OnPaint();
備註
呼叫 WM_PAINT
或 RedrawWindow
成員函式時UpdateWindow
,會傳送訊息。
視窗可能會因為呼叫 RedrawWindow
具有旗標集的成員函 RDW_INTERNALPAINT
式而接收內部繪製訊息。 在此情況下,視窗可能沒有更新區域。 應用程式應該呼叫 GetUpdateRect
成員函式,以判斷視窗是否有更新區域。 如果 GetUpdateRect
傳回 0,應用程式不應該呼叫 BeginPaint
和 EndPaint
成員函式。
應用程式有責任查看每個訊息的內部數據結構 WM_PAINT
,檢查是否有任何必要的內部重繪或更新,因為 WM_PAINT
訊息可能是由無效的區域和呼叫 RedrawWindow
成員函 RDW_INTERNALPAINT
式所設定旗標所造成。
Windows 只會傳送內部 WM_PAINT
訊息一次。 成員函式傳送內部WM_PAINT
訊息至窗口之後,將不會WM_PAINT
再傳送或張貼任何訊息,直到視窗失效,或直到RedrawWindow
已設定旗標再次RDW_INTERNALPAINT
呼叫成員函式UpdateWindow
為止。
如需在檔案/檢視應用程式中轉譯影像的相關信息,請參閱 CView::OnDraw
。
如需使用 WM_Paint
的詳細資訊,請參閱 Windows SDK 中的下列主題:
CWnd::OnPaintClipboard
當 [剪貼簿] 擁有者將資料以 OnPaintClipboard
格式放在 [剪貼簿],導致 [剪貼簿] 檢視者的工作區需要重新繪製時,[剪貼簿] 檢視者可以呼叫 [剪貼簿] 擁有者的 CF_OWNERDISPLAY
成員函式。
afx_msg void OnPaintClipboard(
CWnd* pClipAppWnd,
HGLOBAL hPaintStruct);
參數
pClipAppWnd
指定 [剪貼簿] 應用程式視窗的指標。 指標可能是暫時的,不應該儲存以供日後使用。
hPaintStruct
識別 PAINTSTRUCT
數據結構,定義要繪製之工作區的哪個部分。
備註
若要判斷整個工作區或只需要重新繪製的一部分,剪貼簿擁有者必須將結構成員中rcpaint
PAINTSTRUCT
指定之繪圖區域的維度與最近OnSizeClipboard
成員函式呼叫中所指定的維度進行比較。
OnPaintClipboard
應該使用 GlobalLock
Windows 函式來鎖定包含 PAINTSTRUCT
數據結構的記憶體,並在它結束之前,使用 GlobalUnlock
Windows 函式解除鎖定該記憶體。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnPaletteChanged
架構會在具有輸入焦點的視窗實現其邏輯調色盤之後,針對所有最上層視窗呼叫這個成員函式,藉此變更系統調色盤。
afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
參數
pFocusWnd
指定導致系統調色盤變更之視窗的指標。 指標可能是暫時的,不應該儲存。
備註
此呼叫允許沒有輸入焦點的視窗,該視窗會使用調色盤實現其邏輯調色盤並更新其工作區。
成員 OnPaletteChanged
函式會針對所有最上層和重疊的視窗呼叫,包括變更系統選擇區並導致訊息傳送的 WM_PALETTECHANGED
視窗。 如果有任何子視窗使用調色盤,則此訊息必須傳遞給它。
為了避免無限迴圈,除非窗口判斷 pFocusWnd
不包含本身指標,否則視窗不應該實現其調色盤。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnPaletteIsChanging
架構會呼叫這個成員函式,通知應用程式應用程式將實現其邏輯選擇區。
afx_msg void OnPaletteIsChanging(CWnd* pRealizeWnd);
參數
pRealizeWnd
指定即將實現其邏輯調色盤的視窗。
備註
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnParentNotify
當架構的 OnParentNotify
子視窗建立或終結時,或是當使用者在子視窗上方按下滑鼠按鈕時,架構會呼叫父成員函式。
afx_msg void OnParentNotify(
UINT message,
LPARAM lParam);
參數
message
指定要通知父系的事件,以及子視窗的標識碼。 事件是的低序字。message
如果事件為 WM_CREATE
或 WM_DESTROY
,則 的高順序字組 message
是子視窗的標識符,否則,高序字組為未定義。 事件 (低序字 message
) 可以是下列任何值:
WM_CREATE
正在建立子視窗。WM_DESTROY
子視窗正在終結。WM_LBUTTONDOWN
使用者已將滑鼠游標放在子視窗上方,然後按鼠左鍵。WM_MBUTTONDOWN
使用者已將滑鼠游標放在子視窗上方,然後按兩下中間滑鼠按鈕。WM_RBUTTONDOWN
使用者已將滑鼠游標放在子視窗上方,然後按鼠右鍵。
lParam
如果的事件 (低序字) message
為 WM_CREATE
或 WM_DESTROY
, lParam
則指定子視窗的視窗句柄,否則 lParam
會包含游標的 x 和 y 座標。 x 座標為低序字,而 y 座標則為高序字。
備註
建立子視窗時,系統會在建立視窗的成員函式傳回之前Create
呼叫 OnParentNotify
。 當子視窗被終結時,系統會在進行任何處理之前呼叫 OnParentNotify
,以終結視窗。
OnParentNotify
會針對子視窗的所有上階視窗呼叫,包括最上層視窗。
除了具有樣式的子視窗以外,所有 WS_EX_NOPARENTNOTIFY
子視窗都會將此訊息傳送至其父視窗。 根據預設,對話框中的子視窗具有樣式, WS_EX_NOPARENTNOTIFY
除非呼叫成員函式來建立沒有此樣式的 CreateEx
子視窗。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnPowerBroadcast
架構會在電源管理事件發生時呼叫這個成員函式。
afx_msg UINT OnPowerBroadcast(
UINT nPowerEvent,
UINT nEventData);
參數
nPowerEvent
[in]電源管理事件。
nEventData
[in]事件特定數據。
傳回值
如果事件是要求,請返回 TRUE
以授與要求,或 BROADCAST_QUERY_DENY
拒絕要求。
備註
此方法會 WM_POWERBROADCAST
接收訊息,如 Windows SDK 中所述。
參數 nPowerEvent
會指定電池電力不足、電源狀態已變更、要求或拒絕暫停作業的許可權、在事件後自動繼續作業、系統暫停作業,或在暫停後繼續作業等事件。 nEventData
參數通常不會使用。 如需詳細資訊,請參閱wParam
訊息的 WM_POWERBROADCAST
和 lParam
參數。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnQueryDragIcon
架構會呼叫這個成員函式的最小化(圖示)視窗,該視窗沒有為其類別定義的圖示。
afx_msg HCURSOR OnQueryDragIcon();
傳回值
雙字值,其中包含低序字中的游標或圖示句柄。 游標或圖示必須與顯示驅動程式的解析度相容。 如果應用程式傳 NULL
回 ,系統會顯示預設數據指標。 預設傳回值為 NULL
。
備註
系統會進行此呼叫,以取得要顯示的數據指標,而使用者拖曳最小化的視窗。 如果應用程式傳回圖示或游標的句柄,系統會將它轉換成黑白。 如果應用程式傳回句柄,句柄必須識別與顯示驅動程式解析度相容的單色游標或圖示。 應用程式可以呼叫 CWinApp::LoadCursor
或 CWinApp::LoadIcon
成員函式,從其可執行檔中的資源載入游標或圖示,並取得此句柄。
CWnd::OnQueryEndSession
當使用者選擇結束 Windows 會話或應用程式呼叫 ExitWindows
Windows 函式時,架構會呼叫這個成員函式。
afx_msg BOOL OnQueryEndSession();
傳回值
如果應用程式可以方便關閉,則為非零;否則為 0。
備註
如果有任何應用程式傳回 0,則不會結束 Windows 會話。 Windows 會在一個應用程式傳回 0 時立即停止呼叫 OnQueryEndSession
, WM_ENDSESSION
並針對任何已經傳回非零的應用程式傳送參數值 FALSE
為 的訊息。
CWnd::OnQueryNewPalette
架構會在物件即將接收輸入焦點時 CWnd
呼叫這個成員函式,讓您 CWnd
有機會在收到焦點時實現其邏輯調色盤。
afx_msg BOOL OnQueryNewPalette();
傳回值
如果 CWnd
實現其邏輯調色盤,則為非零;否則為 0。
CWnd::OnQueryOpen
架構會在物件最小化時 CWnd
呼叫這個成員函式,而使用者要求 CWnd
還原至其預先設定的大小和位置。
afx_msg BOOL OnQueryOpen();
傳回值
如果可以開啟圖示,則為非零,或0以防止開啟圖示。
備註
在 中 OnQueryOpen
, CWnd
不應該執行任何會導致啟用或焦點變更的動作(例如,建立對話框)。
CWnd::OnQueryUIState
呼叫以擷取視窗的使用者介面 (UI) 狀態。
afx_msg UINT OnQueryUIState();
傳回值
如果焦點指標與鍵盤快捷鍵可見,則傳回值為 NULL
。 否則,傳回值可以是下列其中一或多個值:
UISF_HIDEFOCUS
焦點指標已隱藏。UISF_HIDEACCEL
鍵盤快捷方式是隱藏的。UISF_ACTIVE
Windows XP:控制項應該以用於使用中控件的樣式繪製。
備註
此成員函式會模擬訊息的功能 WM_QUERYUISTATE
,如 Windows SDK 中所述。
CWnd::OnRawInput
當目前視窗取得原始輸入時,架構會呼叫這個成員函式。
afx_msg void OnRawInput(
UINT nInputCode,
HRAWINPUT hRawInput);
參數
nInputCode
[in]輸入程式代碼,指出應用程式是否在前景時發生輸入。 不論是哪一種情況,應用程式都必須呼叫 CWnd::DefWindowProc
,系統才能執行清除。 這個參數可以是下列其中一個 值:
RIM_INPUT
- 應用程式在前景時發生輸入。RIM_INPUTSINK
- 應用程式不在前景時發生輸入。
hRawInput
[in] RAWINPUT
包含來自裝置之原始輸入的結構句柄。
備註
此方法會 WM_INPUT
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnRButtonDblClk
當使用者按兩下滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnRButtonDblClk(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
設定滑鼠中鍵是否關閉。MK_RBUTTON
設定滑鼠右鍵是否關閉。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 y 座標。 這些座標一律與視窗左上角相對。
備註
只有具有CS_DBLCLKS樣式的 WNDCLASS
視窗可以接收 OnRButtonDblClk
呼叫。 這是 Microsoft Foundation Class Library 內窗口的預設值。 OnRButtonDblClk
當使用者按下、放開,然後再次按下系統按兩下時間限制內的滑鼠右鍵時,就會呼叫 Windows。 按兩下滑鼠右鍵實際上會產生四個事件: WM_RBUTTONDOWN
以及 WM_RBUTTONUP
當按鈕放開時,呼叫 OnRButtonDblClk
和另一個WM_RBUTTONUP訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnRButtonDown
當使用者按下滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnRButtonDown(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
設定滑鼠中鍵是否關閉。MK_RBUTTON
設定滑鼠右鍵是否關閉。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 y 座標。 這些座標一律與視窗左上角相對。
備註
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnRButtonUp
當使用者放開滑鼠右鍵時,架構會呼叫這個成員函式。
afx_msg void OnRButtonUp(
UINT nFlags,
CPoint point);
參數
nFlags
指出各種虛擬金鑰是否已關閉。 此參數可以是下列值的任何組合:
MK_CONTROL
如果 CTRL 鍵關閉,請設定 。MK_LBUTTON
如果滑鼠左鍵已關閉,請設定 。MK_MBUTTON
設定滑鼠中鍵是否關閉。MK_SHIFT
如果 SHIFT 鍵關閉,請設定 。
point
指定游標的 x 和 y 座標。 這些座標一律與視窗左上角相對。
備註
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnRegisteredMouseWheel
架構會在使用者旋轉滑鼠滾輪時呼叫這個成員函式,並遇到滾輪的下一個凹口。
afx_msg LRESULT OnRegisteredMouseWheel(
WPARAM wParam,
LPARAM lParam);
參數
wParam
指標的水準位置。
lParam
指標的垂直位置。
傳回值
目前微不足道。 一律為零。
備註
除非覆寫,否則會將 OnRegisteredMouseWheel
訊息路由傳送至適當的視窗(具有焦點的父視窗),並呼叫該視窗的 WM_MOUSEWHEEL
處理程式。
覆寫此成員函式以提供您自己的訊息路由,或變更滑鼠滾輪捲動行為。
注意
OnRegisteredMouseWheel
會處理 Windows 95/98 和 Windows NT 3.51 的訊息。 針對 Windows NT 4.0 訊息處理,請使用 OnMouseWheel
。
CWnd::OnRenderAllFormats
當擁有者應用程式被終結時,架構會呼叫剪貼簿擁有者 OnRenderAllFormats
的成員函式。
afx_msg void OnRenderAllFormats();
備註
剪貼簿擁有者應該以能夠產生的所有格式轉譯數據,並藉由呼叫 SetClipboardData
Windows 函式,將每個格式的數據句柄傳遞至剪貼簿。 這可確保剪貼簿包含有效的數據,即使轉譯數據的應用程式已終結也一樣。 應用程式應該先呼叫 OpenClipboard
成員函式, SetClipboardData
再呼叫 Windows 函式,然後呼叫 CloseClipboard
Windows 函式。
CWnd::OnRenderFormat
需要轉譯具有延遲轉譯的特定格式時,架構會呼叫剪貼簿擁有者 OnRenderFormat
的成員函式。
afx_msg void OnRenderFormat(UINT nFormat);
參數
nFormat
指定剪貼簿格式。
備註
接收者應該以該格式轉譯數據,並藉由呼叫 SetClipboardData
Windows 函式將其傳遞至剪貼簿。
請勿從內呼叫 OpenClipboard
成員函式或 CloseClipboard
Windows 函 OnRenderFormat
式。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSessionChange
架構會呼叫此成員函式,以通知應用程式會話狀態的變更。
afx_msg void OnSessionChange(
UINT nSessionState,
UINT nId);
參數
nSessionState
[in]狀態代碼描述會話狀態變更。
nId
[in]會話標識碼。
備註
此方法會 WM_WTSSESSION_CHANGE
接收 Windows SDK 中所述的通知。
參數 nSessionState
會指定會話已與控制台或遠端終端機連線或中斷連線、使用者登入或關閉、會話已鎖定或解除鎖定,或會話已變更為遠端控制狀態。 如需詳細資訊,請參閱 wParam
訊息的參數 WM_WTSSESSION_CHANGE
。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSetCursor
如果未擷取滑鼠輸入,而且滑鼠會導致物件內的 CWnd
游標移動,架構會呼叫這個成員函式。
afx_msg BOOL OnSetCursor(
CWnd* pWnd,
UINT nHitTest,
UINT message);
參數
pWnd
指定包含游標之視窗的指標。 指標可能是暫時的,不應該儲存以供日後使用。
nHitTest
指定 點擊測試 區域代碼。 點擊測試會決定游標的位置。
message
指定滑鼠訊息編號。
傳回值
非零停止進一步處理,或 0 繼續。
備註
預設實作會在處理之前呼叫父視窗的 OnSetCursor
。 如果父視窗傳 TRUE
回 ,則會停止進一步處理。 呼叫父視窗會提供子視窗中游標設定的父視窗控件。
如果游標不在工作區中,則預設實作會將游標設定為箭號,如果不在工作區中,則設定為已註冊類別的數據指標。
如果 nHitTest
是 HTERROR
且 message
是滑鼠按鈕向下訊息,則會 MessageBeep
呼叫成員函式。
輸入功能表模式時CWnd
,訊息參數為0。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSetFocus
架構會在取得輸入焦點之後呼叫這個成員函式。
afx_msg void OnSetFocus(CWnd* pOldWnd);
參數
pOldWnd
包含 CWnd
失去輸入焦點的物件(可能是 NULL
)。 指標可能是暫時的,不應該儲存以供日後使用。
備註
若要顯示插入號, CWnd
此時應該呼叫適當的插入號函式。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSettingChange
當 Win32 SystemParametersInfo 函式變更全系統設定時,架構會呼叫 OnSettingChange
所有最上層視窗。
afx_msg void OnSettingChange(
UINT uFlags,
LPCTSTR lpszSection);
參數
uFlags
當系統因為呼叫而 SystemParametersInfo
傳送訊息時,這個參數是指出系統參數已變更的旗標。 如需值清單,請參閱 SystemParametersInfo
Windows SDK 中的 。 當應用程式傳送訊息時,此參數必須是 0。
lpszSection
指向指定已變更之區段名稱的字串。 (字串不包含括住區段名稱的方括弧。
備註
當應用程式變更系統參數時,應用程式應該將訊息傳送至所有最上層視窗,如果使用者透過 控制台 變更設定,Windows 就會傳送訊息。
訊息 ON_WM_SETTINGCHANGE
與 ON_WM_WININICHANGE
訊息類似,但有下列差異:
執行
ON_WM_SETTINGCHANGE
Windows NT 4.0 或更新版本或 Windows 95/98 時使用。執行 Windows NT 3.51 或更新版本時使用
ON_WININICHANGE
。 此訊息現在已過時。
訊息對應中應該只有其中一個巨集。 若要撰寫適用於 Windows 95/98 和 Windows NT 4.0 的程式,請為 撰寫 處理程式 ON_WM_SETTINGCHANGE
。 在 Windows NT 3.51 下,您的處理程式將會由 OnSettingChange
和 uFlags
呼叫,而且一律為零。
CWnd::OnShowWindow
當物件即將隱藏或顯示時, CWnd
架構會呼叫這個成員函式。
afx_msg void OnShowWindow(
BOOL bShow,
UINT nStatus);
參數
bShow
指定是否要顯示視窗。 如果 TRUE
視窗正在顯示,則為 ,如果視窗正在隱藏,則為 FALSE
。
nStatus
指定要顯示之視窗的狀態。 如果訊息因為 ShowWindow
成員函式呼叫而傳送,則為0;否則 nStatus
為下列其中一項:
SW_PARENTCLOSING
父視窗正在關閉(成為標誌性的)或彈出視窗正在隱藏。SW_PARENTOPENING
父視窗正在開啟(正在顯示),或正在顯示彈出視窗。
備註
當呼叫成員函式、最大化或 ShowWindow
還原重疊的視窗,或當重疊或彈出視窗關閉(成為圖示)或開啟時,就會隱藏或顯示視窗。 當重疊的視窗關閉時,與該視窗相關聯的所有彈出視窗都會隱藏。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSize
架構會在視窗的大小變更之後呼叫這個成員函式。
afx_msg void OnSize(
UINT nType,
int cx,
int cy);
參數
nType
指定要求的重設大小類型。 這個參數可以是下列其中一個 值:
SIZE_MAXIMIZED
視窗已最大化。SIZE_MINIMIZED
視窗已最小化。SIZE_RESTORED
視窗已重設大小,但兩者SIZE_MINIMIZED
都未套用。SIZE_MAXIMIZED
SIZE_MAXHIDE
當其他視窗最大化時,訊息會傳送至所有彈出視窗。SIZE_MAXSHOW
當其他視窗還原至其先前的大小時,訊息會傳送至所有彈出視窗。
cx
指定工作區的新寬度。
cy
指定工作區的新高度。
備註
SetScrollPos
如果針對 的OnSize
子視窗呼叫 或 MoveWindow
成員函式,bRedraw
則 或 MoveWindow
的 SetScrollPos
參數應該是非零,導致 CWnd
重新繪製 。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
範例
// Resize the edit control contained in the view to
// fill the entire view when the view's window is
// resized. CMdiView is a CView derived class.
void CMdiView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// Resize edit to fill the whole view.
// OnSize can be called before OnInitialUpdate
// so make sure the edit control has been created.
if (::IsWindow(m_Edit.GetSafeHwnd()))
{
m_Edit.MoveWindow(0, 0, cx, cy);
}
}
CWnd::OnSizeClipboard
當剪貼簿包含具有 CF_OWNERDISPLAY
屬性的數據,且剪貼簿查看器的工作區大小已變更時,剪貼簿查看器會呼叫剪貼簿擁有OnSizeClipboard
者的成員函式。
afx_msg void OnSizeClipboard(
CWnd* pClipAppWnd,
HGLOBAL hRect);
參數
pClipAppWnd
識別剪貼簿應用程式視窗。 指標可能是暫時的,不應該儲存。
hRect
識別全域記憶體物件。 記憶體物件包含 RECT
數據結構,指定要繪製之剪貼簿擁有者的區域。
備註
當剪貼簿應用程式即將終結或最小化時,成員 OnSizeClipboard
函式會以 Null 矩形(0,0,0,0,0)呼叫為新的大小。 這可讓剪貼簿擁有者釋放其顯示資源。
在內 OnSizeClipboard
,應用程式必須使用 GlobalLock
Windows 函式來鎖定包含 RECT
資料結構的記憶體。 讓應用程式在產生或傳回控件之前,先解除鎖定 Windows 函式的 GlobalUnlock
記憶體。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSizing
架構會呼叫這個成員函式,指出使用者調整矩形的大小。
afx_msg void OnSizing(
UINT nSide,
LPRECT lpRect);
參數
nSide
要移動之視窗的邊緣。
lpRect
CRect
將包含專案座標的 或 RECT
結構的位址。
備註
藉由處理此訊息,應用程式可以監視拖曳矩形的大小和位置,並視需要變更其大小或位置。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
範例
void CSplitChildFrm::OnSizing(UINT fwSide, LPRECT pRect)
{
CMDIChildWnd::OnSizing(fwSide, pRect);
// Resize the splitter window in the frame. m_wndSplitter is of
// type CSplitterWnd
int nWidth = (pRect->right) - (pRect->left);
m_wndSplitter.SetColumnInfo(0, nWidth / 2, 10);
m_wndSplitter.SetColumnInfo(1, nWidth / 2, 10);
m_wndSplitter.RecalcLayout();
}
CWnd::OnSpoolerStatus
每當從 Print Manager 佇列新增或移除作業時,架構就會從 Print Manager 呼叫這個成員函式。
afx_msg void OnSpoolerStatus(
UINT nStatus,
UINT nJobs);
參數
nStatus
指定 SP_JOBSTATUS
旗標。
nJobs
指定列印管理員佇列中剩餘的作業數目。
備註
此呼叫僅供參考之用。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnStyleChanged
架構會在函式變更一或多個窗口樣式之後 SetWindowLong
呼叫這個成員函式。
afx_msg void OnStyleChanged(
int nStyleType,
LPSTYLESTRUCT lpStyleStruct);
參數
nStyleType
指定視窗的延伸或無xtended 樣式是否已變更。 此參數可以是下列值的組合:
GWL_EXSTYLE
視窗的延伸樣式已變更。GWL_STYLE
視窗的 nonextended 樣式已變更。
lpStyleStruct
指向 STYLESTRUCT
包含視窗新樣式的結構。 應用程式可以檢查樣式,但無法變更它們。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnStyleChanging
當函式即將變更視窗的一或多個樣式時, SetWindowLong
架構會呼叫這個成員函式。
afx_msg void OnStyleChanging(
int nStyleType,
LPSTYLESTRUCT lpStyleStruct);
參數
nStyleType
指定視窗的延伸或無xtended 樣式是否已變更。 此參數可以是下列值的組合:
GWL_EXSTYLE
視窗的延伸樣式已變更。GWL_STYLE
視窗的 nonextended 樣式已變更。
lpStyleStruct
指向 STYLESTRUCT
包含視窗新樣式的結構。 應用程式可以檢查樣式並加以變更。
備註
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSysChar
如果 CWnd
具有輸入焦點和 和 WM_SYSKEYUP
WM_SYSKEYDOWN
訊息,則架構會呼叫這個成員函式。
afx_msg void OnSysChar(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定 Control-menu 鍵的 ASCII 字元按鍵碼。
nRepCnt
指定重複計數,也就是使用者按住按鍵而重複擊鍵的次數。
nFlags
參數 nFlags
可以有下列值:
值 | 意義 |
---|---|
0-15 | 指定重複計數。 值是使用者按住按鍵而重複擊鍵的次數。 |
16-23 | 指定掃描碼。 此值取決於原始裝置製造商 (OEM) |
24 | 指定按鍵是否為擴充按鍵,例如增強型 101 鍵或 102 鍵鍵盤上出現的右鍵 ALT 鍵和 CTRL 鍵。 如果它是擴充索引鍵,則值為 1;否則為 0。 |
25-28 | Windows 在內部使用。 |
29 | 指定內容程序代碼。 如果按下按鍵時按住 ALT 鍵,則值為 1;否則,值為 0。 |
30 | 指定先前的索引鍵狀態。 如果索引鍵在傳送訊息之前關閉,則值為 1,如果機碼已啟動,則為 0。 |
31 | 指定轉換狀態。 如果放開按鍵,則值為 1,如果按下按鍵則為 0。 |
備註
它會指定 Control-menu 鍵的虛擬機碼。 (如需標準虛擬密鑰碼的清單,請參閱 Winuser.h)
當內容程式代碼為 0 時, WM_SYSCHAR
可以將訊息傳遞 WM_SYSCHAR
至 TranslateAccelerator
Windows 函式,該函式會將其處理為一般金鑰訊息,而不是系統字元索引鍵。 這可讓快捷鍵與活動視窗搭配使用,即使活動窗口沒有輸入焦點也一樣。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 其他一些鍵盤可能支援 中的 nFlags
擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSysColorChange
架構會在系統色彩設定中變更時,針對所有最上層視窗呼叫這個成員函式。
afx_msg void OnSysColorChange();
備註
Windows 會呼叫 OnSysColorChange
任何受系統色彩變更影響的視窗。
具有使用現有系統色彩之筆刷的應用程式應該刪除這些筆刷,並使用新的系統色彩重新建立它們。
CWnd::OnSysCommand
當使用者從 [控件] 功能選取命令,或當使用者選取 [最大化] 或 [最小化] 按鈕時,架構會呼叫這個成員函式。
afx_msg void OnSysCommand(
UINT nID,
LPARAM lParam);
參數
nID
指定所要求的系統命令類型。 此參數可以是下列任一值:
SC_CLOSE
CWnd
關閉物件。SC_HOTKEY
CWnd
啟動與應用程式指定之熱鍵相關聯的物件。 的低序字lParam
會HWND
識別要啟動之視窗的 。SC_HSCROLL
水平捲動。SC_KEYMENU
透過擊鍵擷取功能表。SC_MAXIMIZE
(或SC_ZOOM
)CWnd
最大化物件。SC_MINIMIZE
(或SC_ICON
)CWnd
將物件最小化。SC_MOUSEMENU
透過滑鼠按兩下來擷取功能表。SC_MOVE
CWnd
移動物件。SC_NEXTWINDOW
移至下一個視窗。SC_PREVWINDOW
移至上一個視窗。SC_RESTORE
將視窗還原為一般位置和大小。SC_SCREENSAVE
執行檔案 [開機] 區段中SYSTEM.INI
指定的屏幕保護應用程式。SC_SIZE
調整CWnd
物件的大小。SC_TASKLIST
執行或啟動 Windows 任務管理員應用程式。SC_VSCROLL
垂直捲動。
lParam
如果使用滑鼠選擇 Control-menu 命令, lParam
則包含游標座標。 低序字包含 x 座標,而高階字則包含 y 座標。 否則不會使用此參數。
SC_HOTKEY
啟動與應用程式指定熱鍵相關聯的視窗。 的低序字lParam
會識別要啟動的視窗。SC_SCREENSAVE
執行 控制台的 Desktop 區段中指定的螢幕儲存應用程式。
備註
根據預設, OnSysCommand
執行上表所指定之預先定義動作的Control-menu要求。
在訊息中 WM_SYSCOMMAND
,Windows 會在內部使用參數的 nID
四個低序位。 當應用程式測試的值 nID
時,它必須使用 bit-AND 運算符,將值0xFFF0與 nID
值結合,以取得正確的結果。
[控件] 選單中的功能表項可以使用、 AppendMenu
InsertMenu
和 ModifyMenu
成員函式來修改GetSystemMenu
。 變更 [控制項] 選單的應用程式必須處理 WM_SYSCOMMAND
訊息,而且應用程式未處理的任何 WM_SYSCOMMAND
訊息都必須傳遞至 OnSysCommand
。 應用程式所新增的任何命令值都必須由應用程式處理,而且無法傳遞至 OnSysCommand
。
應用程式可以隨時透過將訊息傳遞 WM_SYSCOMMAND
至 OnSysCommand
來執行任何系統命令。
定義以從 [控件] 功能選取專案的快捷鍵(快速鍵)按鍵會轉譯為 OnSysCommand
呼叫;所有其他快捷鍵按鍵都會轉譯成 WM_COMMAND
訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSysDeadChar
如果CWnd
物件在呼叫 或 OnSysKeyDown
成員函式時OnSysKeyUp
具有輸入焦點,則架構會呼叫這個成員函式。
afx_msg void OnSysDeadChar(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定死鍵字元值。
nRepCnt
指定重複計數。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | 意義 |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 高序字組的低位元組。 |
8 | 擴充鍵,例如數字鍵臺上的函數鍵或索引鍵(如果它是擴充鍵則為 1,否則為 0)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1;否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在呼叫之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
備註
它會指定死鍵的字元值。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSysKeyDown
CWnd
如果物件具有輸入焦點,當使用者按住 ALT 鍵,然後按下另一個按鍵時,OnSysKeyDown
架構會呼叫成員函式。
afx_msg void OnSysKeyDown(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定所按下按鍵的虛擬按鍵碼。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h
nRepCnt
指定重複計數。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | 意義 |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 高序字組的低位元組。 |
8 | 擴充鍵,例如數字鍵臺上的函數鍵或索引鍵(如果它是擴充鍵則為 1,否則為 0)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1,否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在傳送訊息之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
針對 OnSysKeyDown
呼叫,金鑰轉換位 (位 15) 為 0。 如果按下按鍵時 ALT 鍵已關閉,則內容代碼位 (位 13) 為 1;如果訊息傳送至活動視窗,則為0,因為沒有視窗具有輸入焦點。
備註
如果目前沒有任何視窗具有輸入焦點,則會呼叫活動窗口 OnSysKeyDown
的成員函式。 CWnd
接收訊息的物件可以藉由檢查 中的nFlags
內容程式代碼來區分這兩個內容。
當內容程式代碼為 0 時, WM_SYSKEYDOWN
所 OnSysKeyDown
收到的訊息可以傳遞至 TranslateAccelerator
Windows 函式,其會處理它,就像是一般金鑰訊息,而不是系統密鑰訊息一樣。 這可讓快捷鍵與活動視窗搭配使用,即使活動窗口沒有輸入焦點也一樣。
由於自動重複,在收到訊息之前WM_SYSKEYUP
,可能會發生多個OnSysKeyDown
呼叫。 先前的索引鍵狀態 (位元 14) 可用來判斷 OnSysKeyDown
呼叫指出第一個向下轉換或重複的向下轉換。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主要區段的右 ALT 和右 CTRL 鍵; INS、 DEL、 HOME、 END、 PAGE UP、PAGE UP、 PAGE DOWN,以及數位鍵台左邊的叢集中的箭頭鍵;以及數位鍵台左邊的斜線 (/) 和 ENTER 鍵。 其他一些鍵盤可能支援 中的 nFlags
擴充按鍵位。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnSysKeyUp
CWnd
如果物件具有焦點,OnSysKeyUp
當使用者放開 ALT 鍵時按下的按鍵時,架構會呼叫成員函式。
afx_msg void OnSysKeyUp(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
指定所按下按鍵的虛擬按鍵碼。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h
nRepCnt
指定重複計數。
nFlags
指定掃描程式代碼、金鑰轉換程式代碼、先前的索引鍵狀態和內容程式代碼,如下列清單所示:
值 | 意義 |
---|---|
0-7 | 掃描代碼 (OEM 相依值)。 高序字組的低位元組。 |
8 | 擴充鍵,例如數字鍵臺上的函數鍵或索引鍵(如果它是擴充鍵則為 1,否則為 0)。 |
9-10 | 未使用。 |
11-12 | Windows 在內部使用。 |
13 | 內容代碼 (如果在按下按鍵時按住 ALT 鍵,則為 1,否則為 0)。 |
14 | 先前的索引鍵狀態 (如果金鑰在傳送訊息之前關閉,則為 1,如果機碼已啟動,則為 0)。 |
15 | 轉換狀態 (如果放開按鍵,則為 1,如果按下按鍵則為 0)。 |
針對 OnSysKeyUp
呼叫,金鑰轉換位 (位 15) 為 1。 如果按下按鍵時 ALT 鍵已關閉,則內容代碼位 (位 13) 為 1;如果訊息傳送至活動視窗,則為0,因為沒有視窗具有輸入焦點。
備註
如果目前沒有任何視窗具有輸入焦點,則會呼叫活動窗口 OnSysKeyUp
的成員函式。 CWnd
接收呼叫的物件可以藉由檢查 中的nFlags
內容程式代碼來區分這兩個內容。
當內容程式代碼為 0 時, WM_SYSKEYUP
所 OnSysKeyUp
收到的訊息可以傳遞至 TranslateAccelerator
Windows 函式,其會處理它,就像是一般金鑰訊息,而不是系統密鑰訊息一樣。 這可讓快捷鍵(快速鍵)與活動視窗搭配使用,即使活動窗口沒有輸入焦點也一樣。
針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主區段的右 ALT 鍵和右 CTRL 鍵;數值鍵盤左側叢集中的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭頭鍵;和數位鍵台中的斜線 (/) 和 ENTER 鍵。 有些其他鍵盤可能支持 nFlags 中的擴充按鍵位。
適用於非美國增強的 102 鍵鍵盤,右 ALT 鍵會當做 CTRL+ALT 按鍵組合來處理。 下列顯示使用者按下並放開此機碼時所產生的訊息和呼叫順序:
序列 | 已存取函式 | 傳遞的訊息 |
---|---|---|
1. | WM_KEYDOWN |
VK_CONTROL |
2. | WM_KEYDOWN |
VK_MENU |
3. | WM_KEYUP |
VK_CONTROL |
4. | WM_SYSKEYUP |
VK_MENU |
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnTCard
當使用者按兩下可撰寫按鈕時,架構會呼叫這個成員函式。
afx_msg void OnTCard(
UINT idAction,
DWORD dwActionData);
參數
idAction
指出使用者已採取的動作。 此參數可以是下列其中一個值:
IDABORT
用戶按兩下了可撰寫的 [中止] 按鈕。IDCANCEL
用戶按兩下了可撰寫的 [取消] 按鈕。IDCLOSE
使用者關閉訓練卡片。IDHELP
用戶按兩下可撰寫的 Windows 說明按鈕。IDIGNORE
用戶按兩下了可撰寫的 [忽略] 按鈕。IDOK
用戶按兩下了可撰寫的 [確定] 按鈕。IDNO
用戶按下可撰寫的 [否] 按鈕。IDRETRY
用戶按兩下了可撰寫的 [重試] 按鈕。HELP_TCARD_DATA
用戶按兩下可撰寫的按鈕。 參數dwActionData
包含說明作者所指定的長整數。HELP_TCARD_NEXT
用戶按兩下一步按鈕。HELP_TCARD_OTHER_CALLER
另一個應用程式已要求訓練卡片。IDYES
用戶按下可撰寫的 [是] 按鈕。
dwActionData
如果 idAction
指定 HELP_TCARD_DATA
,這個參數是由說明作者指定的長整數。 否則,此參數為零。
備註
只有在應用程式使用 Windows 說明起始定型卡片時,才會呼叫此函式。 應用程式會藉由在函式呼叫WinHelp
中指定 HELP_TCARD
命令來起始定型卡片。
CWnd::OnTimeChange
架構會在系統時間變更之後呼叫這個成員函式。
afx_msg void OnTimeChange();
備註
讓任何應用程式變更系統時間,將此訊息傳送至所有最上層視窗。 若要將 WM_TIMECHANGE
訊息傳送至所有最上層視窗,應用程式可以使用 SendMessage
Windows 函式,並將其 hwnd
參數設定為 HWND_BROADCAST
。
CWnd::OnTimer
架構會在用來安裝定時器的成員函式中指定的 SetTimer
每個間隔之後呼叫這個成員函式。
afx_msg void OnTimer(UINT_PTR nIDEvent);
參數
nIDEvent
指定定時器的識別碼。
備註
DispatchMessage
當應用程式消息佇列中沒有其他訊息時,Windows 函式會傳送WM_TIMER
訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
範例
請參閱CWnd::SetTimer
中的範例。
CWnd::OnToolHitTest
架構會呼叫這個成員函式,以判斷某個點是否位於指定工具的周框內。
virtual INT_PTR OnToolHitTest(
CPoint point,
TOOLINFO* pTI) const;
參數
point
指定游標的 x 和 Y 座標。 這些座標一律與視窗左上角相對
pTI
結構的指標 TOOLINFO
。 預設會設定下列結構值:
hwnd
=m_hWnd
視窗的句柄uId
=(UINT)hWndChild
子視窗的句柄uFlags
|=TTF_IDISHWND
工具的句柄lpszText
=LPSTR_TEXTCALLBACK
要顯示在指定視窗中之字串的指標
傳回值
如果找到工具提示控件,視窗控件標識符。 如果找不到工具提示控件,則為 -1。
備註
如果點位於矩形中,它會擷取工具的相關信息。
如果工具提示相關聯的區域不是按鈕, OnToolHitTest
請將結構旗標設定為 TTF_NOTBUTTON
和 TTF_CENTERTIP
。
覆寫 OnToolHitTest
以提供與預設提供的不同資訊。
如需 結構的詳細資訊,請參閱 TOOLINFO
Windows SDK 中的 。
CWnd::OnTouchInput
處理來自 Windows 觸控的單一輸入。
virtual BOOL OnTouchInput(
CPoint pt,
int nInputNumber,
int nInputsCount,
PTOUCHINPUT pInput);
參數
pt
指向螢幕已觸及的位置(在用戶端座標中)。
nInputNumber
觸控輸入的數目。
nInputsCount
觸控輸入的總數。
pInput
TOUCHINPUT
結構的指標。
傳回值
TRUE
如果應用程式處理 Windows 觸控輸入,則為 ;否則 FALSE
為 。
備註
CWnd::OnTouchInputs
處理 Windows 觸控的輸入。
virtual BOOL OnTouchInputs(
UINT nInputsCount,
PTOUCHINPUT pInputs);
參數
nInputsCount
Windows 觸控輸入的總數。
pInputs
的 TOUCHINPUT
陣列。
傳回值
TRUE
如果應用程式處理 Windows 觸控輸入,則為 ;否則 FALSE
為 。
備註
CWnd::OnUniChar
當按下按鍵時,架構會呼叫這個成員函式。 也就是說,目前的視窗具有鍵盤焦點,而且 WM_KEYDOWN
函式會 TranslateMessage
翻譯訊息。
afx_msg void OnUniChar(
UINT nChar,
UINT nRepCnt,
UINT nFlags);
參數
nChar
[in]指定所按下按鍵的字元碼。
nRepCnt
[in]指定目前訊息的重複計數。 值是使用者按住按鍵而自動回復的次數。 如果擊鍵的時間夠長,就會傳送多個訊息。 不過,重複計數不是累計的。
nFlags
[in]指定掃描程式代碼、擴充索引鍵、內容程序代碼、上一個索引鍵狀態和轉換狀態的旗標,如下表所示:
標幟位 | 描述 |
---|---|
0-7 | 指定掃描碼。 此值取決於原始設備製造商(OEM)。 |
8 | 指定擴充鍵,例如顯示在增強式 101 或 102 鍵鍵盤上的右鍵 ALT 和 CTRL 鍵。 如果索引鍵是擴充索引鍵,則旗標為 1;否則為 0。 |
9-12 | Windows 在內部使用。 |
13 | 指定內容程序代碼。 如果按下按鍵時按住 ALT 鍵,則旗標為 1;否則,值為 0。 |
14 指定先前的索引鍵狀態。 如果訊息傳送前索引鍵已關閉,則旗標為 1,如果機碼已啟動,則為 0。 | |
15 | 指定轉換狀態。 如果放開按鍵,則旗標為 1,如果按下按鍵則為 0。 |
備註
此方法會 WM_UNICHAR
接收 Windows SDK 中所述的通知。 訊息 WM_UNICHAR
的設計目的是將 Unicode 字元傳送或張貼至 ANSI 視窗。 它相當於 WM_CHAR
訊息,但使用 Unicode 轉換格式-32 編碼(UTF-32),而訊息則 WM_CHAR
使用 UTF-16。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnUnInitMenuPopup
架構會在下拉功能表或子功能表終結時呼叫這個成員函式。
afx_msg void OnUnInitMenuPopup(
CMenu* pPopupMenu,
UINT nFlags);
參數
pMenu
[in] CMenu
代表功能表或子功能表的物件指標。
nFlags
[in]已終結的功能表。 目前,它只能是視窗功能表。 MF_SYSMENU
備註
此方法會 WM_UNINITMENUPOPUP
接收 Windows SDK 中所述的通知。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnUpdateUIState
呼叫以變更指定的視窗及其所有子視窗的使用者介面 (UI) 狀態。
afx_msg void OnUpdateUIState(
UINT nAction,
UINT nUIElement);
參數
nAction
指定要執行的動作。 可以是下列值之一:
UIS_CLEAR
UI 狀態元素 (由nUIElement
指定) 應隱藏。UIS_INITIALIZE
UI 狀態元素 (由nUIElement
指定) 應該根據最後一個輸入事件來變更。 如需詳細資訊,請參閱 的 一WM_UPDATEISTATE
節。UIS_SET
UI 狀態元素 (由nUIElement
指定) 應該可見。
nUIElement
指定受影響的UI狀態元素或控件的樣式。 可以是下列值之一:
UISF_HIDEACCEL
鍵盤快捷方式。UISF_HIDEFOCUS
焦點指標。UISF_ACTIVE
Windows XP:控制項應該以用於使用中控件的樣式繪製。
備註
此成員函式會模擬訊息的功能 WM_UPDATEUISTATE
,如 Windows SDK 中所述。
CWnd::OnUserChanged
架構會在使用者登入或關閉之後,針對所有視窗呼叫這個成員。
afx_msg void OnUserChanged();
備註
此方法會 WM_USERCHANGED
接收 Windows SDK 中所述的通知訊息。 當使用者登入或關閉時,操作系統會更新使用者特定的設定。 系統會在更新設定之後立即傳送此訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnVKeyToItem
CWnd
如果對象擁有具有LBS_WANTKEYBOARDINPUT
樣式的清單框,清單框會傳送WM_VKEYTOITEM
訊息以回應WM_KEYDOWN
訊息。
afx_msg int OnVKeyToItem(
UINT nKey,
CListBox* pListBox,
UINT nIndex);
參數
nKey
指定使用者按下之按鍵的虛擬按鍵碼。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h
pListBox
指定清單框的指標。 指標可能是暫時的,不應該儲存以供日後使用。
nIndex
指定目前的插入號位置。
傳回值
指定應用程式回應訊息時所執行的動作。 -2 的傳回值表示應用程式會處理選取專案的所有層面,而且清單框不需要採取任何進一步的動作。 -1 的傳回值表示清單框應該執行預設動作以響應擊鍵。 傳回值 0 或更新值會指定清單框中專案以零起始的索引,並指出清單框應該對指定項目執行按鍵的預設動作。
備註
此成員函式只會由架構針對具有 LBS_HASSTRINGS
樣式的清單框呼叫。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnVScroll
當使用者按兩下視窗的垂直滾動條時,架構會呼叫這個成員函式。
afx_msg void OnVScroll(
UINT nSBCode,
UINT nPos,
CScrollBar* pScrollBar);
參數
nSBCode
指定滾動條代碼,指出使用者的捲動要求。 此參數可以是下列其中一項:
SB_BOTTOM
捲動到底部。SB_ENDSCROLL
結束卷動。SB_LINEDOWN
向下捲動一行。SB_LINEUP
向上捲動一行。SB_PAGEDOWN
向下捲動一頁。SB_PAGEUP
向上捲動一頁。SB_THUMBPOSITION
捲動至絕對位置。 目前的位置是在 中nPos
提供。SB_THUMBTRACK
將滾動盒拖曳至指定的位置。 目前的位置是在 中nPos
提供。SB_TOP
捲動至頂端。
nPos
如果滾動條代碼為 SB_THUMBPOSITION
或 SB_THUMBTRACK
,則包含目前的滾動盒位置,否則不會使用。 視初始捲動範圍而定,可能是負數, nPos
而且應該視需要轉換成 int
。
pScrollBar
如果卷動訊息來自滾動條控件,則包含控件的指標。 如果使用者按下視窗的捲動條,此參數為 NULL
。 指標可能是暫時的,不應該儲存以供日後使用。
備註
OnVScroll
通常會由在拖曳滾動盒時提供一些意見反應的應用程式使用。
如果 OnVScroll
卷動物件的內容 CWnd
,它也必須使用 SetScrollPos
成員函式重設滾動盒的位置。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnVScrollClipboard
當剪貼簿數據具有CF_OWNERDISPLAY
格式且剪貼簿查看器的垂直滾動條中有事件時,剪貼簿查看器OnVScrollClipboard
的成員函式會呼叫剪貼簿擁有者的成員函式。
afx_msg void OnVScrollClipboard(
CWnd* pClipAppWnd,
UINT nSBCode,
UINT nPos);
參數
pClipAppWnd
指定剪貼簿查看器視窗的指標。 指標可能是暫時的,不應該儲存以供日後使用。
nSBCode
指定下列其中一個捲動條值:
SB_BOTTOM
捲動到底部。SB_ENDSCROLL
結束卷動。SB_LINEDOWN
向下捲動一行。SB_LINEUP
向上捲動一行。SB_PAGEDOWN
向下捲動一頁。SB_PAGEUP
向上捲動一頁。SB_THUMBPOSITION
捲動至絕對位置。 目前的位置是在 中nPos
提供。SB_TOP
捲動至頂端。
nPos
如果滾動條代碼為 SB_THUMBPOSITION
,則包含滾動盒位置,否則 nPos
不會使用。
備註
擁有者應該捲動剪貼簿影像、使適當的區段失效,並更新滾動條值。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnWindowMaximizedChanged
架構會在目前的視窗最大化時呼叫這個成員,而視窗是由桌面視窗管理員 (DWM) 所組成。
afx_msg void OnWindowMaximizedChanged(BOOL bIsMaximized);
參數
bIsMaximized
[in] TRUE
如果目前的視窗最大化,則 FALSE
為 ,如果不是,則為 。
備註
此方法會 WM_DWMWINDOWMAXIMIZEDCHANGE
接收 Windows SDK 中所述的通知訊息。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnWindowPosChanged
當大小、位置或 Z 順序因為呼叫成員函式或其他視窗管理函式而變更時,架構會呼叫 SetWindowPos
這個成員函式。
afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);
參數
lpwndpos
WINDOWPOS
指向包含視窗新大小和位置相關信息的數據結構。
備註
默認實作會將和 WM_MOVE
訊息傳送WM_SIZE
至視窗。 如果應用程式在不呼叫其基類的情況下處理呼叫, OnWindowPosChanged
則不會傳送這些訊息。 在呼叫 OnWindowPosChanged
期間執行任何移動或大小變更處理,而不呼叫其基類會更有效率。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnWindowPosChanging
當大小、位置或 Z 順序因呼叫成員函式或其他視窗管理函式而即將變更時,架構會呼叫 SetWindowPos
這個成員函式。
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
參數
lpwndpos
WINDOWPOS
指向包含視窗新大小和位置相關信息的數據結構。
備註
應用程式可以藉由設定或清除 結構成員WINDOWPOS
中的flags
適當位,來防止變更視窗。
對於具有 或 WS_THICKFRAME
樣式的WS_OVERLAPPED
視窗,預設實作會將WM_GETMINMAXINFO
訊息傳送至視窗。 這樣做是為了驗證視窗的新大小和位置,以及強制執行 CS_BYTEALIGNCLIENT
和 CS_BYTEALIGN
客戶端樣式。 應用程式可以藉由不呼叫其基類來覆寫此功能。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnWinIniChange
架構會在對 Windows 初始化檔案進行變更之後呼叫這個成員函式。 WIN.INI
afx_msg void OnWinIniChange(LPCTSTR lpszSection);
參數
lpszSection
指向指定已變更之區段名稱的字串。 (字串不包含括住區段名稱的方括弧。
備註
Windows 函SystemParametersInfo
式會在應用程式使用 函式來變更檔案中的WIN.INI
設定之後呼叫OnWinIniChange
。
若要將 WM_WININICHANGE
訊息傳送至所有最上層視窗,應用程式可以使用 SendMessage
Windows 函式,並將其 hwnd
參數設定為 HWND_BROADCAST
。
如果應用程式同時變更許多不同的區段WIN.INI
,應用程式應該傳送一則WM_WININICHANGE
設定為NULL
的訊息lpszSection
。 否則,應用程式應該在每次變更 WIN.INI
時傳送 WM_WININICHANGE
。
如果應用程式收到設定為NULL
的OnWinIniChange
呼叫lpszSection
,應用程式應該檢查 WIN 中的所有區段。影響應用程式的 INI。
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnWndMsg
這個成員函式是由 WindowProc
呼叫,或在訊息反映期間呼叫。
virtual BOOL OnWndMsg(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
參數
message
指定要傳送的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
pResult
的 WindowProc
傳回值。 取決於訊息;可能是 NULL
。
傳回值
如果已處理訊息,則為TRUE;否則為 FALSE。
備註
OnWndMsg
會決定訊息類型,並呼叫適當的架構函式(例如 OnCommand
,針對 WM_COMMAND
),或在訊息對應中尋找適當的訊息。
如需訊息反映的詳細資訊,請參閱 處理反映的訊息。
CWnd::OnXButtonDblClk
當使用者按兩下 XBUTTON1
或 XBUTTON2
游標位於視窗的工作區時,架構會呼叫這個成員函式。
afx_msg void OnXButtonDblClk(
UINT nFlags,
UINT nButton,
CPoint point);
參數
nFlags
[in]旗標的位元組合 (OR) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。
nButton
[in]如果按兩下第一個Microsoft Intellimouse X 按鈕,則為的值 XBUTTON1
,如果按兩下第二個 X 按鈕,則為 XBUTTON2。
point
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_XBUTTONDBLCLK
接收 Windows SDK 中所述的通知。 如果未擷取滑鼠,訊息就會張貼到游標下方的視窗。 否則,訊息會張貼至擷取滑鼠的視窗。
參數 nFlags
可以是下表所列的修飾詞索引鍵組合。 如需詳細資訊,請參閱 關於滑鼠輸入。
修飾詞索引鍵 | 描述 |
---|---|
MK_CONTROL |
按下 CTRL 鍵。 |
MK_LBUTTON |
按下滑鼠左鍵。 |
MK_MBUTTON |
按下滑鼠中間按鈕。 |
MK_RBUTTON |
按下滑鼠右鍵。 |
MK_SHIFT |
按下SHIFT鍵。 |
MK_XBUTTON1 |
XBUTTON1 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
MK_XBUTTON2 |
XBUTTON2 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnXButtonDown
當使用者按下 XBUTTON1
或 XBUTTON2
游標位於視窗的工作區時,架構會呼叫這個成員函式。
afx_msg void OnXButtonDown(
UINT nFlags,
UINT nButton,
CPoint point);
參數
nFlags
[in]旗標的位元組合 (OR) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。
nButton
[in]如果按下第一個Microsoft Intellimouse X 按鈕,或XBUTTON2
按兩下第二個 X 按鈕,則值為 XBUTTON1
。
point
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_XBUTTONDOWN
接收 Windows SDK 中所述的通知。 如果未擷取滑鼠,訊息就會張貼到游標下方的視窗。 否則,訊息會張貼至擷取滑鼠的視窗。
參數 nFlags
可以是下表所列的修飾詞索引鍵組合。 如需詳細資訊,請參閱 關於滑鼠輸入。
修飾詞索引鍵 | 描述 |
---|---|
MK_CONTROL |
按下 CTRL 鍵。 |
MK_LBUTTON |
按下滑鼠左鍵。 |
MK_MBUTTON |
按下滑鼠中間按鈕。 |
MK_RBUTTON |
按下滑鼠右鍵。 |
MK_SHIFT |
按下SHIFT鍵。 |
MK_XBUTTON1 |
XBUTTON1 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
MK_XBUTTON2 |
XBUTTON2 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OnXButtonUp
當使用者放開 XBUTTON1
或 XBUTTON2
游標位於視窗的工作區時,架構會呼叫這個成員函式。
afx_msg void OnXButtonUp(
UINT nFlags,
UINT nButton,
CPoint point);
參數
nFlags
[in]旗標的位元組合 (OR) 表示按下哪些修飾詞按鍵。 例如, MK_CONTROL
旗標表示按下 CTRL 鍵。
nButton
[in]如果第一個Microsoft Intellimouse X 按鈕已按兩下,或XBUTTON2
按兩下第二個 X 按鈕,則值為 XBUTTON1
。
point
[in] CPoint
物件,指定 x
相對於工作區左上角之數據指標的和 y
座標。
備註
此方法會 WM_XBUTTONUP
接收 Windows SDK 中所述的通知。 如果未擷取滑鼠,訊息就會張貼到游標下方的視窗。 否則,訊息會張貼至擷取滑鼠的視窗。
參數 nFlags
可以是下表所列的修飾詞索引鍵組合。 如需詳細資訊,請參閱 關於滑鼠輸入。
修飾詞索引鍵 | 描述 |
---|---|
MK_CONTROL |
按下 CTRL 鍵。 |
MK_LBUTTON |
按下滑鼠左鍵。 |
MK_MBUTTON |
按下滑鼠中間按鈕。 |
MK_RBUTTON |
按下滑鼠右鍵。 |
MK_SHIFT |
按下SHIFT鍵。 |
MK_XBUTTON1 |
XBUTTON1 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
MK_XBUTTON2 |
XBUTTON2 按下 Microsoft IntelliMouse 的滑鼠按鈕。 |
注意
架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。
CWnd::OpenClipboard
開啟剪貼簿。
BOOL OpenClipboard();
傳回值
如果剪貼簿是透過 CWnd
開啟,則為非零,如果另一個應用程式或視窗已開啟剪貼簿,則為0。
備註
在呼叫 Windows 函式之前 CloseClipboard
,其他應用程式將無法修改剪貼簿。
在呼叫 Windows 函式之前EmptyClipboard
,目前的CWnd
物件將不會成為剪貼簿的擁有者。
範例
//handler for Edit | Copy menu
void CMdiView::OnEditCopy()
{
if (!OpenClipboard())
{
AfxMessageBox(_T("Cannot open the Clipboard"));
return;
}
// Remove the current Clipboard contents
if (!EmptyClipboard())
{
AfxMessageBox(_T("Cannot empty the Clipboard"));
return;
}
// Get the currently selected data, hData handle to
// global memory of data
CString str;
m_Edit.GetWindowText(str);
size_t cbStr = (str.GetLength() + 1) * sizeof(TCHAR);
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
memcpy_s(GlobalLock(hData), cbStr, str.LockBuffer(), cbStr);
GlobalUnlock(hData);
str.UnlockBuffer();
// For the appropriate data formats...
UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
if (::SetClipboardData(uiFormat, hData) == NULL)
{
AfxMessageBox(_T("Unable to set Clipboard data"));
CloseClipboard();
return;
}
CloseClipboard();
}
CWnd::operator HWND
使用此運算子可取得 物件的句柄 CWnd
。
operator HWND() const;
CWnd::operator !=
比較兩個 CWnd
物件,以判斷它們是否沒有相同的 m_hWnd
。
BOOL operator!=(const CWnd& wnd) const;
參數
wnd
對 CWnd
物件的參考。
傳回值
如果相等,則為非零;否則為 0。
CWnd::operator ==
比較兩個 CWnd
物件,以判斷它們是否有相同的 m_hWnd
。
BOOL operator==(const CWnd& wnd) const;
參數
wnd
對 CWnd
物件的參考。
傳回值
如果相等,則為非零;否則為 0。
CWnd::PaintWindowlessControls
在控制項容器上繪製無視窗控制項。
BOOL PaintWindowlessControls(CDC* pDC);
參數
pDC
要在其中繪製無視窗控制件的裝置內容。
傳回值
如果控制元件容器與無視窗控制元件已成功繪製,則傳 TRUE
回 ,否則 FALSE
為 。
CWnd::PostMessage
將訊息放在視窗的訊息佇列中,然後傳回,而不會等待對應的窗口處理訊息。
BOOL PostMessage(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0);
參數
message
指定要張貼的訊息。
wParam
指定其他訊息資訊。 此參數的內容取決於所張貼的訊息。
lParam
指定其他訊息資訊。 此參數的內容取決於所張貼的訊息。
傳回值
如果張貼訊息,則為非零;否則為 0。
備註
訊息佇列中的訊息是透過 GetMessage
呼叫 或 PeekMessage
Windows 函式來擷取。
Windows PostMessage
函式可用來存取另一個應用程式。
範例
請參閱 AfxGetMainWnd
的範例。
CWnd::PostNcDestroy
在窗口終結之後,由預設 OnNcDestroy
成員函式呼叫。
virtual void PostNcDestroy();
備註
衍生類別可以使用此函式進行自定義清除,例如刪除 this
指標。
CWnd::PreCreateWindow
在建立附加至這個 CWnd
物件的 Windows 視窗之前,由架構呼叫。
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
參數
cs
CREATESTRUCT
結構。
傳回值
如果視窗建立應該繼續,則為非零;0 表示建立失敗。
備註
警告
CWnd::PreCreateWindow
如果功能表是 NULL
且樣式包含 WS_CHILD
,則現在會將的 hMenu 成員cs
指派給this
指標。 如需適當的功能,請確定您的對話框控制件具有不是 NULL
的識別碼。
這項變更可修正 Managed/原生 Interop 案例中的當機狀況。 TRACE
問題的開發人員會CWnd::Create
發出警示的語句。
永遠不要直接呼叫此函式。
此函式的預設實作會檢查 NULL
視窗類別名稱,並取代適當的預設值。 覆寫此成員函式,以在建立視窗之前修改 CREATESTRUCT
結構。
衍生自 CWnd
的每個類別都會將自己的功能新增至 其 覆 PreCreateWindow
寫 。 根據設計,不會記載這些的衍生 PreCreateWindow
。 若要判斷適合每個類別的樣式,以及樣式之間的相互依存性,您可以檢查應用程式的基類 MFC 原始程式碼。 如果您選擇覆寫 PreCreateWindow,
,則可以判斷應用程式基類中使用的樣式是否提供您需要的功能,方法是使用從 MFC 原始碼收集的資訊。
如需變更窗口樣式的詳細資訊,請參閱 變更 MFC 所建立之視窗的樣式。
範例
// alter the styles of the mdi frame window
BOOL CMdiChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
// Create a window without min/max buttons or sizable border
cs.style |= WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;
// Size the window to 1/3 screen size and center it
cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
cs.y = ((cs.cy * 3) - cs.cy) / 2;
cs.x = ((cs.cx * 3) - cs.cx) / 2;
return CMDIChildWnd::PreCreateWindow(cs);
}
CWnd::PreSubclassWindow
架構會呼叫此成員函式,以允許在子類別化視窗之前發生其他必要的子類別。
virtual void PreSubclassWindow();
備註
覆寫此成員函式允許動態子類別化控件。 這是可覆寫的進階。
CWnd::PreTranslateMessage
類別 CWinApp
用來轉譯視窗訊息,再將其分派至 TranslateMessage
和 DispatchMessage
Windows 函式。
virtual BOOL PreTranslateMessage(MSG* pMsg);
參數
pMsg
指向 MSG
包含要處理之訊息的結構。
傳回值
如果訊息已轉譯且不應該分派,則為非零;如果訊息未轉譯且應該分派,則為 0。
CWnd::Print
呼叫這個成員函式,以在指定的裝置內容中繪製目前視窗,這在印表機裝置內容中最常見。
void Print(
CDC* pDC,
DWORD dwFlags) const;
參數
pDC
裝置內容的指標。
dwFlags
指定繪圖選項。 此參數可以是下列其中一或多個旗標:
PRF_CHECKVISIBLE
只有當視窗可見時,才會繪製視窗。PRF_CHILDREN
繪製所有可見的子視窗。PRF_CLIENT
繪製視窗的工作區。PRF_ERASEBKGND
在繪製視窗之前清除背景。PRF_NONCLIENT
繪製視窗的非工作區。PRF_OWNED
繪製所有擁有的視窗。
備註
CWnd::DefWindowProc
函式會根據指定的繪圖選項來處理此訊息:
如果
PRF_CHECKVISIBLE
已指定且視窗不可見,則不會執行任何動作。如果
PRF_NONCLIENT
已指定,請在指定的裝置內容中繪製非工作區。如果
PRF_ERASEBKGND
已指定,請傳送WM_ERASEBKGND
訊息視窗。如果
PRF_CLIENT
已指定,請傳送WM_PRINTCLIENT
訊息視窗。如果
PRF_CHILDREN
已設定,請傳送每個可見的子視窗一則WM_PRINT
訊息。如果
PRF_OWNED
已設定,請傳送每個可見的擁有視窗一則WM_PRINT
訊息。
CWnd::PrintClient
呼叫此成員函式,以在指定的裝置內容中繪製任何視窗(通常是印表機裝置內容)。
void PrintClient(
CDC* pDC,
DWORD dwFlags) const;
參數
pDC
裝置內容的指標。
dwFlags
指定繪圖選項。 此參數可以是下列其中一或多個旗標:
PRF_CHECKVISIBLE
只有當視窗可見時,才會繪製視窗。PRF_CHILDREN
繪製所有可見的子視窗。PRF_CLIENT
繪製視窗的工作區。PRF_ERASEBKGND
在繪製視窗之前清除背景。PRF_NONCLIENT
繪製視窗的非工作區。PRF_OWNED
繪製所有擁有的視窗。
CWnd::PrintWindow
將視覺視窗複製到指定的裝置內容,通常是印表機 DC。
BOOL PrintWindow(
CDC* pDC,
UINT nFlags) const;
參數
pDC
要列印至之裝置內容的指標。
nFlags
指定繪圖選項。 如需可能值的清單,請參閱 PrintWindow
。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 PrintWindow
,如 Windows SDK 中所述。
CWnd::RedrawWindow
更新指定視窗工作區中指定的矩形或區域。
BOOL RedrawWindow(
LPCRECT lpRectUpdate = NULL,
CRgn* prgnUpdate = NULL,
UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
參數
lpRectUpdate
RECT
指向包含更新矩形座標的結構。 如果 prgnUpdate
包含有效的區域句柄,則會忽略此參數。
prgnUpdate
識別更新區域。 如果 和 lpRectUpdate
NULL
都是 prgnUpdate
,則會將整個工作區新增至更新區域。
flags
下列旗標可用來使視窗失效:
RDW_ERASE
讓視窗在重新繪製視窗時收到WM_ERASEBKGND
訊息。RDW_INVALIDATE
也必須指定旗標;否則RDW_ERASE沒有作用。RDW_FRAME
使視窗的非客戶端區域的任何部分與更新區域交集,以接收WM_NCPAINT
訊息。RDW_INVALIDATE
也必須指定 旗標,否則RDW_FRAME
不會有任何作用。RDW_INTERNALPAINT
WM_PAINT
不論視窗是否包含無效的區域,都會將訊息張貼至視窗。RDW_INVALIDATE
無效lpRectUpdate
或prgnUpdate
(只有一個可能不是NULL
)。 如果兩者都是NULL
,整個視窗就會失效。
下列旗標可用來驗證視窗:
RDW_NOERASE
隱藏任何擱置WM_ERASEBKGND
的訊息。RDW_NOFRAME
隱藏任何擱置WM_NCPAINT
的訊息。 這個旗標必須與 搭配RDW_VALIDATE
使用,而且通常搭配RDW_NOCHILDREN
使用。 此選項應該小心使用,因為它可能會防止視窗的某些部分正確繪製。RDW_NOINTERNALPAINT
隱藏任何擱置的內部WM_PAINT
訊息。 此旗標不會影響WM_PAINT
從無效區域產生的訊息。RDW_VALIDATE
lpRectUpdate
驗證 或prgnUpdate
(只有一個可能不是NULL
)。 如果兩者都是NULL
,則會驗證整個視窗。 此旗標不會影響內部WM_PAINT
訊息。
發生重繪時,下列旗標會控制。 除非指定其中一個位,否則函式不會執行 RedrawWindow
繪製。
RDW_ERASENOW
在函式傳回之前,讓受影響的視窗(如 和RDW_NOCHILDREN
旗標所指定RDW_ALLCHILDREN
)接收WM_NCPAINT
和WM_ERASEBKGND
訊息。WM_PAINT
訊息會延遲。RDW_UPDATENOW
讓受影響的視窗(如 和RDW_NOCHILDREN
旗標所指定RDW_ALLCHILDREN
)在函式傳回之前,視需要接收WM_NCPAINT
、WM_ERASEBKGND
和WM_PAINT
訊息。
根據預設,受 RedrawWindow
函式影響的視窗取決於指定的視窗 WS_CLIPCHILDREN
是否有樣式。 視窗的 WS_CLIPCHILDREN
子視窗不會受到影響。 不過,在遇到視窗之前WS_CLIPCHILDREN
,不是WS_CLIPCHILDREN
視窗的視窗會以遞歸方式驗證或失效。 下列旗標會控制哪些視窗受到 函式 RedrawWindow
的影響:
RDW_ALLCHILDREN
在重繪作業中包含子視窗,如果有的話。RDW_NOCHILDREN
從重繪作業排除子視窗,如果有的話。
傳回值
如果已成功重新繪製視窗,則為非零;否則為 0。
備註
RedrawWindow
當成員函式用來使桌面視窗的一部分失效時,該視窗不會收到WM_PAINT
訊息。 若要重新修補桌面,應用程式應該使用 CWnd::ValidateRgn
、、 CWnd::InvalidateRgn
CWnd::UpdateWindow
或RedrawWindow
CWnd::ReflectChildNotify
架構會從 OnChildNotify
呼叫此訊息函式。
BOOL ReflectChildNotify(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
參數
message
指定要反映的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
pResult
父視窗所產生子視窗所產生的結果。 可以是 NULL
。
傳回值
TRUE
如果已反映訊息,則為 ;否則 FALSE
為 。
備註
它是可反映 message
其來源的協助程式函式。
反映的訊息會直接傳送至 CWnd::OnWndMsg
或 CCmdTarget::OnCmdMsg
。
如需訊息反映的詳細資訊,請參閱 處理反映的訊息。
CWnd::ReflectLastMsg
架構會呼叫此成員函式,以將最後一則訊息反映至子視窗。
static BOOL PASCAL ReflectLastMsg(
HWND hWndChild,
LRESULT* pResult = NULL);
參數
hWndChild
子視窗的句柄。
pResult
父視窗所產生子視窗所產生的結果。 可以是 NULL
。
傳回值
如果已處理訊息,則為非零;否則為 0。
備註
如果所hWndChild
識別的視窗是永久對應中的 OLE 控制件或視窗,則此成員函式會呼叫 SendChildNotifyLastMsg
。
如需訊息反映的詳細資訊,請參閱 處理反映的訊息。
CWnd::ReleaseDC
釋放裝置內容,釋放它以供其他應用程式使用。
int ReleaseDC(CDC* pDC);
參數
pDC
識別要釋放的裝置內容。
傳回值
如果成功則為非零;否則為 0。
備註
成員函式的效果 ReleaseDC
取決於裝置內容類型。
應用程式必須針對 ReleaseDC
成員函式的每個呼叫 GetWindowDC
以及成員函式的每個呼叫,呼叫成員函式來呼叫 GetDC
成員函式。
CWnd::RepositionBars
呼叫 以重新定位和調整視窗工作區中的控制列大小。
void RepositionBars(UINT nIDFirst,
UINT nIDLast,
UINT nIDLeftOver,
UINT nFlag = reposDefault,
LPRECT lpRectParam = NULL,
LPCRECT lpRectClient = NULL,
BOOL bStretch = TRUE) ;
參數
nIDFirst
要重新置放和重設大小之控制列範圍中第一個的標識碼。
nIDLast
要重新調整和重設大小之控制列範圍中最後一個的標識碼。
nIDLeftOver
指定填滿工作區其餘區域的窗格標識碼。
nFlag
可以有下列其中一個值:
CWnd::reposDefault
執行控制列的配置。lpRectParam
未使用 ,而且可以是NULL
。CWnd::reposQuery
未完成控制列的配置;相反lpRectParam
地,會使用工作區的大小初始化,就好像已實際完成版面配置一樣。CWnd::reposExtra
將的值lpRectParam
新增至 的nIDLast
工作區,也會執行版面配置。
lpRectParam
指向 RECT
結構;其使用方式取決於的值 nFlag
。
lpRectClient
指向 RECT
包含可用工作區的結構 。 如果 NULL
為 ,則會使用視窗的工作區。
bStretch
指出長條是否應該延展至框架的大小。
備註
nIDFirst
和 nIDLast
參數會定義要重新置放在工作區中的控制列標識元範圍。 參數 nIDLeftOver
會指定子視窗的標識碼(通常是檢視),此視窗會重新置放並重設大小,以填滿未由控制列填滿的工作區其餘部分。
CWnd::RunModalLoop
呼叫此成員函式以擷取、轉譯或分派訊息,直到 ContinueModal
傳 FALSE
回 為止。
int RunModalLoop(DWORD dwFlags = 0);
參數
dwFlags
指定要傳送的 Windows 訊息。 可以是下列值之一:
MLF_NOIDLEMSG
請勿將訊息傳送WM_ENTERIDLE
至父系。MLF_NOKICKIDLE
請勿將訊息傳送WM_KICKIDLE
至視窗。MLF_SHOWONIDLE
當消息佇列閑置時顯示視窗。
傳回值
指定傳遞至EndModalLoop
成員函式的參數值nResult
,然後用來結束強制回應迴圈。
備註
根據預設, ContinueModal
會在 FALSE
呼叫 之後 EndModalLoop
傳回 。 傳回提供給 nResult
EndModalLoop
的值。
CWnd::ScreenToClient
將畫面上指定的點或矩形的螢幕座標,轉換為用戶端座標。
void ScreenToClient(LPPOINT lpPoint) const; void ScreenToClient(LPRECT lpRect) const;
參數
lpPoint
CPoint
指向包含要轉換之螢幕座標的物件或POINT
結構。
lpRect
CRect
指向包含要轉換之螢幕座標的物件或RECT
結構。
備註
成員ScreenToClient
函式會將 或 lpRect
中lpPoint
提供的螢幕座標取代為用戶端座標。 新座標相對於工作區左上角 CWnd
。
範例
請參閱 CListCtrl::GetItemRect
的範例。
CWnd::ScrollWindow
捲動目前 CWnd
物件的工作區內容。
void ScrollWindow(
int xAmount,
int yAmount,
LPCRECT lpRect = NULL,
LPCRECT lpClipRect = NULL);
參數
xAmount
指定水平捲動的裝置單位數量。 此參數必須是負值,才能向左卷動。
yAmount
指定垂直捲動的裝置單位數量。 此參數必須是負值,才能向上捲動。
lpRect
指向 CRect
物件或 RECT
結構 ,指定要捲動之工作區的部分。 如果 lpRect
為 NULL
,則會捲動整個工作區。 如果游標矩形與滾動矩形交集,則會重新定位插入號。
lpClipRect
CRect
指向物件或RECT
結構,指定要捲動的裁剪矩形。 只會捲動此矩形內的位。 即使這些位位於矩形內, lpRect
此矩形以外的位也不會受到影響。 如果 lpClipRect
為 NULL
,則捲動矩形上不會執行裁剪。
備註
如果插入號在捲動中 CWnd
, ScrollWindow
則會自動隱藏插入號以防止清除插入號,然後在捲動完成後還原插入號。 插入號位置會據以調整。
成員函式所 ScrollWindow
發現的區域不會重新繪製,但會合併到目前 CWnd
物件的更新區域。 應用程式最終會收到一則 WM_PAINT
訊息,通知其區域需要重繪。 若要在捲動完成時重新畫出發現的區域,請在呼叫 ScrollWindow
之後立即呼叫UpdateWindow
成員函式。
如果 lpRect
為 NULL
,則視窗中任何子視窗的位置會依 和 yAmount
所xAmount
指定的數量位移,而 中CWnd
任何無效(未配對)區域也會位移。 ScrollWindow
當 是 NULL
時lpRect
,速度較快。
如果 lpRect
不是 NULL
,則子視窗的位置不會變更,且 中的 CWnd
無效區域不會位移。 若要避免在 不是 時lpRect
更新問題,請在呼叫 ScrollWindow
之前呼叫 UpdateWindow
成員函式以重新重繪CWnd
。NULL
CWnd::ScrollWindowEx
捲動視窗工作區的內容。
int ScrollWindowEx(
int dx,
int dy,
LPCRECT lpRectScroll,
LPCRECT lpRectClip,
CRgn* prgnUpdate,
LPRECT lpRectUpdate,
UINT flags);
參數
dx
指定水平捲動的裝置單位數量。 此參數必須有負值,才能向左卷動。
dy
指定垂直捲動的裝置單位數量。 此參數必須有負值才能向上捲動。
lpRectScroll
指向 RECT
結構 ,指定要捲動之工作區的部分。 如果此參數為 NULL
,則會捲動整個工作區。
lpRectClip
指向 RECT
結構,指定要捲動的裁剪矩形。 此結構優先於 所 lpRectScroll
指向的矩形。 只會捲動此矩形內的位。 即使這些位位於矩形內, lpRectScroll
此矩形以外的位也不會受到影響。 如果此參數為 NULL
,則滾動矩形上不會執行裁剪。
prgnUpdate
識別已修改以保存因捲動而使區域失效的區域。 此參數可以是 NULL
。
lpRectUpdate
RECT
指向結構,這個結構將接收捲動使矩形失效的界限。 此參數可以是 NULL
。
flags
可以有下列其中一個值:
SW_ERASE
使用SW_INVALIDATE
指定時,將訊息傳送WM_ERASEBKGND
至視窗,以清除新失效的區域。SW_INVALIDATE
使捲動之後所識別prgnUpdate
的區域失效。SW_SCROLLCHILDREN
捲動與 和 中所dx
dy
指定像素數目相交之矩形lpRectScroll
的所有子視窗。 Windows 會將訊息傳送WM_MOVE
至所有相交lpRectScroll
的子視窗,即使它們不會移動也一樣。 當子視窗捲動且游標矩形與捲動矩形交集時,插入號會重新置放。
傳回值
如果函式成功,則傳回值為 SIMPLEREGION
(矩形無效區域)、 COMPLEXREGION
(非矩形無效區域、重疊矩形或 NULLREGION
無無效區域),否則傳回值為 ERROR
。
備註
此函式類似於函 ScrollWindow
式,具有一些額外的功能。
如果未 SW_INVALIDATE
指定 和 SW_ERASE
,則 ScrollWindowEx
成員函式不會使卷動離開的區域失效。 如果已設定其中一個旗標, ScrollWindowEx
則會使這個區域失效。 區域不會更新, UpdateWindow
直到應用程式呼叫成員函式、呼叫 RedrawWindow
成員函式(指定 RDW_UPDATENOW
或 RDW_ERASENOW
),或從應用程式佇列擷取 WM_PAINT
訊息為止。
如果視窗具有 WS_CLIPCHILDREN
樣式,則 所 prgnUpdate
指定的傳回區域,並 lpRectUpdate
代表必須更新之捲動視窗的總區域,包括需要更新之子視窗中的任何區域。
SW_SCROLLCHILDREN
如果指定旗標,如果子視窗的一部分捲動,Windows 將不會正確更新畫面。 位於來源矩形外部的捲動子視窗部分將不會清除,也不會在其新目的地中正確繪製。 使用 Windows 函 DeferWindowPos
式來移動未完全位於矩形內的 lpRectScroll
子視窗。 如果已設定旗標, SW_SCROLLCHILDREN
且插入號矩形與卷動矩形交集,則游標會重新置放。
不論視窗是否具有 或類別樣式,所有輸入和輸出座標都lpRectScroll
lpRectClip
lpRectUpdate
prgnUpdate
假設為用戶端座標。CS_CLASSDC
CS_OWNDC
LPtoDP
如有需要,請使用 和 DPtoLP
Windows 函式來回轉換邏輯座標。
CWnd::SendChildNotifyLastMsg
架構會呼叫此成員函式,以便從父視窗將通知訊息提供給子視窗,讓子視窗可以處理工作。
BOOL SendChildNotifyLastMsg(LRESULT* pResult = NULL);
參數
pResult
父視窗所產生子視窗所產生的結果。
傳回值
如果子視窗已處理傳送至其父代的訊息,則為非零;否則為 0。
備註
SendChildNotifyLastMsg
如果目前訊息是反映的訊息,則會將目前訊息傳送至來源。
如需訊息反映的詳細資訊,請參閱 處理反映的訊息。
CWnd::SendDlgItemMessage
將訊息傳送至控件。
LRESULT SendDlgItemMessage(
int nID,
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0);
參數
nID
指定將接收訊息之對話框控件的標識碼。
message
指定要傳送的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
傳回值
指定控制元件視窗程式所傳回的值,如果找不到控制項,則為 0。
備註
成員 SendDlgItemMessage
函式在處理訊息之前不會傳回。
使用 SendDlgItemMessage
與取得 CWnd
指定控制件的 * 和呼叫 SendMessage
成員函式相同。
範例
void CMyDlg::SetSpinRange()
{
//set the min and max range of the up/down or spin control
SendDlgItemMessage(IDC_SPIN1, UDM_SETRANGE, 0, (LPARAM)MAKELONG(8, 1));
}
CWnd::SendMessage
將指定的訊息傳送至此視窗。
LRESULT SendMessage(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0);
參數
message
指定要傳送的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
傳回值
訊息處理的結果;其值取決於傳送的訊息。
備註
成員 SendMessage
函式會直接呼叫視窗程式,而且在處理該視窗程式之前不會傳回 。 這與 PostMessage
成員函式相反,該函式會將訊息放入視窗的消息佇列中,並立即傳回。
範例
void CAboutDlg::OnPaint()
{
// This code, normally emitted by the Application Wizard for a dialog-
// based project for the dialog's WM_PAINT handler, runs only if the
// window is iconic. The window erases the icon's area, then
// paints the icon referenced by m_hIcon.
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
CWnd::SendMessageToDescendants
呼叫此成員函式,將指定的 Windows 訊息傳送至所有子代視窗。
void SendMessageToDescendants(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0,
BOOL bDeep = TRUE,
BOOL bOnlyPerm = FALSE);
參數
message
指定要傳送的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
bDeep
指定要搜尋的層級。 如果 TRUE
為 ,則遞歸地搜尋所有子系;如果 FALSE
為 ,則只搜尋立即子系。
bOnlyPerm
指定暫存視窗是否會接收訊息。 如果 TRUE
為 ,則臨時視窗可以接收訊息;如果 FALSE
為 ,則只有永久視窗接收訊息。 如需暫存視窗的詳細資訊,請參閱 技術附註 3。
備註
如果 bDeep
為 FALSE
,則訊息只會傳送至視窗的直接子系,否則訊息會傳送至所有子系視窗。
如果 bDeep
和 bOnlyPerm
為 TRUE
,搜尋會繼續在暫存視窗下方。 在此情況下,只有在搜尋期間遇到永久視窗才會接收訊息。 如果 bDeep
為 FALSE
,訊息只會傳送至視窗的直接子系。
範例
// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.
// change font of child controls of a dialog
LOGFONT lf = {0};
// redraw of child controls not needed in OnInitDialog
// since controls aren't drawn yet.
short int fRedraw = FALSE;
lf.lfHeight = 15; // Request a 15-pixel-high font
// with face name "Arial".
wcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
m_font.CreateFontIndirect(&lf); // Create the font.
SendMessageToDescendants(WM_SETFONT,
(WPARAM)m_font.m_hObject, //handle to font
MAKELONG((WORD)fRedraw, 0),
FALSE); // send to all descendants(TRUE) or
// just children of *this (FALSE)
CWnd::SendNotifyMessage
將指定的訊息傳送至視窗。
BOOL SendNotifyMessage(
UINT message,
WPARAM wParam,
LPARAM lParam);
參數
message
指定要傳送的訊息。
wParam
指定其他訊息相依資訊。
lParam
指定其他訊息相依資訊。
傳回值
如果函式成功則為非零,否則為 0。
備註
如果視窗是由呼叫線程所建立, SendNotifyMessage
請呼叫視窗的視窗程式,而且在視窗程序處理訊息之前不會傳回。 如果視窗是由不同的線程所建立, SendNotifyMessage
請將訊息傳遞至視窗程式並立即傳回;它不會等待視窗程式完成處理訊息。
CWnd::SetActiveWindow
讓 CWnd
活動視窗成為使用中視窗。
CWnd* SetActiveWindow();
傳回值
先前使用中的視窗。
傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
SetActiveWindow
成員函式應該小心使用,因為它可讓應用程式任意接管使用中的視窗和輸入焦點。 一般而言,Windows 會負責所有啟用。
CWnd::SetCapture
不論游標的位置為何,所有後續的滑鼠輸入都會傳送至目前 CWnd
物件。
CWnd* SetCapture();
傳回值
先前收到所有滑鼠輸入之視窗物件的指標。 NULL
如果沒有這樣的視窗,則為 。 傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
當不再需要所有滑鼠輸入時 CWnd
,應用程式應該呼叫 函 ReleaseCapture
式,讓其他視窗可以接收滑鼠輸入。
擷取滑鼠輸入時,不會傳送任何WM_NCHITTEST
WM_SETCURSOR
訊息至活動視窗。
CWnd::SetCaretPos
設定插入號的位置。
static void PASCAL SetCaretPos(POINT point);
參數
point
指定插入號的新 x 和 y 座標(在用戶端座標中)。
備註
只有當 SetCaretPos
成員函式是由目前工作中視窗所擁有時,才會移動插入號。 SetCaretPos
會移動插入號是否隱藏插入號。
插入號是共享資源。 如果視窗沒有插入號,則不應該移動插入號。
範例
// The following code snippet shows a caret when the left
// mouse button is pressed, and sets the caret's position to
// the cursor's position.
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
//create a solid caret, the width is 2, the length is 20.
CreateSolidCaret(2, 20);
SetCaretPos(point);
ShowCaret();
CView::OnLButtonDown(nFlags, point);
}
CWnd::SetClipboardViewer
每當剪貼簿的內容變更時,就會將此視窗新增至通知的視窗鏈結(透過 WM_DRAWCLIPBOARD
訊息方式)。
HWND SetClipboardViewer();
傳回值
如果成功,則為剪貼簿查看器鏈結中下一個視窗的句柄。 應用程式應該儲存此句柄(它可以儲存為成員變數),並在回應剪貼簿查看器鏈結訊息時使用它。
備註
屬於剪貼簿查看器鏈結一部分的窗口必須回應 WM_DRAWCLIPBOARD
、 WM_CHANGECBCHAIN
和 WM_DESTROY
訊息,並將訊息傳遞至鏈結中的下一個視窗。
此成員函式會將 WM_DRAWCLIPBOARD
訊息傳送至視窗。 由於剪貼簿查看器鏈結中下一個視窗的句柄尚未傳回,因此應用程式不應該在呼叫 SetClipboardViewer
期間傳遞WM_DRAWCLIPBOARD
它收到的訊息。
若要從剪貼簿查看器鏈結中移除本身,應用程式必須呼叫 ChangeClipboardChain
成員函式。
CWnd::SetDlgCtrlID
將視窗的視窗識別碼或控件識別碼設定為新的值。
int SetDlgCtrlID(int nID);
參數
nID
要為控件識別碼設定的新值。
傳回值
如果成功,則為視窗的上一個標識符;否則為 0。
備註
視窗可以是任何子視窗,而不只是對話框中的控件。 視窗不可以是最上層視窗。
CWnd::SetDlgItemInt
將對話框中指定控件的文字設定為指定整數值的字串表示。
void SetDlgItemInt(
int nID,
UINT nValue,
BOOL bSigned = TRUE);
參數
nID
指定要變更之控件的整數標識碼。
nValue
指定用來產生專案文字的整數值。
bSigned
指定整數值是帶正負號還是不帶正負號。 如果此參數為 TRUE
, nValue
則會簽署。 如果此參數是 TRUE
且 nValue
小於0,則會在字串中的第一個數位之前放置減號。 如果此參數為 FALSE
, nValue
則為不帶正負號。
備註
SetDlgItemInt
將 WM_SETTEXT
訊息傳送至指定的控制件。
範例
請參閱 CWnd::SetDlgItemText
的範例。
CWnd::SetDlgItemText
設定視窗或對話框擁有之控件的標題或文字。
void SetDlgItemText(
int nID,
LPCTSTR lpszString);
參數
nID
識別要設定其文字的控制件。
lpszString
CString
指向物件或以 Null 結束的字串,其中包含要複製到控件的文字。
備註
SetDlgItemText
將 WM_SETTEXT
訊息傳送至指定的控制件。
範例
// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.
// Initialize dialog controls
SetDlgItemText(IDC_EDITNAME, _T("Type in text"));
SetDlgItemInt(IDC_EDITNUM, 100);
CWnd::SetForegroundWindow
將建立視窗的執行緒放置到前景並啟動視窗。
BOOL SetForegroundWindow();
傳回值
如果函式成功則為非零,否則為 0。
備註
鍵盤輸入會導向至視窗,而用戶會變更各種視覺提示。 前景視窗是使用者目前正在運作的視窗。 前景視窗僅適用於最上層視窗(框架視窗或對話框)。
範例
請參閱 CWnd::FindWindow
的範例。
CWnd::SetFocus
宣告輸入焦點。
CWnd* SetFocus();
傳回值
先前具有輸入焦點之視窗物件的指標。 NULL
如果沒有這樣的視窗,則為 。 傳回的指標可能是暫時的,不應該儲存。
備註
輸入焦點會將所有後續的鍵盤輸入導向至此視窗。 任何先前具有輸入焦點的視窗都會遺失它。
成員 SetFocus
函式會將 WM_KILLFOCUS
訊息傳送至失去輸入焦點的視窗,並將 WM_SETFOCUS
訊息傳送至接收輸入焦點的視窗。 它也會啟動視窗或其父代。
如果目前視窗為使用中,但沒有焦點(亦即沒有焦點),則按下的任何按鍵都會產生訊息 WM_SYSCHAR
、 WM_SYSKEYDOWN
或 WM_SYSKEYUP
。
CWnd::SetFont
將 WM_SETFONT
訊息傳送至視窗以使用指定的字型。
void SetFont(
CFont* pFont,
BOOL bRedraw = TRUE);
參數
pFont
指向 CFont
物件的指標。
bRedraw
TRUE
表示視窗在處理訊息之後立即重新繪製,否則FALSE
為 WM_SETFONT
。
備註
除非窗口處理訊息, WM_SETFONT
否則這個方法不會有任何作用。 許多衍生自 CWnd
此訊息的 MFC 類別,因為它們會附加至預先定義的窗口類別,其中包含訊息的 WM_SETFONT
訊息處理程式。 若要使用此方法,衍生自 CWnd
的類別必須定義訊息的方法處理程式 WM_SETFONT
。
CWnd::SetIcon
呼叫這個成員函式,將句柄設定為特定的圖示,如 所 hIcon
識別。
HICON SetIcon(
HICON hIcon,
BOOL bBigIcon);
參數
hIcon
上一個圖示的句柄。
bBigIcon
如果 TRUE
,則指定 32 圖元的 32 像素圖示;如果 FALSE
,則指定 16 像素 x 16 像素圖示。
傳回值
圖示的句柄。
備註
註冊窗口類別時,它會選取圖示。
範例
請參閱 CWnd::GetSystemMenu
的範例。
CWnd::SetLayeredWindowAttributes
設定分層視窗的不透明和透明色鍵。
BOOL SetLayeredWindowAttributes(
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags);
參數
crKey
COLORREF
值的指標,指定撰寫分層視窗時要使用的透明度色彩索引鍵。 以這個色彩繪製的視窗所繪製的所有像素都會是透明的。 若要產生 COLORREF
,請使用 RGB
巨集。
bAlpha
用來描述分層視窗不透明度的 Alpha 值。 如需詳細資訊,請參閱 SourceConstantAlpha
結構的成員 BLENDFUNCTION
。 當 bAlpha
為 0 時,視窗會完全透明。 當 bAlpha
為 255 時,視窗不透明。
dwFlags
指定要採取的動作。 此參數可以是下列其中一或多個值。 如需可能值的清單,請參閱 SetLayeredWindowAttributes
。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 SetLayeredWindowAttributes
,如 Windows SDK 中所述。
CWnd::SetMenu
將目前的功能表設定為指定的功能表。
BOOL SetMenu(CMenu* pMenu);
參數
pMenu
識別新的功能表。 如果此參數為 NULL
,則會移除目前的功能表。
傳回值
如果功能表已變更,則為非零;否則為 0。
備註
讓視窗重新繪製以反映功能表變更。
SetMenu
不會終結先前的功能表。 應用程式應該呼叫 CMenu::DestroyMenu
成員函式來完成這項工作。
範例
請參閱 CMenu::LoadMenu
的範例。
CWnd::SetOwner
將目前視窗的擁有者設定為指定的窗口物件。
void SetOwner(CWnd* pOwnerWnd);
參數
pOwnerWnd
識別視窗物件的新擁有者。 如果此參數為 NULL
,則視窗對象沒有擁有者。
備註
然後,此擁有者可以從目前的視窗物件接收命令訊息。 根據預設,目前視窗的父代是其擁有者。
建立與視窗階層無關之視窗對象之間的連線通常很有用。 例如, CToolBar
將通知傳送給其擁有者,而不是傳送至其父系。 這可讓工具列成為一個視窗的子系(例如 OLE 容器應用程式視窗),同時將通知傳送至另一個視窗(例如就地框架視窗)。 此外,當伺服器視窗在就地編輯期間停用或啟用時,框架視窗所擁有的任何視窗就會隱藏或顯示。 這個擁有權會明確設定,並呼叫 SetOwner
。
此函式的擁有權概念與的 GetWindow
擁有權概念不同。
CWnd::SetParent
變更子視窗的父視窗。
CWnd* SetParent(CWnd* pWndNewParent);
參數
pWndNewParent
識別新的父視窗。
傳回值
如果成功,則為上一個父視窗物件的指標。 傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
如果可以看到子視窗,Windows 會執行適當的重繪和重繪。
CWnd::SetProperty
呼叫這個成員函式,以設定 所 dwDispID
指定的 OLE 控件屬性。
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
參數
dwDispID
識別要設定的屬性。
vtProp
指定要設定的屬性類型。 如需可能的值,請參閱 的一 COleDispatchDriver::InvokeHelper
節。
...
vtProp
指定的類型單一參數。
備註
注意
這個函式應該只在代表 OLE 控件的物件上 CWnd
呼叫。
如需搭配 OLE 控件容器使用此成員函式的詳細資訊,請參閱 ActiveX 控件容器:在 ActiveX 控制件容器中設計 ActiveX 控件一文。
CWnd::SetRedraw
應用程式會呼叫 SetRedraw
以允許重新繪製變更,或防止重新繪製變更。
void SetRedraw(BOOL bRedraw = TRUE);
參數
bRedraw
指定重繪旗標的狀態。 如果此參數為 TRUE
,則會設定重繪旗標;如果 FALSE
為 ,則會清除旗標。
備註
此成員函式會設定或清除重繪旗標。 清除重繪旗標時,在每次變更之後都不會更新內容,而且在重繪旗標設定之前不會重新繪製。 例如,需要將數個專案新增至清單框的應用程式可以清除重繪旗標、新增專案,然後設定重繪旗標。 最後,應用程式可以呼叫 Invalidate
或 InvalidateRect
成員函式,讓清單框重新繪製。
範例
// Updating a control or window with large amounts of data may cause
// flicker. In such cases it may be better to turn off drawing
//m_list is a member of type CListCtrl
m_List.SetRedraw(FALSE); // turn drawing off regardless of list mode
//
// Update control
//
m_List.SetRedraw(TRUE); // turn drawing back on and update the window
// invalidate the entire control, force painting
m_List.Invalidate();
m_List.UpdateWindow();
CWnd::SetScrollInfo
呼叫這個成員函式,以設定結構在滾動條上維護的資訊 SCROLLINFO
。
BOOL SetScrollInfo(
int nBar,
LPSCROLLINFO lpScrollInfo,
BOOL bRedraw = TRUE);
參數
nBar
指定滾動條是視窗非工作區的控件或一部分。 如果它是非工作區的一部分,nBar 也會指出滾動條是水準、垂直或兩者。 它必須是下列其中一項:
SB_CTL
包含滾動條控件的參數。 數據m_hWnd
成員必須是滾動條控件的句柄。SB_HORZ
指定視窗是水平滾動條。SB_VERT
指定視窗是垂直滾動條。
lpScrollInfo
結構的指標 SCROLLINFO
。 如需此結構的詳細資訊,請參閱 Windows SDK。
bRedraw
指定是否應重新繪製滾動條以反映新位置。 如果 bRedraw
為 TRUE
,則會重新繪製滾動條。 FALSE
如果是 ,則不會重新繪製。 滾動條預設會重新繪製。
傳回值
如果成功,則傳回 為 TRUE
。 否則為 FALSE
。
備註
結構 SCROLLINFO
包含滾動條的相關信息,包括滾動條的下限和最大捲動位置、頁面大小,以及滾動盒的位置(拇指)。 SCROLLINFO
如需變更結構預設值的詳細資訊,請參閱 Windows SDK 中的結構主題。
指出滾動條位置的 MFC Windows 訊息處理程式, CWnd::OnHScroll
和 CWnd::OnVScroll
僅提供 16 位的位置數據。 GetScrollInfo
並提供 SetScrollInfo
32位的滾動條位置數據。 因此,應用程式可以在處理 CWnd::OnHScroll
或 CWnd::OnVScroll
時呼叫 GetScrollInfo
,以取得32位滾動條位置數據。
注意
CWnd::GetScrollInfo
可讓應用程式使用32位滾動條位置。
CWnd::SetScrollPos
設定滾動盒的目前位置,如果要求,請重新繪製滾動條以反映滾動盒的新位置。
int SetScrollPos(
int nBar,
int nPos,
BOOL bRedraw = TRUE);
參數
nBar
指定要設定的滾動條。 此參數可以是下列其中一項:
SB_HORZ
設定滾動盒在視窗的水平滾動條中的位置。SB_VERT
設定滾動盒在視窗垂直滾動條中的位置。
nPos
指定滾動盒的新位置。 它必須位於捲動範圍內。
bRedraw
指定是否應該重新繪製滾動條以反映新的滾動盒位置。 如果此參數為 TRUE
,則會重新繪製滾動條;如果 FALSE
為 ,則不會重新繪製滾動條。
傳回值
滾動盒的上一個位置。
備註
FALSE
每當滾動條被後續呼叫另一個函式重新繪製時,將 設定bRedraw
為 會很有用。
CWnd::SetScrollRange
設定給定捲軸的最小和最大位置值。
void SetScrollRange(
int nBar,
int nMinPos,
int nMaxPos,
BOOL bRedraw = TRUE);
參數
nBar
指定要設定的滾動條。 此參數可以是下列其中一個值:
SB_HORZ
設定視窗的水平滾動條範圍。SB_VERT
設定視窗垂直滾動條的範圍。
nMinPos
指定最小卷動位置。
nMaxPos
指定卷動位置上限。
bRedraw
指定是否應該重新繪製滾動條以反映變更。 如果 bRedraw
為 TRUE
,則會重繪滾動條;如果 FALSE
為 ,則不會重新繪製滾動條。
備註
它也可以用來隱藏或顯示標準滾動條。
應用程式不應該呼叫此函式,以在處理滾動條通知訊息時隱藏滾動條。
如果的呼叫緊接在對成員函式的呼叫SetScrollPos
SetScrollRange
之後,成員函式中的 SetScrollPos
參數應該是 0,bRedraw
以防止滾動條被繪製兩次。
標準滾動條的預設範圍是 0 到 100。 滾動條控制件的預設範圍是空的( nMinPos
和 nMaxPos
值為 0)。 nMinPos
指定 nMaxPos
值之間的差異不得大於 INT_MAX
。
CWnd::SetTimer
安裝系統定時器。
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND,
UINT,
UINT_PTR,
DWORD));
參數
nIDEvent
指定非零定時器標識碼。 如果定時器標識碼是唯一的,則會由 SetTimer
傳回這個相同的值。 否則, SetTimer
會判斷新的唯一值,並傳回該值。 對於具有回呼函式的視窗定時器,值必須是唯一 NULL
的,僅適用於與目前窗口相關聯的其他視窗定時器。 對於回呼定時器,值對於所有進程中的所有定時器而言都必須是唯一的。 因此,當您建立回呼定時器時,傳回的值可能會與您指定的值不同。
nElapse
以毫秒為單位指定逾時值或間隔。
lpfnTimer
指定處理WM_TIMER
訊息的應用程式提供TimerProc
回呼函式位址。 如果此參數是 NULL
,訊息 WM_TIMER
會放在應用程式的訊息佇列中,並由對象處理 CWnd
。
傳回值
如果函式成功,則為新定時器的定時器標識碼。 這個值不一定等於透過 nIDEvent
參數傳入的值。 應用程式應該一律將傳回值傳遞至 KillTimer
成員函式,以終止定時器。 如果成功,則為非零;否則為 0。
備註
指定間隔值,而且每次間隔經過時,系統都會將訊息張貼 WM_TIMER
至安裝應用程式的安裝消息佇列,或將訊息傳遞至應用程式定義的 TimerProc
回呼函式。
回 lpfnTimer
呼函式不需要命名 TimerProc
,但必須宣告為靜態,並定義如下。
void CALLBACK TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time);
範例
此範例會使用 CWnd::SetTimer
、 CWnd::OnTimer
和 CWnd::KillTimer
來處理 WM_TIMER
訊息。 第一個 WM_TIMER
定時器設定為每隔 2 秒 OnStartTimer
將訊息傳送至主框架視窗。 OnTimer
事件處理程式會處理WM_TIMER
主框架視窗的訊息。 此方法會每隔 2 秒讓電腦喇叭發出嗶聲。 第二個定時器每隔 3.75 秒就會將訊息傳送至回呼函式。 OnStopTimer
會呼叫每個定時器標識碼來 CWnd::KillTimer
停止這兩個定時器。
void CMainFrame::OnStartTimer()
{
// This timer uses a WM_TIMER message, not a callback.
// Therefore, the timer is specific to this window.
// m_nWindowTimer is a UINT_PTR field.
m_nWindowTimer = SetTimer(1, 2000, NULL);
// For this demo, we specify an interval that won't overlap
// with the window timer.
m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);
// See whether we got the ID we requested in the first parameter.
#ifdef _DEBUG
CString str;
str.Format(_T("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
TRACE(str);
#endif
}
void CALLBACK CMainFrame::MyTimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
)
{
MessageBeep(0x00000030L); // Windows question sound.
}
void CMainFrame::OnStopTimer()
{
KillTimer(m_nWindowTimer);
KillTimer(m_nCallbackTimer);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
MessageBeep(0xFFFFFFFF); // Beep
// Call base class handler.
CMDIFrameWnd::OnTimer(nIDEvent);
}
CWnd::SetWindowContextHelpId
呼叫這個成員函式,將說明內容標識碼與指定的視窗產生關聯。
BOOL SetWindowContextHelpId(DWORD dwContextHelpId);
參數
dwContextHelpId
說明內容識別碼。
傳回值
如果函式成功則為非零,否則為 0。
備註
如果子窗口沒有說明內容識別符,則會繼承其父視窗的標識碼。 同樣地,如果擁有的視窗沒有說明內容標識符,則會繼承其擁有者視窗的標識符。 這個說明內容識別碼的繼承可讓應用程式只設定對話方塊及其所有控件的一個標識碼。
範例
// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.
// Associate a help context id with the control.
// IDC_TESTHELP_CONTROL is the id of the control
// and HIDC_TESTHELP_CONTROL is its help context
// id associated with the control.
CWnd *pWnd = GetDlgItem(IDC_TESTHELP_CONTROL);
pWnd->SetWindowContextHelpId(HIDC_TESTHELP_CONTROL);
CWnd::SetWindowPlacement
設定視窗的顯示狀態和一般 (還原)、最小化和最大化位置。
BOOL SetWindowPlacement(const WINDOWPLACEMENT* lpwndpl);
參數
lpwndpl
指向 WINDOWPLACEMENT
指定新顯示狀態和位置的結構。
傳回值
如果函式成功則為非零,否則為 0。
CWnd::SetWindowPos
變更子系、彈出視窗和最上層視窗的大小、位置和 Z 順序。
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,
int y,
int cx,
int cy,
UINT nFlags);
參數
pWndInsertAfter
CWnd
識別將位於 Z 順序中這個CWnd
物件之前 (高於) 的物件。 此參數可以是 的 CWnd
指標,或下列其中一個值的指標:
wndBottom
將視窗放在 Z 順序的底部。 如果這是CWnd
最上層的視窗,視窗會失去其最上層狀態;系統會將視窗放在所有其他視窗的底部。wndTop
將視窗放在 Z 順序的頂端。wndTopMost
將視窗置於所有非最上層視窗上方。 即使視窗已停用,視窗仍會維持其最上層位置。wndNoTopMost
將視窗重新置放到所有非最上層視窗的頂端(也就是在所有最上層視窗後面)。 如果視窗已經不是最上層的視窗,則此旗標沒有任何作用。
如需如何使用此參數的規則,請參閱本主題的一節。
x
指定視窗左側的新位置。
y
指定視窗頂端的新位置。
cx
指定視窗的新寬度。
cy
指定視窗的新高度。
nFlags
指定重設大小和定位選項。 此參數可以是下列旗標的組合:
SWP_DRAWFRAME
在視窗周圍繪製框架(定義於視窗建立時)。SWP_FRAMECHANGED
WM_NCCALCSIZE
將訊息傳送至視窗,即使視窗的大小未變更也一樣。 如果未指定此旗標,WM_NCCALCSIZE
則只會在視窗的大小變更時傳送。SWP_HIDEWINDOW
隱藏視窗。SWP_NOACTIVATE
不會啟動視窗。 如果未設定此旗標,則會啟動視窗並移至最上層或最上層群組的頂端(視參數的pWndInsertAfter
設定而定)。SWP_NOCOPYBITS
捨棄工作區的整個內容。 如果未指定此旗標,則會在視窗重設大小或重新定位之後,儲存並複製回工作區的有效工作區。SWP_NOMOVE
保留目前的位置(忽略x
和y
參數)。SWP_NOOWNERZORDER
不會變更 Z 順序中的擁有者視窗位置。SWP_NOREDRAW
不會重新繪製變更。 如果設定此旗標,則不會重新繪製任何種類的 。 這適用於工作區、非工作區區域(包括標題和滾動條),以及因為移動視窗而發現父視窗的任何部分。 設定此旗標時,應用程式必須明確失效或重新繪製必須重新繪製之視窗和父視窗的任何部分。SWP_NOREPOSITION
與SWP_NOOWNERZORDER
相同。SWP_NOSENDCHANGING
防止視窗接收WM_WINDOWPOSCHANGING
訊息。SWP_NOSIZE
保留目前的大小(忽略cx
和cy
參數)。SWP_NOZORDER
保留目前的排序(忽略pWndInsertAfter
)。SWP_SHOWWINDOW
顯示視窗。
傳回值
如果函式成功,則為非零;否則為 0。
備註
Windows 會根據其 Z 順序在畫面上排序;Z 順序頂端的視窗會依順序出現在所有其他視窗的頂端。
子視窗的所有座標都是用戶端座標(相對於父視窗工作區左上角)。
您可以將 參數設定 pWndInsertAfter
為 &wndTopMost
,並確保 SWP_NOZORDER
旗標未設定,或設定視窗的 Z 順序,使其高於任何現有的最上層視窗,即可將視窗移至 Z 順序的頂端。 當非最上層視窗成為最上層時,其擁有的視窗也會成為最上層。 其擁有者不會變更。
如果最上層視窗重新置放到 Z 順序的底部或&wndBottom
位於任何非最上層視窗之後,最上層的視窗就不再是最上層的視窗。 當最上層視窗成為非最上層時,其所有擁有者和擁有的視窗也會成為非最上層的視窗。
SWP_NOACTIVATE
如果未指定 或 SWP_NOZORDER
,也就是說,當應用程式要求同時啟動視窗並置於指定的 Z 順序時,中指定的值pWndInsertAfter
只會在下列情況下使用:
&wndTopMost
與&wndNoTopMost
都未在 參數中pWndInsertAfter
指定 。這個視窗不是使用中的視窗。
應用程式無法啟動非使用中的視窗,也無法將其帶到 Z 順序的頂端。 應用程式可以變更已啟動視窗的 Z 順序,而不受限制。
非最上層視窗可能擁有最上層的視窗,但反之亦然。 最上層窗口擁有的任何視窗(例如對話框)本身都會成為最上層視窗,以確保所有擁有的視窗都保持在其擁有者之上。
使用 Windows 3.1 版和更新版本時,視窗可以移至 Z 順序的頂端,並藉由設定其 WS_EX_TOPMOST
樣式加以鎖定。 即使停用,這類最上層視窗仍會維持其最上層的位置。 例如,選取 WinHelp Always On Top 命令會讓 [說明] 視窗最上層,然後在您返回應用程式時仍保持可見。
若要建立最上層的視窗,請使用 等於 的參數呼叫 SetWindowPos
,或在建立視窗時設定WS_EX_TOPMOST
樣式。&wndTopMost
pWndInsertAfter
如果 Z 順序包含任何具有樣式的 WS_EX_TOPMOST
視窗,則以 &wndTopMost
值行動的視窗會放在所有非最上層視窗的頂端,但在最上層視窗下方。 當應用程式啟動沒有 WS_EX_TOPMOST
位的非使用中視窗時,視窗會移至所有非最上層視窗上方,但位於最上層視窗下方。
如果SetWindowPos
當 參數是 &wndBottom
且 CWnd
是最上層的視窗時pWndInsertAfter
呼叫 ,則視窗會失去最上層的狀態(WS_EX_TOPMOST
已清除),而系統會將視窗放在 Z 順序的底部。
範例
void CMyApp::OnHideApplication()
{
//m_pMainWnd is the main application window, a member of CMyApp
ASSERT_VALID(m_pMainWnd);
// hide the application's windows before closing all the documents
m_pMainWnd->ShowWindow(SW_HIDE);
m_pMainWnd->ShowOwnedPopups(FALSE);
// put the window at the bottom of z-order, so it isn't activated
m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
CWnd::SetWindowRgn
呼叫這個成員函式來設定視窗的區域。
int SetWindowRgn(
HRGN hRgn,
BOOL bRedraw);
參數
hRgn
區域的句柄。
bRedraw
如果 TRUE
為 ,則操作系統會在設定區域之後重新繪製窗口,否則不會。 一般而言,如果視窗可見,則設定 bRedraw
為 TRUE
。 如果設定為 TRUE
,則系統會將 和 WM_WINDOWPOSCHANGED
訊息傳送WM_WINDOWPOSCHANGING
至視窗。
傳回值
如果函式成功,則傳回非零的值。 如果此函式失敗,則傳回值為零。
備註
視窗視窗區域的座標相對於視窗左上角,而不是視窗的工作區。
成功呼叫 SetWindowRgn
之後,操作系統會擁有區域句柄 hRgn
所指定的區域。 操作系統不會建立區域的複本,因此請勿使用此區域句柄進行任何進一步的函式呼叫,也不會關閉此區域句柄。
CWnd::SetWindowText
將視窗的標題設定為指定的文字。
void SetWindowText(LPCTSTR lpszString);
參數
lpszString
指向 CString
物件或以 Null 結束的字串,做為新的標題或控件文字。
備註
如果視窗是控件,則會設定控件內的文字。
此函式會導致訊息 WM_SETTEXT
傳送至此視窗。
範例
// set the text in IDC_EDITNAME
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
pWnd->SetWindowText(_T("Gerald Samper"));
// Get the text back. CString is convenient, because MFC
// will automatically allocate enough memory to hold the
// text--no matter how large it is.
CString str;
pWnd->GetWindowText(str);
ASSERT(str == _T("Gerald Samper"));
// The LPTSTR override works, too, but it might be too short.
// If we supply a buffer that's too small, we'll only get those
// characters that fit.
TCHAR sz[10];
int nRet = pWnd->GetWindowText(sz, 10);
// Nine characters, plus terminating null
ASSERT(_tcscmp(sz, _T("Gerald Sa")) == 0);
ASSERT(nRet == 9);
// You can query the length of the text without the length of
// the string using CWnd::GetWindowTextLength()
nRet = pWnd->GetWindowTextLength();
ASSERT(nRet == 13);
CWnd::ShowCaret
在插入號目前位置的畫面上顯示插入號。
void ShowCaret();
備註
顯示後,插入號會開始自動閃爍。
成員 ShowCaret
函式只有在具有目前圖形且未連續隱藏兩次或多次時,才會顯示插入號。 如果插入號不是此視窗所擁有,則不會顯示插入號。
隱藏插入號是累計的。 HideCaret
如果成員函式已連續呼叫五次,ShowCaret
則必須呼叫五次以顯示插入號。
插入號是共享資源。 只有當視窗具有輸入焦點或作用中時,視窗才會顯示插入號。
範例
請參閱 CWnd::CreateCaret
的範例。
CWnd::ShowOwnedPopups
顯示或隱藏此視窗所擁有的所有彈出視窗。
void ShowOwnedPopups(BOOL bShow = TRUE);
參數
bShow
指定要顯示或隱藏彈出視窗。 如果此參數為 TRUE
,則會顯示所有隱藏的彈出視窗。 如果此參數為 FALSE
,則會隱藏所有可見的彈出視窗。
範例
請參閱 CWnd::SetWindowPos
的範例。
CWnd::ShowScrollBar
顯示或隱藏滾動條。
void ShowScrollBar(
UINT nBar,
BOOL bShow = TRUE);
參數
nBar
指定滾動條是視窗非工作區的控件或一部分。 如果它是非工作區的一部分, nBar
也表示滾動條是水準、垂直或兩者的位置。 它必須是下列其中一項:
SB_BOTH
指定視窗的水平和垂直滾動條。SB_HORZ
指定視窗是水平滾動條。SB_VERT
指定視窗是垂直滾動條。
bShow
指定 Windows 是否顯示或隱藏滾動條。 如果此參數為 TRUE
,則會顯示滾動條,否則滾動條會隱藏。
備註
處理滾動條通知訊息時,應用程式不應該呼叫 ShowScrollBar
來隱藏滾動條。
CWnd::ShowWindow
設定視窗的可見性狀態。
BOOL ShowWindow(int nCmdShow);
參數
nCmdShow
指定要如何 CWnd
顯示 。 它必須是下列其中一個值:
SW_HIDE
隱藏此視窗,並將啟用傳遞至另一個視窗。SW_MINIMIZE
將視窗最小化,並啟動系統清單中的最上層視窗。SW_RESTORE
啟動並顯示視窗。 如果視窗最小化或最大化,Windows 會將它還原至其原始大小和位置。SW_SHOW
啟動視窗,並將其顯示在其目前的大小和位置。SW_SHOWMAXIMIZED
啟動視窗,並將其顯示為最大化的視窗。SW_SHOWMINIMIZED
啟動視窗,並將其顯示為圖示。SW_SHOWMINNOACTIVE
將窗口顯示為圖示。 目前使用中的視窗會維持使用中狀態。SW_SHOWNA
以目前狀態顯示視窗。 目前使用中的視窗會維持使用中狀態。SW_SHOWNOACTIVATE
以最近的大小和位置顯示視窗。 目前使用中的視窗會維持使用中狀態。SW_SHOWNORMAL
啟動並顯示視窗。 如果視窗最小化或最大化,Windows 會將它還原至其原始大小和位置。
傳回值
如果先前顯示視窗,則為非零;如果先前已隱藏 , CWnd
則為 0。
備註
ShowWindow
針對具有 CWinApp::m_nCmdShow
的主視窗,每個應用程式只能呼叫一次。 的後續呼叫 ShowWindow
必須使用上述其中一個值,而不是 所 CWinApp::m_nCmdShow
指定的值。
範例
請參閱 CWnd::CalcWindowRect
的範例。
CWnd::SubclassDlgItem
呼叫這個成員函式,以「動態子類別」從對話框範本建立的控件,並將它附加至這個 CWnd
物件。
BOOL SubclassDlgItem(
UINT nID,
CWnd* pParent);
參數
nID
控件的標識碼。
pParent
控件的父代 (通常是對話框)。
傳回值
如果函式成功則為非零,否則為 0。
備註
當控件動態子類別化時,Windows 訊息會先透過 CWnd
的訊息對應路由,並呼叫 類別中的 CWnd
訊息處理程式。 傳遞至基類的訊息將會傳遞至 控件中的預設訊息處理程式。
這個成員函式會將 Windows 控制件附加至 CWnd
物件,並取代控制件的 WndProc
和 AfxWndProc
函式。 函式會將舊的 WndProc
儲存在成員函式所 GetSuperWndProcAddr
傳回的位置。
範例
// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.
// IDC_BUTTON1 is the ID for a button on the
// dialog template used for CMyDlg.
m_MyButton.SubclassDlgItem(IDC_BUTTON1, this);
CWnd::SubclassWindow
將此成員函式稱為「動態子類別」視窗,並將它附加至這個 CWnd
物件。
BOOL SubclassWindow(HWND hWnd);
參數
hWnd
視窗的句柄。
傳回值
如果函式成功則為非零,否則為 0。
備註
動態子類別化視窗時,視窗訊息會先透過 CWnd
的訊息對應路由,並呼叫 類別中的 CWnd
訊息處理程式。 傳遞至基類的訊息將會傳遞至視窗中的預設訊息處理程式。
這個成員函式會將 Windows 控制件附加至 CWnd
物件,並取代視窗的 WndProc
和 AfxWndProc
函式。 函式會將指標儲存至物件中的CWnd
舊 WndProc
。
注意
呼叫此函式時,視窗不得已附加至 MFC 物件。
範例
// The following code shows how to subclass the edit control and list box
// controls inside a combo box. It uses WM_CTLCOLOR for subclassing.
// CSuperComboBox represents the combo box
HBRUSH CSuperComboBox::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_EDIT)
{
//Edit control
if (m_edit.GetSafeHwnd() == NULL)
m_edit.SubclassWindow(pWnd->GetSafeHwnd());
}
else if (nCtlColor == CTLCOLOR_LISTBOX)
{
//ListBox control
if (m_listbox.GetSafeHwnd() == NULL)
m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
}
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
void CSuperComboBox::OnDestroy()
{
//unsubclass edit and list box before destruction
if (m_edit.GetSafeHwnd() != NULL)
m_edit.UnsubclassWindow();
if (m_listbox.GetSafeHwnd() != NULL)
m_listbox.UnsubclassWindow();
CComboBox::OnDestroy();
}
CWnd::UnlockWindowUpdate
呼叫這個成員函式,以解除鎖定已鎖定的 CWnd::LockWindowUpdate
視窗。
void UnlockWindowUpdate();
備註
一次只能鎖定 LockWindowUpdate
一個視窗。 如需鎖定視窗的詳細資訊,請參閱 CWnd::LockWindowUpdate
或 Win32 函 LockWindowUpdate
式。
CWnd::UnsubclassWindow
呼叫這個成員函式,將 設定 WndProc
回其原始值,並將 HWND 所識別的 CWnd
視窗與 物件中斷連結。
HWND UnsubclassWindow();
傳回值
未分類視窗的句柄。
範例
請參閱 CWnd::SubclassWindow
的範例。
CWnd::UpdateData
呼叫這個成員函式以初始化對話框中的數據,或擷取和驗證對話數據。
BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
參數
bSaveAndValidate
旗標,指出對話框正在初始化 (FALSE
) 或正在擷取資料 (TRUE
)。
傳回值
如果作業成功,則為非零;否則為 0。 如果 bSaveAndValidate
為 TRUE
,則非零的傳回值表示數據已成功驗證。
備註
架構會在預設實作中建立強制回應對話框時,自動呼叫 UpdateData
bSaveAndValidate
設定 FALSE
為 CDialog::OnInitDialog
的 。 呼叫會在對話框可見之前發生。 的預設實作會 CDialog::OnOK
呼叫這個成員函式,並將 bSaveAndValidate
設定為 TRUE
來擷取數據,如果成功,將會關閉對話方塊。 (如果在對話框中按兩下[取消] 按鈕,對話框就會關閉,而不會擷取數據。
CWnd::UpdateDialogControls
呼叫這個成員函式,以更新對話框按鈕的狀態,以及使用回呼機制的 ON_UPDATE_COMMAND_UI
對話框或視窗中的其他控制件。
void UpdateDialogControls(
CCmdTarget* pTarget,
BOOL bDisableIfNoHndler);
參數
pTarget
指向應用程式的主框架視窗,並用於路由更新訊息。
bDisableIfNoHndler
指出沒有更新處理程式的控制項是否應該自動顯示為停用的旗標。
備註
如果子控件沒有處理程式且 bDisableIfNoHndler
為 TRUE
,則會停用子控件。
架構會針對對話框列或工具列中的控件呼叫這個成員函式,做為應用程式閑置處理的一部分。
CWnd::UpdateLayeredWindow
更新分層視窗的位置、大小、形狀、內容和透明度。
BOOL UpdateLayeredWindow(
CDC* pDCDst,
POINT* pptDst,
SIZE* psize,
CDC* pDCSrc,
POINT* pptSrc,
COLORREF crKey,
BLENDFUNCTION* pblend,
DWORD dwFlags);
參數
pDCDst
螢幕裝置內容的指標。 當視窗內容更新時,它會用於調色盤色彩比對。 如果 pDCDst
為 NULL
,則會使用預設調色盤。
如果 pDCSrc
為 NULL
, pDCDst
必須是 NULL
。
pptDst
結構的指標 POINT
,指定分層視窗的新螢幕位置。 如果目前的位置未變更, pptDst
可以是 NULL
。
psize
SIZE
結構的指標,指定分層視窗的新大小。 如果視窗的大小未變更, psize
可以是 NULL
。
如果 pDCSrc
為 NULL
, psize
必須是 NULL
。
pDCSrc
定義分層視窗之介面的DC指標。 如果視窗的圖形與視覺內容未變更, pDCSrc
可以是 NULL
。
pptSrc
POINT
結構的指標,指定裝置內容中圖層的位置。
如果 pDCSrc
為 NULL
, pptSrc
應該是 NULL
。
crKey
COLORREF
值的指標,指定撰寫分層視窗時要使用的透明度色彩索引鍵。 以這個色彩繪製的視窗所繪製的所有像素都會是透明的。 若要產生 COLORREF
,請使用 RGB 巨集。
pblend
BLENDFUNCTION
結構的指標,指定撰寫分層視窗時要使用的透明度值。
dwFlags
指定要採取的動作。 此參數可以是下列其中一或多個值。 如需可能值的清單,請參閱 UpdateLayeredWindow
。
傳回值
如果函式成功則為非零值,否則為 0。
備註
此成員函式會模擬 函式的功能 UpdateLayeredWindow
,如 Windows SDK 中所述。
CWnd::UpdateWindow
如果更新區域不是空的,則傳送 WM_PAINT
訊息來更新工作區。
void UpdateWindow();
備註
成員函式會 UpdateWindow
直接傳送 WM_PAINT
訊息,略過應用程式佇列。 如果更新區域是空的, WM_PAINT
則不會傳送。
範例
// In this example a rectangle is drawn in a view.
// The OnChangeRect() function changes the dimensions
// of the rectangle and then calls CWnd::Invalidate() so the
// client area of the view will be redrawn next time the
// window is updated. It then calls CWnd::UpdateWindow
// to force the new rectangle to be painted.
void CMdiView::OnChangeRect()
{
// Change Rectangle size.
m_rcBox = CRect(20, 20, 210, 210);
// Invalidate window so entire client area
// is redrawn when UpdateWindow is called.
Invalidate();
// Update Window to cause View to redraw.
UpdateWindow();
}
// On Draw function draws the rectangle.
void CMdiView::OnDraw(CDC *pDC)
{
// Other draw code here.
pDC->Draw3dRect(m_rcBox, 0x00FF0000, 0x0000FF00);
}
CWnd::ValidateRect
從視窗的更新區域移除矩形,以驗證指定矩形內的工作區。
void ValidateRect(LPCRECT lpRect);
參數
lpRect
指向 CRect
物件或 RECT
結構 ,其中包含要從更新區域移除之矩形的用戶端座標。 如果 lpRect
為 NULL
,則會驗證整個視窗。
備註
成員 BeginPaint
函式會自動驗證整個工作區。 ValidateRect
如果下次產生之前WM_PAINT
需要驗證更新區域的一部分,則不應該呼叫 或 ValidateRgn
成員函式。
Windows 會繼續產生 WM_PAINT
訊息,直到驗證目前的更新區域為止。
CWnd::ValidateRgn
從視窗的目前更新區域移除區域,以驗證指定區域內的工作區。
void ValidateRgn(CRgn* pRgn);
參數
pRgn
物件的指標 CRgn
,識別定義要從更新區域移除的區域的區域。 如果此參數為 NULL
,則會移除整個工作區。
備註
指定的區域之前必須由區域函式建立。 區域座標會假設為用戶端座標。
成員 BeginPaint
函式會自動驗證整個工作區。 ValidateRect
如果在產生下WM_PAINT
一則訊息之前,必須驗證更新區域的一部分,則不應該呼叫 和 ValidateRgn
成員函式。
CWnd::WindowFromPoint
擷取包含指定點的視窗; point
必須指定螢幕上點的螢幕座標。
static CWnd* PASCAL WindowFromPoint(POINT point);
參數
point
指定要 CPoint
檢查之點的物件或 POINT
數據結構。
傳回值
指向該點所在之視窗物件的指標。 NULL
如果指定點上沒有任何視窗存在,則為 。 傳回的指標可能是暫時的,不應該儲存以供稍後使用。
備註
WindowFromPoint
即使點位於視窗內,也不會擷取隱藏或停用的視窗。 應用程式應該使用 ChildWindowFromPoint
成員函式進行非緊急搜尋。
CWnd::WindowProc
提供物件的 CWnd
Windows 程式 (WindowProc
)。
virtual LRESULT WindowProc(
UINT message,
WPARAM wParam,
LPARAM lParam);
參數
message
指定要處理的 Windows 訊息。
wParam
提供處理訊息時所使用的其他資訊。 參數值取決於訊息。
lParam
提供處理訊息時所使用的其他資訊。 參數值取決於訊息。
傳回值
傳回值取決於訊息。
備註
它會透過視窗的訊息對應分派訊息。
CWnd::WinHelp
呼叫以初始化 WinHelp 應用程式。
virtual void WinHelp(
DWORD_PTR dwData,
UINT nCmd = HELP_CONTEXT);
參數
dwData
指定其他數據。 所使用的值取決於 參數的值 nCmd
。
nCmd
指定要求的說明類型。 如需可能值的清單及其影響 dwData
參數的方式,請參閱 WinHelp
Windows SDK 中的 Windows 函式。
備註
如需相關資訊,請參閱 CWinApp::WinHelp
。
CWnd::RegisterTouchWindow
註冊或取消註冊 Windows touch 支援。
BOOL RegisterTouchWindow(
BOOL bRegister = TRUE,
ULONG ulFlags = 0);
參數
bRegister
TRUE
表示註冊 Windows touch 支援; FALSE
否則。
ulFlags
指定選擇性修改的一組位旗標。 此欄位可能包含 0 或下列其中一個值:、 TWF_FINETOUCH
TWF_WANTPALM
。
傳回值
如果成功,則為 TRUE
,否則為 FALSE
。
備註
CWnd::ResizeDynamicLayout
如果已啟用視窗的動態配置,則會在視窗大小變更以調整子視窗的版面配置時由架構呼叫。
virtual void ResizeDynamicLayout();