共用方式為


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 使用,可先篩選視窗訊息,再將它們分派至 TranslateMessageDispatchMessage 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 傳回此視窗目前正在處理的訊息指標。 只有在訊息處理程式成員函式中 OnMessage 時,才應該呼叫 。
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 當使用者按兩下 XBUTTON1XBUTTON2 游標位於視窗的非工作區時呼叫。
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 當使用者按兩下 XBUTTON1XBUTTON2 游標位於視窗的工作區時呼叫。
CWnd::OnXButtonDown 當使用者按下 XBUTTON1XBUTTON2 游標位於視窗的工作區時呼叫。
CWnd::OnXButtonUp 當使用者放開 XBUTTON1XBUTTON2 游標位於視窗的工作區時呼叫。
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 衍生進一步類別以提供特定的視窗類型。 其中許多類別,包括 CFrameWndCMDIFrameWndCMDIChildWndCView、 和 CDialog,都是針對進一步衍生而設計的。 衍生自 CWnd的控件類別,例如 CButton,可以直接使用,或可用於進一步衍生類別。

如需使用 CWnd的詳細資訊,請參閱 Frame WindowsWindow 物件

繼承階層架構

CObject

CCmdTarget

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
接收在和yTopxLeft指定之點識別物件的資訊。 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。

範例

此範例示範如何使用 AttachDetach 對應至 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 數據結構,該數據結構具有最小矩形,該矩形會完全封入更新區域,以及指定是否已清除背景的旗標。

更新區域是由 InvalidateInvalidateRectInvalidateRgn 成員函式所設定,並在系統調整、移動、建立、捲動或執行會影響工作區的任何其他作業之後設定。 如果更新區域標示為清除, 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

將呼叫對象的預設簡單綁定屬性(例如編輯控件)系結至數據源控件的 、UserNamePasswordSQL 屬性所DataSource定義的基礎數據指標。

void BindDefaultProperty(
    DISPID dwDispID,
    VARTYPE vtProp,
    LPCTSTR szFieldName,
    CWnd* pDSCWnd);

參數

dwDispID
指定要 DISPID 系結至數據源控件之數據綁定控件上的屬性。

vtProp
指定要系結之屬性的類型。 例如、 VT_BSTRVT_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_TOPHWND_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函式會使用 或 結構中的用戶端座標POINTRECTCPoint 所指向 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 參數的成員指派hMenuthis指標。 如需適當的功能,請確定您的對話框控制件具有不是 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
識別定義插入號圖形的點陣圖。

備註

位圖先前必須由成員函式、CreateDIBitmapWindows 函式或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 是否應該解譯為 IStorageIStream 數據。 如果中的數據 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 參數的成員指派hMenuthis指標。 如需適當的功能,請確定您的對話框控制件具有不是 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,高度會設定為系統定義的視窗框線高度。

備註

插入號圖形可以是線條或區塊。

參數 nWidthnHeight 指定插入號的寬度和高度(以邏輯單位表示):確切的寬度和高度(以像素為單位)取決於對應模式。

Windows 函式可以使用 和 SM_CYBORDER 索引來擷取GetSystemMetricsSM_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,高度會設定為系統定義的視窗框線高度。

備註

插入號圖形可以是線條或區塊。

參數 nWidthnHeight 指定插入號的寬度和高度(以邏輯單位表示):確切的寬度和高度(以像素為單位)取決於對應模式。

Windows 函式可以使用 和 SM_CYBORDER 索引來擷取GetSystemMetricsSM_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 程式代碼中未呼叫,則如果您想要呼叫它,則必須在自己的程式代碼中明確呼叫它。

例如,假設您已在衍生類別中CViewDestroyWindow寫。 由於 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_POSTMSGSLB_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_POSTMSGSCB_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 呼叫DragAcceptFilesbAccept視窗,才會將本身識別為能夠處理 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, AfxFindResourceHandleCDynLinkLibrary 周遊共用和 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 結構)。 如果 lpClassNameNULL,則所有類別名稱都相符。

lpszWindowName
指向以 Null 結尾的字串,指定視窗名稱(視窗的標題)。 如果 lpWindowNameNULL,則所有視窗名稱都相符。

傳回值

識別具有指定類別名稱和視窗名稱的視窗。 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 終止字串的指標,指定先前呼叫 RegisterClassRegisterClassEx所建立的類別名稱或類別 Atom。

lpszWindow
指定視窗名稱的 Null 終止字串指標(視窗標題)。 如果此參數為 NULL,則所有視窗名稱都相符。

傳回值

如果函式成功,傳回值是具有指定類別和視窗名稱之視窗物件的指標。 如果函式失敗,傳回值為 NULL

備註

此成員函式會模擬 函式的功能 FindWindowEx,如 Windows SDK 中所述。

CWnd::FlashWindow

閃爍指定的視窗一次。

BOOL FlashWindow(BOOL bInvert);

參數

bInvert
指定要 CWnd 閃爍或傳回至其原始狀態。 如果 bInvertTRUE,則會CWnd從某個狀態閃爍至另一個狀態。 如果 bInvertFALSE,則會將視窗傳回至其原始狀態(使用中或非使用中)。

傳回值

如果窗口在成員函式呼叫 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 物件。 lefttop 成員將會是 0。 rightbottom 成員將包含視窗的寬度和高度。

備註

用戶端座標會指定工作區的左上角和右下角。 由於用戶端座標相對於工作區的 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_OWNDCCS_CLASSDC、 或 CS_PARENTDC 是在註冊 類別時,當類別註冊時,成員函式會傳回GetDC屬於 CWnd 類別的WNDCLASS裝置內容。

CWnd::GetDCEx

擷取視窗裝置內容的 CWnd 句柄。

CDC* GetDCEx(
    CRgn* prgnClip,
    DWORD flags);

參數

prgnClip
識別可能與客戶端視窗可見區域結合的裁剪區域。

flags
可以有下列其中一個預設值:

  • DCX_CACHE 從快取傳回裝置內容,而不是 OWNDCCLASSDC 視窗。 覆寫 CS_OWNDCCS_CLASSDC

  • DCX_CLIPCHILDREN 排除視窗下方 CWnd 所有子視窗的可見區域。

  • DCX_CLIPSIBLINGS 排除視窗上方 CWnd 所有同層級視窗的可見區域。

  • DCX_EXCLUDERGN 從傳回裝置內容的可見區域排除 所 prgnClip 識別的裁剪區域。

  • DCX_INTERSECTRGN 與所傳回裝置內容可見區域內所識別 prgnClip 的裁剪區域相交。

  • DCX_LOCKWINDOWUPDATE 允許繪圖,即使有 LockWindowUpdate 有效的呼叫,否則會排除此視窗。 此值用於追蹤期間繪製。

  • DCX_PARENTCLIP 使用父視窗的可見區域,並忽略父視窗的 WS_CLIPCHILDRENWS_PARENTDC 樣式位。 此值會將裝置內容的原點設定為視窗左上角 CWnd

  • DCX_WINDOW 傳回對應至視窗矩形而非用戶端矩形的裝置內容。

傳回值

如果函式成功,則為指定視窗的裝置內容;否則 NULL為 。

備註

裝置內容可用於後續的 GDI 函式中,以在工作區中繪製。

此函式是函式的 GetDC 延伸模組,可讓應用程式更充分掌控視窗的裝置內容如何及是否裁剪。

除非裝置內容屬於窗口類別,否則必須呼叫 函 ReleaseDC 式,才能在繪圖之後釋放內容。 由於在任何指定時間只能使用五個通用裝置內容,因此無法釋放裝置內容可能會防止其他應用程式存取裝置內容。

若要取得快取的裝置內容,應用程式必須指定 DCX_CACHE。 如果未指定DCX_CACHE,而且視窗既不是 CS_OWNDC ,也不是 CS_CLASSDC,則此函式會傳 NULL回 。

如果註冊 類別時,函式會傳回GetDCEx具有特殊特性的裝置內容,如果 CS_CLASSDC已在結構中WNDCLASS指定、 CS_OWNDCCS_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 則會收到非零值。 如果 lpTransNULLGetDlgItemInt 則不會警告錯誤。

備註

它會將指定對話框中指定控件的文字轉譯為整數值,方法是在文字開頭去除任何額外的空格,並轉換小數字數。 它會在到達文字結尾或遇到任何非數值字元時停止翻譯。

如果 bSignedTRUEGetDlgItemInt 則會檢查文字開頭的減號 (-),並將文字轉譯為帶正負號的數位。 否則,它會建立不帶正負號的值。

它會將訊息傳送 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

呼叫這個成員函式,以擷取數據源控件之 、UserNamePassword和 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 識別群組中的第一個控件,且 bPreviousTRUEGetNextDlgGroupItem 則會傳回群組中最後一個控件的指標。

注意

因為 MFC 支援無視窗 ActiveX 控制件、標準 ActiveX 控制件和視窗,因此只參考控制件 HWND 不再足夠。 物件 COleControlSiteOrWnd 包含將對象識別為視窗式 ActiveX 控制件、無視窗 ActiveX 控制件或視窗的資訊,如下所示:

控制件或視窗類型 識別資訊
視窗式 ActiveX 控制件 包含 HWND ,並將 COleControlSite 對象與其產生關聯。 的成員m_hWndCOleControlSiteOrWnd會設定為 HWND 控制件的 ,而 m_pSite 成員指向控制項的 COleControlSite
無視窗 ActiveX 控制件 不包含 HWND。 的成員m_pSiteCOleControlSiteOrWnd指向 控制件的 COleControlSite,而 m_hWnd 成員為 NULL
標準視窗 只包含 。HWND 的成員m_hWndCOleControlSiteOrWnd會設定為視窗的 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回 ,如果指標為 ,則NULLthisNULL回 。

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。 如果 pParentNULL,則會使用線程的主視窗(透過 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_POSSIF_TRACKPOSSIF_RANGE的組合SIF_PAGE。 如需值的詳細資訊,nMask請參閱 SCROLLINFO

傳回值

如果訊息擷取任何值,則傳回為 TRUE。 否則為 FALSE

備註

GetScrollInfo 可讓應用程式使用32位捲動位置。

結構 SCROLLINFO 包含滾動條的相關信息,包括滾動條的下限和最大捲動位置、頁面大小,以及滾動盒的位置(拇指)。 SCROLLINFO如需變更結構預設值的詳細資訊,請參閱 Windows SDK 中的結構主題。

指出滾動條位置的 MFC Windows 訊息處理程式 CWnd::OnHScroll 和 CWnd::OnVScroll 僅提供 16 位的位置數據。 GetScrollInfo 並提供 SetScrollInfo 32位的滾動條位置數據。 因此,應用程式可以在處理 CWnd::OnHScrollCWnd::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

將指定滾動條的目前最小和最大滾動條位置複製到 和 lpMaxPoslpMinPos指定的位置。

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
指定要採取的動作。 如果 bRevertFALSEGetSystemMenu 則會傳回目前使用中之 [控件] 功能表複本的句柄。 此複本一開始與 [控件] 功能表相同,但可以修改。 如果 bRevertTRUEGetSystemMenu 則會將 [控件] 功能表重設為默認狀態。 先前可能已修改的 [控件] 功能表,如果有的話,就會終結。 在此案例中,傳回值未定義。

傳回值

如果 bRevertFALSE,則識別 [控件] 功能表的複本。 如果 bRevertTRUE,則傳回值未定義。

傳回的指標可能是暫時的,不應該儲存以供稍後使用。

備註

任何不用來 GetSystemMenu 製作自己的 [控件] 功能表複本的視窗,都會收到標準 [控件] 功能表。

成員函式傳回的GetSystemMenu指標可以與 、 CMenu::InsertMenuCMenu::ModifyMenu 函式搭配CMenu::AppendMenu使用,以變更 [控件] 功能表。

[控制單一開始包含以各種識別碼值識別的專案,例如 SC_CLOSESC_MOVESC_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;

傳回值

識別視窗的最上層父視窗。

傳回的指標可能是暫時的,不應該儲存以供稍後使用。

備註

GetTopLevelParentGetTopLevelFrameGetTopLevelOwner類似;不過,它會忽略設定為目前擁有者視窗的值。

CWnd::GetTopWindow

搜尋屬於 CWnd的最上層子視窗。

CWnd* GetTopWindow() const;

傳回值

識別子視窗連結清單中的最上層子視窗 CWnd 。 如果沒有子視窗存在,則值為 NULL

傳回的指標可能是暫時的,不應該儲存以供稍後使用。

備註

如果沒有 CWnd 子系,則此函式會傳 NULL回 。

CWnd::GetUpdateRect

擷取完全圍住 更新區域的最小矩形座標。

BOOL GetUpdateRect(
    LPRECT lpRect,
    BOOL bErase = FALSE);

參數

lpRect
指向 CRect 物件或結構,這個對象或 RECT 結構 會接收包含更新區域的更新用戶端座標。

將此參數設定為 NULL ,以判斷更新區域是否存在於 內 CWnd。 如果 lpRectNULLGetUpdateRect 如果更新區域存在,則成員函式會傳回非零,如果更新區域不存在,則傳回 0。 這提供一種方式來判斷訊息是否 WM_PAINT 由無效區域所產生。 請勿在 Windows 3.0 版和更早版本中將此參數設定為 NULL

bErase
指定是否要清除更新區域中的背景。

傳回值

指定更新區域的狀態。 如果更新區域不是空的,則此值為非零值;否則為 0。

lpRect如果參數設定為 NULL,則如果更新區域存在,則傳回值為非零值,否則為 0。

備註

如果使用 CWnd 樣式建立 CS_OWNDC ,而且對應模式不是 MM_TEXTGetUpdateRect 則成員函式會以邏輯座標提供矩形。 否則, GetUpdateRect 在用戶端座標中提供矩形。 如果沒有更新區域, GetUpdateRect 請將矩形設定為空白(將所有座標設為0)。

參數 bErase 會指定是否 GetUpdateRect 應該清除更新區域的背景。 如果 bEraseTRUE 且更新區域不是空的,則會清除背景。 若要清除背景, 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 的成員 WINDOWPLACEMENTSW_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_BYCOMMANDMF_UNHILITE MF_BYPOSITION的組合MF_HILITE。 這些值可以使用位 OR 運算符來結合。 這些值具有以下意義:

  • MF_BYCOMMANDnIDHiliteItem 譯為功能表項標識碼(預設解譯)。

  • MF_BYPOSITIONnIDHiliteItem 譯為功能表項以零起始的位移。

  • MF_HILITE 醒目提示專案。 如果未指定此值,則會從專案中移除醒目提示。

  • MF_UNHILITE 從專案移除醒目提示。

傳回值

指定功能表項是否已反白顯示。 如果專案已反白顯示,則為非零;否則為 0。

備註

MF_HILITEMF_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 會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bEraseTRUE,則會在呼叫成員函式時 BeginPaint 清除背景;如果 bEraseFALSE,背景會保持不變。 如果 bEraseTRUE 更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。

每當CWnd更新區域不是空的,且該視窗的應用程式佇列中沒有其他訊息時,Windows 就會傳送WM_PAINT訊息。

範例

請參閱 CWnd::UpdateWindow 的範例。

CWnd::InvalidateRect

將該矩形新增至 CWnd 更新區域,使指定矩形內的工作區失效。

void InvalidateRect(
    LPCRECT lpRect,
    BOOL bErase = TRUE);

參數

lpRect
指向 CRect 物件或 RECT 結構 ,其中包含要加入至更新區域的矩形(在用戶端座標中)。 如果 lpRectNULL,則會將整個工作區新增至區域。

bErase
指定更新區域內的背景是否要清除。

備註

無效的矩形以及更新區域中的所有其他區域,會在傳送下一 WM_PAINT 則訊息時標示為繪製。 無效的區域會在更新區域中累積,直到下一個WM_PAINT呼叫發生時處理區域,或直到 或 ValidateRgn 成員函式驗證ValidateRect區域為止。

參數 bErase 會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bEraseTRUE,則會在呼叫成員函式時 BeginPaint 清除背景;如果 bEraseFALSE,背景會保持不變。 如果 bEraseTRUE 更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。

每當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 會指定在處理更新區域時,是否要清除更新區域內的背景。 如果 bEraseTRUE,則會在呼叫成員函式時 BeginPaint 清除背景;如果 bEraseFALSE,背景會保持不變。 如果 bEraseTRUE 更新區域的任何部分,則會清除整個區域中的背景,而不只是在指定的部分。

每當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 物件,否則會擲回 COleDispatchExceptionIDispatch::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 處理的訊息傳遞至 TranslateMessageDispatchMessage 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

從先前呼叫 所識別 nIDEventSetTimer定時器事件終止。

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

如果具有鎖定視窗的應用程式(或任何鎖定的子視窗)呼叫 GetDCGetDCExBeginPaint 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 終止字串。 如果 lpszCaptionNULL,則會使用預設標題 「Error」。

nType
指定消息框的內容和行為。

傳回值

此方法會 MessageBox 利用 Windows SDK 中所定義的函式。 這個方法會傳回呼叫此函式的結果。

備註

使用全域函式,而不是此成員函 AfxMessageBox 式,在您的應用程式中實作消息框。

下列顯示可在訊息框中使用的各種系統圖示:

Icon Macro
Stop 或 X 圖示,由中間有白色 x 的紅色圓圈組成。 MB_ICONHANDMB_ICONSTOPMB_ICONERROR
說明或問號圖示,包含具有問號的思維泡泡圖示。 MB_ICONQUESTION
重要或驚嘆號圖示,由黃色三角形和黑色驚嘆號組成。 MB_ICONEXCLAMATION和MB_ICONWARNING
資訊或字母 I 圖示,包含小寫字母 i 的思考泡泡。 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 物件, xy 參數會相對於畫面左上角。 對於子 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 正在啟動或停用 。 TRUECWnd表示正在啟動 。 FALSECWnd表示正在停用 。

dwThreadID
指定線程標識碼的值。 如果 bActiveTRUEdwThreadID 則識別擁有所停用 之的 CWnd 線程。 如果 bActiveFALSEdwThreadID 則識別擁有所啟動之的 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_APPCOMMANDlParam段底下的cmd命令。

nDevice
[in]產生輸入事件的輸入裝置。 如需可能值的清單,請參閱 的 參數WM_APPCOMMAND區段lParam底下的uDevice裝置。

nKey
[in]指出已關閉的任何虛擬密鑰,例如 CTRL 鍵或滑鼠左鍵。 如需可能值的清單,請參閱 參數WM_APPCOMMAND區段底下的dwKeyslParam索引鍵。 如需詳細資訊,請參閱關於滑鼠輸入中的子標題。

備註

此方法會 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至剪貼簿查看器鏈結中的下一個視窗(由 傳回的SetClipboardViewerOnChangeCbChain柄)。 如果 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屬於 CListBoxCComboBox 物件,則會CompareItem呼叫適當類別的虛擬函式。 覆寫 CComboBox::CompareItemCListBox::CompareItem 在您的衍生 CListBoxCComboBox 類別中執行項目比較。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 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_LISTBOXOnCtlColor 覆寫建立 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::DeleteStringCComboBox::ResetContentCListBox::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 可以是下列其中一個值:

注意

架構會呼叫此成員函式,以允許您的應用程式處理 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
指定目標縮圖的大小。 如果 bIsThumbnailFALSE,則應該忽略 。

bIsThumbnail
指定這個方法是針對圖示縮圖或即時預覽呼叫 (查看)。

bAlphaChannelSet
[out]勾選取dc位陣圖的 Alpha 色板,請將它TRUE設定為 。

備註

覆寫衍生類別中的這個方法,並在指定的裝置內容上繪製,以自定義縮圖和查看。 如果 bThumbnailTRUEszRequiredThumbnailSize 則可以忽略 。 在此情況下,您應該注意繪製完整大小的點陣圖(也就是涵蓋整個工作區的點陣圖)。 裝置內容 (dc) 隨附選取的 32 位位元陣圖。 默認實作會使用PRF_CLIENTPRF_CHILDRENPRF_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如果成員屬於 CButtonCMenuCListBoxCComboBox 物件,則會DrawItem呼叫適當類別的虛擬函式。 DrawItem覆寫適當控件類別的成員函式以繪製專案。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnDropFiles

當使用者將滑鼠左鍵放開至已卸除檔案收件者的視窗上時,架構會呼叫這個成員函式。

afx_msg void OnDropFiles(HDROP hDropInfo);

參數

hDropInfo
描述已卸除檔案之內部數據結構的指標。 、 DragQueryFileDragQueryPoint 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為 。

備註

呼叫 OnEndSessionCWnd 通知物件會話是否實際結束。

如果 bEndingTRUE,Windows 可以在所有應用程式從處理此呼叫傳回之後隨時終止。 因此,讓應用程式在內 OnEndSession執行終止所需的所有工作。

當會話結束時,您不需要呼叫 DestroyWindow 成員函式或 PostQuitMessage Windows 函式。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnEnterIdle

架構會呼叫這個成員函式,通知應用程式主視窗程式模式對話框或功能表進入閑置狀態。

afx_msg void OnEnterIdle(
    UINT nWhy,
    CWnd* pWho);

參數

nWhy
指定訊息是對話框的結果或正在顯示的功能表。 這個參數可以是下列其中一個 值:

  • MSGF_DIALOGBOX 系統閑置,因為正在顯示對話方塊。

  • MSGF_MENU 系統閑置,因為功能表正在顯示。

pWho
指定對話框的指標(如果 nWhy 為 ),或包含顯示功能表的視窗(如果 nWhyMSGF_DIALOGBOXMSGF_MENU)。 此指標可能是暫時的,不應該儲存以供日後使用。

備註

模式對話框或功能表會在處理一或多個先前的訊息之後,在其佇列中等候訊息時進入閑置狀態。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnEnterMenuLoop

架構會在輸入功能表強制回應迴圈時呼叫這個成員函式。

afx_msg void OnEnterMenuLoop(BOOL bIsTrackPopupMenu);

參數

bIsTrackPopupMenu
指定所涉及的功能表是否為快捷功能表。 如果函式成功,則具有非零值;否則為 0。

備註

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnEnterSizeMove

架構會在受影響的視窗進入移動或重設大小模式循環之後一次呼叫這個成員函式。

afx_msg void OnEnterSizeMove();

備註

此方法會 WM_ENTERSIZEMOVE 接收 Windows SDK 中所述的通知。

當使用者按兩下視窗的標題列或重設大小框線時,或視窗將訊息傳遞 WM_SYSCOMMANDCWnd::DefWindowProc 函式,以及 該訊息的 wParam 參數指定 SC_MOVESC_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_SYSCOMMANDCWnd::DefWindowProc 函式,以及 wParam 該訊息的 參數指定 SC_MOVESC_SIZE時,視窗會進入移動或重設大小的強制回應迴圈。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnFontChange

在應用程式變更字型資源集區之後,系統中的所有最上層視窗都會收到 OnFontChange 來自架構的呼叫。

afx_msg void OnFontChange();

備註

從系統新增或移除字型的應用程式(例如,透過 AddFontResourceRemoveFontResource Windows 函式)應該將訊息傳送 WM_FONTCHANGE 至所有最上層視窗。

若要傳送此訊息,請使用 SendMessage Windows 函式,並將 hWnd 參數設定為 HWND_BROADCAST

CWnd::OnGetDlgCode

呼叫控制項,讓控制項可以處理方向鍵和 TAB 鍵輸入本身。

afx_msg UINT OnGetDlgCode();

傳回值

下列其中一或多個值,指出應用程式處理的輸入類型:

  • DLGC_BUTTON 按鈕(泛型)。

  • DLGC_DEFPUSHBUTTON 默認推播按鈕。

  • DLGC_HASSETSELEM_SETSEL 消息。

  • DLGC_UNDEFPUSHBUTTON 沒有預設的按鈕處理。 (應用程式可以使用這個旗標搭配 DLGC_BUTTON 來指出它正在處理按鈕輸入,但依賴系統來處理預設的按鈕處理。

  • DLGC_RADIOBUTTON 單選按鈕。

  • DLGC_STATIC 靜態控件。

  • DLGC_WANTALLKEYS 所有鍵盤輸入。

  • DLGC_WANTARROWS 箭頭鍵。

  • DLGC_WANTCHARSWM_CHAR 消息。

  • DLGC_WANTMESSAGE 所有鍵盤輸入。 應用程式會將這個訊息傳遞給控件。

  • DLGC_WANTTAB TAB 鍵。

備註

一般而言,Windows 會處理控件的所有箭頭鍵和 TAB 鍵輸入 CWnd 。 藉由覆寫 OnGetDlgCodeCWnd 控件可以選擇特定類型的輸入來處理本身。

預先定義控件類別的預設 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_THUMBPOSITIONSB_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_BACKWARDINPUTLANGCHANGE_FORWARDINPUTLANGCHANGE_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_DBLCLKSWNDCLASS視窗才會收到OnLButtonDblClk呼叫。 這是 Microsoft Foundation Class 視窗的預設值。 當使用者按下、放開,然後在系統的按兩下時間限制內再次按下滑鼠左鍵時,Windows 會呼叫 OnLButtonDblClk 。 按兩下滑鼠左鍵實際上會產生四個事件:WM_LBUTTONDOWN、訊息、WM_LBUTTONDBLCLK呼叫,以及釋放按鈕時的另一則WM_LBUTTONUPWM_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_DBLCLKSWNDCLASS視窗才會收到OnMButtonDblClk呼叫。 這是所有 Microsoft Foundation Class 視窗的預設值。 當使用者按下、放開,然後在系統按兩下時間限制內再次按下滑鼠中間按鈕時,Windows 會產生 OnMButtonDblClk 呼叫。 按兩下中間滑鼠按鈕實際上會產生四個事件:WM_MBUTTONDOWN和訊息、WM_MBUTTONDBLCLK呼叫,以及另一則WM_MBUTTONUPWM_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 包含擁有者繪製控件維度的數據結構。

備註

覆寫這個成員函式,並填入 MEASUREITEMSTRUCTlpMeasureItemStruct 指向的數據結構並傳回;這會通知 Windows 控件的維度,並允許 Windows 正確處理使用者與控件的互動。

如果使用 或 CBS_OWNERDRAWVARIABLE 樣式建立LBS_OWNERDRAWVARIABLE清單框或下拉式方塊,架構會針對控件中的每個專案呼叫此函式,否則會呼叫此函式一次。

Windows 會在傳送WM_INITDIALOG訊息之前,起始下拉式方塊的擁有者和清單框OWNERDRAWFIXED擁有者的呼叫OnMeasureItem。 因此,當擁有者收到此呼叫時,Windows 尚未決定控件中使用的字型高度和寬度:需要這些值的函數調用和計算應該發生在應用程式或連結庫的主要函式中。

如果要測量的專案為 CMenuCListBox CComboBox 物件,則會 MeasureItem 呼叫適當類別的虛擬函式。 MeasureItem覆寫適當控件類別的成員函式,以計算和設定每個專案的大小。

OnMeasureItem 只有在控件的類別是在運行時間建立,或是使用 LBS_OWNERDRAWVARIABLECBS_OWNERDRAWVARIABLE 樣式建立時,才會呼叫它。 如果控件是由對話框編輯器所建立, OnMeasureItem 則不會呼叫。 這是因為 WM_MEASUREITEM 訊息會在控件的建立程式中早期傳送。 如果您使用、 SubclassDlgItemSubclassWindow子類別,子類別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_SYSMENUMF_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 Activate CWnd 物件。

  • 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 時,在其使用bActiveFALSE中色彩中繪製標題列和標題欄文字。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnNcCalcSize

架構需要計算工作區的大小和位置時,架構會呼叫這個成員函式。

afx_msg void OnNcCalcSize(
    BOOL bCalcValidRects,
    NCCALCSIZE_PARAMS* lpncsp);

參數

bCalcValidRects
指定應用程式是否應該指定工作區的哪個部分包含有效資訊。 Windows 會將有效資訊複製到新工作區內的指定區域。 如果此參數為TRUE,應用程式應該指定工作區的哪個部分有效。

lpncsp
NCCALCSIZE_PARAMS指向數據結構,其中包含應用程式可用來計算矩形的新大小和位置CWnd(包括工作區、框線、標題、滾動條等等)。

備註

藉由處理此訊息,當視窗的大小或位置變更時,應用程式可以控制視窗工作區的內容。

不論的值bCalcValidRects為何,結構結構成員NCCALCSIZE_PARAMSrgrc指定數位中的第一個矩形都包含視窗的座標。 如果是子視窗,座標會相對於父視窗的工作區。 對於最上層視窗,座標是螢幕座標。 應用程式應該修改 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 物件,指定 相對於螢幕左上角之游標的 xy 座標。

備註

此方法會 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

當使用者按兩下 XBUTTON1XBUTTON2 游標位於視窗的非工作區時,架構會呼叫這個成員函式。

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 物件,指定 相對於螢幕左上角之游標的 xy 座標。

備註

此方法會 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_NOTIFYWM_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_REQUERYNF_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_PAINTRedrawWindow 成員函式時UpdateWindow,會傳送訊息。

視窗可能會因為呼叫 RedrawWindow 具有旗標集的成員函 RDW_INTERNALPAINT 式而接收內部繪製訊息。 在此情況下,視窗可能沒有更新區域。 應用程式應該呼叫 GetUpdateRect 成員函式,以判斷視窗是否有更新區域。 如果 GetUpdateRect 傳回 0,應用程式不應該呼叫 BeginPaintEndPaint 成員函式。

應用程式有責任查看每個訊息的內部數據結構 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 數據結構,定義要繪製之工作區的哪個部分。

備註

若要判斷整個工作區或只需要重新繪製的一部分,剪貼簿擁有者必須將結構成員中rcpaintPAINTSTRUCT指定之繪圖區域的維度與最近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_CREATEWM_DESTROY,則 的高順序字組 message 是子視窗的標識符,否則,高序字組為未定義。 事件 (低序字 message ) 可以是下列任何值:

  • WM_CREATE 正在建立子視窗。

  • WM_DESTROY 子視窗正在終結。

  • WM_LBUTTONDOWN 使用者已將滑鼠游標放在子視窗上方,然後按鼠左鍵。

  • WM_MBUTTONDOWN 使用者已將滑鼠游標放在子視窗上方,然後按兩下中間滑鼠按鈕。

  • WM_RBUTTONDOWN 使用者已將滑鼠游標放在子視窗上方,然後按鼠右鍵。

lParam
如果的事件 (低序字) messageWM_CREATEWM_DESTROYlParam 則指定子視窗的視窗句柄,否則 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_POWERBROADCASTlParam 參數。

注意

架構會呼叫此成員函式,以允許您的應用程式處理 Windows 訊息。 傳遞至函式的參數反映收到訊息時架構所收到的參數。 如果您呼叫此函式的基底類別實作,該實作會使用原本隨訊息傳遞的參數,而不是您提供給函式的參數。

CWnd::OnQueryDragIcon

架構會呼叫這個成員函式的最小化(圖示)視窗,該視窗沒有為其類別定義的圖示。

afx_msg HCURSOR OnQueryDragIcon();

傳回值

雙字值,其中包含低序字中的游標或圖示句柄。 游標或圖示必須與顯示驅動程式的解析度相容。 如果應用程式傳 NULL回 ,系統會顯示預設數據指標。 預設傳回值為 NULL

備註

系統會進行此呼叫,以取得要顯示的數據指標,而使用者拖曳最小化的視窗。 如果應用程式傳回圖示或游標的句柄,系統會將它轉換成黑白。 如果應用程式傳回句柄,句柄必須識別與顯示驅動程式解析度相容的單色游標或圖示。 應用程式可以呼叫 CWinApp::LoadCursorCWinApp::LoadIcon 成員函式,從其可執行檔中的資源載入游標或圖示,並取得此句柄。

CWnd::OnQueryEndSession

當使用者選擇結束 Windows 會話或應用程式呼叫 ExitWindows Windows 函式時,架構會呼叫這個成員函式。

afx_msg BOOL OnQueryEndSession();

傳回值

如果應用程式可以方便關閉,則為非零;否則為 0。

備註

如果有任何應用程式傳回 0,則不會結束 Windows 會話。 Windows 會在一個應用程式傳回 0 時立即停止呼叫 OnQueryEndSessionWM_ENDSESSION 並針對任何已經傳回非零的應用程式傳送參數值 FALSE 為 的訊息。

CWnd::OnQueryNewPalette

架構會在物件即將接收輸入焦點時 CWnd 呼叫這個成員函式,讓您 CWnd 有機會在收到焦點時實現其邏輯調色盤。

afx_msg BOOL OnQueryNewPalette();

傳回值

如果 CWnd 實現其邏輯調色盤,則為非零;否則為 0。

CWnd::OnQueryOpen

架構會在物件最小化時 CWnd 呼叫這個成員函式,而使用者要求 CWnd 還原至其預先設定的大小和位置。

afx_msg BOOL OnQueryOpen();

傳回值

如果可以開啟圖示,則為非零,或0以防止開啟圖示。

備註

在 中 OnQueryOpenCWnd 不應該執行任何會導致啟用或焦點變更的動作(例如,建立對話框)。

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回 ,則會停止進一步處理。 呼叫父視窗會提供子視窗中游標設定的父視窗控件。

如果游標不在工作區中,則預設實作會將游標設定為箭號,如果不在工作區中,則設定為已註冊類別的數據指標。

如果 nHitTestHTERRORmessage 是滑鼠按鈕向下訊息,則會 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_SETTINGCHANGEON_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 下,您的處理程式將會由 OnSettingChangeuFlags 呼叫,而且一律為零。

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則 或 MoveWindowSetScrollPos 參數應該是非零,導致 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_SYSCHARTranslateAccelerator 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_CLOSECWnd關閉物件。

  • SC_HOTKEYCWnd啟動與應用程式指定之熱鍵相關聯的物件。 的低序字 lParamHWND 識別要啟動之視窗的 。

  • SC_HSCROLL 水平捲動。

  • SC_KEYMENU 透過擊鍵擷取功能表。

  • SC_MAXIMIZE (或 SC_ZOOMCWnd 最大化物件。

  • SC_MINIMIZE (或 SC_ICONCWnd 將物件最小化。

  • SC_MOUSEMENU 透過滑鼠按兩下來擷取功能表。

  • SC_MOVECWnd移動物件。

  • 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 值結合,以取得正確的結果。

[控件] 選單中的功能表項可以使用、 AppendMenuInsertMenuModifyMenu 成員函式來修改GetSystemMenu。 變更 [控制項] 選單的應用程式必須處理 WM_SYSCOMMAND 訊息,而且應用程式未處理的任何 WM_SYSCOMMAND 訊息都必須傳遞至 OnSysCommand。 應用程式所新增的任何命令值都必須由應用程式處理,而且無法傳遞至 OnSysCommand

應用程式可以隨時透過將訊息傳遞 WM_SYSCOMMANDOnSysCommand來執行任何系統命令。

定義以從 [控件] 功能選取專案的快捷鍵(快速鍵)按鍵會轉譯為 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_SYSKEYDOWNOnSysKeyDown 收到的訊息可以傳遞至 TranslateAccelerator Windows 函式,其會處理它,就像是一般金鑰訊息,而不是系統密鑰訊息一樣。 這可讓快捷鍵與活動視窗搭配使用,即使活動窗口沒有輸入焦點也一樣。

由於自動重複,在收到訊息之前WM_SYSKEYUP,可能會發生多個OnSysKeyDown呼叫。 先前的索引鍵狀態 (位元 14) 可用來判斷 OnSysKeyDown 呼叫指出第一個向下轉換或重複的向下轉換。

針對IBM Enhanced 101 和 102 鍵鍵盤,增強鍵是鍵盤主要區段的右 ALT 和右 CTRL 鍵; INSDELHOMEENDPAGE UP、PAGE UPPAGE 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_SYSKEYUPOnSysKeyUp 收到的訊息可以傳遞至 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_NOTBUTTONTTF_CENTERTIP

覆寫 OnToolHitTest 以提供與預設提供的不同資訊。

如需 結構的詳細資訊,請參閱 TOOLINFOWindows 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_THUMBPOSITIONSB_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_BYTEALIGNCLIENTCS_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

如果應用程式收到設定為NULLOnWinIniChange呼叫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

當使用者按兩下 XBUTTON1XBUTTON2 游標位於視窗的工作區時,架構會呼叫這個成員函式。

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

當使用者按下 XBUTTON1XBUTTON2 游標位於視窗的工作區時,架構會呼叫這個成員函式。

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

當使用者放開 XBUTTON1XBUTTON2 游標位於視窗的工作區時,架構會呼叫這個成員函式。

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 用來轉譯視窗訊息,再將其分派至 TranslateMessageDispatchMessage 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_INTERNALPAINTWM_PAINT不論視窗是否包含無效的區域,都會將訊息張貼至視窗。

  • RDW_INVALIDATE 無效 lpRectUpdateprgnUpdate (只有一個可能不是 NULL)。 如果兩者都是 NULL,整個視窗就會失效。

下列旗標可用來驗證視窗:

  • RDW_NOERASE 隱藏任何擱置 WM_ERASEBKGND 的訊息。

  • RDW_NOFRAME 隱藏任何擱置 WM_NCPAINT 的訊息。 這個旗標必須與 搭配 RDW_VALIDATE 使用,而且通常搭配 RDW_NOCHILDREN使用。 此選項應該小心使用,因為它可能會防止視窗的某些部分正確繪製。

  • RDW_NOINTERNALPAINT 隱藏任何擱置的內部 WM_PAINT 訊息。 此旗標不會影響 WM_PAINT 從無效區域產生的訊息。

  • RDW_VALIDATElpRectUpdate驗證 或 prgnUpdate (只有一個可能不是 NULL)。 如果兩者都是 NULL,則會驗證整個視窗。 此旗標不會影響內部 WM_PAINT 訊息。

發生重繪時,下列旗標會控制。 除非指定其中一個位,否則函式不會執行 RedrawWindow 繪製。

  • RDW_ERASENOW在函式傳回之前,讓受影響的視窗(如 和 RDW_NOCHILDREN 旗標所指定RDW_ALLCHILDREN)接收WM_NCPAINTWM_ERASEBKGND訊息。 WM_PAINT 訊息會延遲。

  • RDW_UPDATENOW讓受影響的視窗(如 和 RDW_NOCHILDREN 旗標所指定RDW_ALLCHILDREN)在函式傳回之前,視需要接收WM_NCPAINTWM_ERASEBKGNDWM_PAINT 訊息。

根據預設,受 RedrawWindow 函式影響的視窗取決於指定的視窗 WS_CLIPCHILDREN 是否有樣式。 視窗的 WS_CLIPCHILDREN 子視窗不會受到影響。 不過,在遇到視窗之前WS_CLIPCHILDREN,不是WS_CLIPCHILDREN視窗的視窗會以遞歸方式驗證或失效。 下列旗標會控制哪些視窗受到 函式 RedrawWindow 的影響:

  • RDW_ALLCHILDREN 在重繪作業中包含子視窗,如果有的話。

  • RDW_NOCHILDREN 從重繪作業排除子視窗,如果有的話。

傳回值

如果已成功重新繪製視窗,則為非零;否則為 0。

備註

RedrawWindow當成員函式用來使桌面視窗的一部分失效時,該視窗不會收到WM_PAINT訊息。 若要重新修補桌面,應用程式應該使用 CWnd::ValidateRgn、、 CWnd::InvalidateRgnCWnd::UpdateWindowRedrawWindow

CWnd::ReflectChildNotify

架構會從 OnChildNotify呼叫此訊息函式。

BOOL ReflectChildNotify(
    UINT message,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

參數

message
指定要反映的訊息。

wParam
指定其他訊息相依資訊。

lParam
指定其他訊息相依資訊。

pResult
父視窗所產生子視窗所產生的結果。 可以是 NULL

傳回值

TRUE 如果已反映訊息,則為 ;否則 FALSE為 。

備註

它是可反映 message 其來源的協助程式函式。

反映的訊息會直接傳送至 CWnd::OnWndMsgCCmdTarget::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
指出長條是否應該延展至框架的大小。

備註

nIDFirstnIDLast 參數會定義要重新置放在工作區中的控制列標識元範圍。 參數 nIDLeftOver 會指定子視窗的標識碼(通常是檢視),此視窗會重新置放並重設大小,以填滿未由控制列填滿的工作區其餘部分。

CWnd::RunModalLoop

呼叫此成員函式以擷取、轉譯或分派訊息,直到 ContinueModalFALSE回 為止。

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函式會將 或 lpRectlpPoint提供的螢幕座標取代為用戶端座標。 新座標相對於工作區左上角 CWnd

範例

請參閱 CListCtrl::GetItemRect 的範例。

CWnd::ScrollWindow

捲動目前 CWnd 物件的工作區內容。

void ScrollWindow(
    int xAmount,
    int yAmount,
    LPCRECT lpRect = NULL,
    LPCRECT lpClipRect = NULL);

參數

xAmount
指定水平捲動的裝置單位數量。 此參數必須是負值,才能向左卷動。

yAmount
指定垂直捲動的裝置單位數量。 此參數必須是負值,才能向上捲動。

lpRect
指向 CRect 物件或 RECT 結構 ,指定要捲動之工作區的部分。 如果 lpRectNULL,則會捲動整個工作區。 如果游標矩形與滾動矩形交集,則會重新定位插入號。

lpClipRect
CRect指向物件或RECT結構,指定要捲動的裁剪矩形。 只會捲動此矩形內的位。 即使這些位位於矩形內, lpRect 此矩形以外的位也不會受到影響。 如果 lpClipRectNULL,則捲動矩形上不會執行裁剪。

備註

如果插入號在捲動中 CWndScrollWindow 則會自動隱藏插入號以防止清除插入號,然後在捲動完成後還原插入號。 插入號位置會據以調整。

成員函式所 ScrollWindow 發現的區域不會重新繪製,但會合併到目前 CWnd 物件的更新區域。 應用程式最終會收到一則 WM_PAINT 訊息,通知其區域需要重繪。 若要在捲動完成時重新畫出發現的區域,請在呼叫 ScrollWindow之後立即呼叫UpdateWindow成員函式。

如果 lpRectNULL,則視窗中任何子視窗的位置會依 和 yAmountxAmount指定的數量位移,而 中CWnd任何無效(未配對)區域也會位移。 ScrollWindow當 是 NULLlpRect,速度較快。

如果 lpRect 不是 NULL,則子視窗的位置不會變更,且 中的 CWnd 無效區域不會位移。 若要避免在 不是 時lpRect更新問題,請在呼叫 ScrollWindow之前呼叫 UpdateWindow 成員函式以重新重繪CWndNULL

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捲動與 和 中所dxdy指定像素數目相交之矩形lpRectScroll的所有子視窗。 Windows 會將訊息傳送 WM_MOVE 至所有相交 lpRectScroll的子視窗,即使它們不會移動也一樣。 當子視窗捲動且游標矩形與捲動矩形交集時,插入號會重新置放。

傳回值

如果函式成功,則傳回值為 SIMPLEREGION (矩形無效區域)、 COMPLEXREGION (非矩形無效區域、重疊矩形或 NULLREGION 無無效區域),否則傳回值為 ERROR

備註

此函式類似於函 ScrollWindow 式,具有一些額外的功能。

如果未 SW_INVALIDATE 指定 和 SW_ERASE ,則 ScrollWindowEx 成員函式不會使卷動離開的區域失效。 如果已設定其中一個旗標, ScrollWindowEx 則會使這個區域失效。 區域不會更新, UpdateWindow 直到應用程式呼叫成員函式、呼叫 RedrawWindow 成員函式(指定 RDW_UPDATENOWRDW_ERASENOW),或從應用程式佇列擷取 WM_PAINT 訊息為止。

如果視窗具有 WS_CLIPCHILDREN 樣式,則 所 prgnUpdate 指定的傳回區域,並 lpRectUpdate 代表必須更新之捲動視窗的總區域,包括需要更新之子視窗中的任何區域。

SW_SCROLLCHILDREN如果指定旗標,如果子視窗的一部分捲動,Windows 將不會正確更新畫面。 位於來源矩形外部的捲動子視窗部分將不會清除,也不會在其新目的地中正確繪製。 使用 Windows 函 DeferWindowPos 式來移動未完全位於矩形內的 lpRectScroll 子視窗。 如果已設定旗標, SW_SCROLLCHILDREN 且插入號矩形與卷動矩形交集,則游標會重新置放。

不論視窗是否具有 或類別樣式,所有輸入和輸出座標都lpRectScrolllpRectCliplpRectUpdateprgnUpdate假設為用戶端座標。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

備註

如果 bDeepFALSE,則訊息只會傳送至視窗的直接子系,否則訊息會傳送至所有子系視窗。

如果 bDeepbOnlyPermTRUE,搜尋會繼續在暫存視窗下方。 在此情況下,只有在搜尋期間遇到永久視窗才會接收訊息。 如果 bDeepFALSE,訊息只會傳送至視窗的直接子系。

範例

// 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_NCHITTESTWM_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_DRAWCLIPBOARDWM_CHANGECBCHAINWM_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
指定整數值是帶正負號還是不帶正負號。 如果此參數為 TRUEnValue 則會簽署。 如果此參數是 TRUEnValue 小於0,則會在字串中的第一個數位之前放置減號。 如果此參數為 FALSEnValue 則為不帶正負號。

備註

SetDlgItemIntWM_SETTEXT 訊息傳送至指定的控制件。

範例

請參閱 CWnd::SetDlgItemText 的範例。

CWnd::SetDlgItemText

設定視窗或對話框擁有之控件的標題或文字。

void SetDlgItemText(
    int nID,
    LPCTSTR lpszString);

參數

nID
識別要設定其文字的控制件。

lpszString
CString指向物件或以 Null 結束的字串,其中包含要複製到控件的文字。

備註

SetDlgItemTextWM_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_SYSCHARWM_SYSKEYDOWNWM_SYSKEYUP

CWnd::SetFont

WM_SETFONT 訊息傳送至視窗以使用指定的字型。

void SetFont(
    CFont* pFont,
    BOOL bRedraw = TRUE);

參數

pFont
指向 CFont 物件的指標。

bRedraw
TRUE表示視窗在處理訊息之後立即重新繪製,否則FALSEWM_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為 ,則會清除旗標。

備註

此成員函式會設定或清除重繪旗標。 清除重繪旗標時,在每次變更之後都不會更新內容,而且在重繪旗標設定之前不會重新繪製。 例如,需要將數個專案新增至清單框的應用程式可以清除重繪旗標、新增專案,然後設定重繪旗標。 最後,應用程式可以呼叫 InvalidateInvalidateRect 成員函式,讓清單框重新繪製。

範例

// 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
指定是否應重新繪製滾動條以反映新位置。 如果 bRedrawTRUE,則會重新繪製滾動條。 FALSE如果是 ,則不會重新繪製。 滾動條預設會重新繪製。

傳回值

如果成功,則傳回 為 TRUE。 否則為 FALSE

備註

結構 SCROLLINFO 包含滾動條的相關信息,包括滾動條的下限和最大捲動位置、頁面大小,以及滾動盒的位置(拇指)。 SCROLLINFO如需變更結構預設值的詳細資訊,請參閱 Windows SDK 中的結構主題。

指出滾動條位置的 MFC Windows 訊息處理程式, CWnd::OnHScrollCWnd::OnVScroll僅提供 16 位的位置數據。 GetScrollInfo 並提供 SetScrollInfo 32位的滾動條位置數據。 因此,應用程式可以在處理 CWnd::OnHScrollCWnd::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
指定是否應該重新繪製滾動條以反映變更。 如果 bRedrawTRUE,則會重繪滾動條;如果 FALSE為 ,則不會重新繪製滾動條。

備註

它也可以用來隱藏或顯示標準滾動條。

應用程式不應該呼叫此函式,以在處理滾動條通知訊息時隱藏滾動條。

如果的呼叫緊接在對成員函式的呼叫SetScrollPosSetScrollRange之後,成員函式中的 SetScrollPos 參數應該是 0,bRedraw以防止滾動條被繪製兩次。

標準滾動條的預設範圍是 0 到 100。 滾動條控制件的預設範圍是空的( nMinPosnMaxPos 值為 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::SetTimerCWnd::OnTimerCWnd::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_FRAMECHANGEDWM_NCCALCSIZE將訊息傳送至視窗,即使視窗的大小未變更也一樣。 如果未指定此旗標, WM_NCCALCSIZE 則只會在視窗的大小變更時傳送。

  • SWP_HIDEWINDOW 隱藏視窗。

  • SWP_NOACTIVATE 不會啟動視窗。 如果未設定此旗標,則會啟動視窗並移至最上層或最上層群組的頂端(視參數的 pWndInsertAfter 設定而定)。

  • SWP_NOCOPYBITS 捨棄工作區的整個內容。 如果未指定此旗標,則會在視窗重設大小或重新定位之後,儲存並複製回工作區的有效工作區。

  • SWP_NOMOVE 保留目前的位置(忽略 xy 參數)。

  • SWP_NOOWNERZORDER 不會變更 Z 順序中的擁有者視窗位置。

  • SWP_NOREDRAW 不會重新繪製變更。 如果設定此旗標,則不會重新繪製任何種類的 。 這適用於工作區、非工作區區域(包括標題和滾動條),以及因為移動視窗而發現父視窗的任何部分。 設定此旗標時,應用程式必須明確失效或重新繪製必須重新繪製之視窗和父視窗的任何部分。

  • SWP_NOREPOSITIONSWP_NOOWNERZORDER相同。

  • SWP_NOSENDCHANGING 防止視窗接收 WM_WINDOWPOSCHANGING 訊息。

  • SWP_NOSIZE 保留目前的大小(忽略 cxcy 參數)。

  • 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樣式。&wndTopMostpWndInsertAfter

如果 Z 順序包含任何具有樣式的 WS_EX_TOPMOST 視窗,則以 &wndTopMost 值行動的視窗會放在所有非最上層視窗的頂端,但在最上層視窗下方。 當應用程式啟動沒有 WS_EX_TOPMOST 位的非使用中視窗時,視窗會移至所有非最上層視窗上方,但位於最上層視窗下方。

如果SetWindowPos當 參數是 &wndBottomCWnd 是最上層的視窗時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為 ,則操作系統會在設定區域之後重新繪製窗口,否則不會。 一般而言,如果視窗可見,則設定 bRedrawTRUE 。 如果設定為 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 物件,並取代控制件的 WndProcAfxWndProc 函式。 函式會將舊的 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 物件,並取代視窗的 WndProcAfxWndProc 函式。 函式會將指標儲存至物件中的CWndWndProc

注意

呼叫此函式時,視窗不得已附加至 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。 如果 bSaveAndValidateTRUE,則非零的傳回值表示數據已成功驗證。

備註

架構會在預設實作中建立強制回應對話框時,自動呼叫 UpdateData bSaveAndValidate 設定 FALSECDialog::OnInitDialog的 。 呼叫會在對話框可見之前發生。 的預設實作會 CDialog::OnOK 呼叫這個成員函式,並將 bSaveAndValidate 設定為 TRUE 來擷取數據,如果成功,將會關閉對話方塊。 (如果在對話框中按兩下[取消] 按鈕,對話框就會關閉,而不會擷取數據。

CWnd::UpdateDialogControls

呼叫這個成員函式,以更新對話框按鈕的狀態,以及使用回呼機制的 ON_UPDATE_COMMAND_UI 對話框或視窗中的其他控制件。

void UpdateDialogControls(
    CCmdTarget* pTarget,
    BOOL bDisableIfNoHndler);

參數

pTarget
指向應用程式的主框架視窗,並用於路由更新訊息。

bDisableIfNoHndler
指出沒有更新處理程式的控制項是否應該自動顯示為停用的旗標。

備註

如果子控件沒有處理程式且 bDisableIfNoHndlerTRUE,則會停用子控件。

架構會針對對話框列或工具列中的控件呼叫這個成員函式,做為應用程式閑置處理的一部分。

CWnd::UpdateLayeredWindow

更新分層視窗的位置、大小、形狀、內容和透明度。

BOOL UpdateLayeredWindow(
    CDC* pDCDst,
    POINT* pptDst,
    SIZE* psize,
    CDC* pDCSrc,
    POINT* pptSrc,
    COLORREF crKey,
    BLENDFUNCTION* pblend,
    DWORD dwFlags);

參數

pDCDst
螢幕裝置內容的指標。 當視窗內容更新時,它會用於調色盤色彩比對。 如果 pDCDstNULL,則會使用預設調色盤。

如果 pDCSrcNULLpDCDst 必須是 NULL

pptDst
結構的指標 POINT ,指定分層視窗的新螢幕位置。 如果目前的位置未變更, pptDst 可以是 NULL

psize
SIZE結構的指標,指定分層視窗的新大小。 如果視窗的大小未變更, psize 可以是 NULL

如果 pDCSrcNULLpsize 必須是 NULL

pDCSrc
定義分層視窗之介面的DC指標。 如果視窗的圖形與視覺內容未變更, pDCSrc 可以是 NULL

pptSrc
POINT結構的指標,指定裝置內容中圖層的位置。

如果 pDCSrcNULLpptSrc 應該是 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 結構 ,其中包含要從更新區域移除之矩形的用戶端座標。 如果 lpRectNULL,則會驗證整個視窗。

備註

成員 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_FINETOUCHTWF_WANTPALM

傳回值

如果成功,則為 TRUE,否則為 FALSE

備註

CWnd::ResizeDynamicLayout

如果已啟用視窗的動態配置,則會在視窗大小變更以調整子視窗的版面配置時由架構呼叫。

virtual void ResizeDynamicLayout();

備註

另請參閱

CCmdTarget
階層架構圖表
CFrameWnd
CView