共用方式為


SUBEDIT 屬性範例:設定標準 Windows 控制項為 Superclass

更新:2007 年 11 月

SUBEDIT 屬性範例會示範如何建立一個將標準 Windows 編輯控制項設定為 Superclass 的 ATL 控制項。

SUBEDIT 範例是本範例的未使用屬性版本。

安全性注意事項:

這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。

若要取得範例和指示以便進行安裝:

  • 按一下 Visual Studio [說明] 功能表上的 [範例]。

    如需詳細資訊,請參閱尋找範例檔案

  • 最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。

  • 您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。

建置和執行範例

若要建置和執行這個範例

  1. 開啟方案檔 SubEdit.sln。

  2. 從 [建置] 功能表中,按一下 [建置]。

  3. 建置好範例之後,在您的 Web 瀏覽器內開啟 AtlEdit.htm,並測試該控制項。

您可透過開啟 ATLEdit 類別,在 ActiveX 控制項測試容器中測試該控制項。如需存取測試容器和使用容器測試控制項的詳細資訊,請參閱使用測試容器測試屬性和事件

將 Windows 控制項設定為 Superclass

ATL 能夠讓您建立一個將標準 Windows 控制項設定為 Superclass 的控制項。設定 Superclass 可以讓您根據現有的類別,建立使用不同視窗程序的視窗類別。接著您可根據此新的視窗類別建立一個視窗。當您將一個控制項設定為 Superclass 時,訊息將先由 ATL 訊息對應 (Message Map) 處理,之後才傳送給控制項的原始視窗程序,如此可以讓您修改標準 Windows 控制項的預設行為。

當您使用 ATL 控制項精靈來建立 ActiveX 控制項時,可以選擇是否根據標準視窗類別加入控制項。在這種情況下,精靈會加入 CContainedWindow 型別的成員變數至 ActiveX 控制項的類別。然後 CContainedWindow::Create 會建立視窗,此視窗會將您所指定的視窗類別設定為 Superclass。該視窗會使用 CContainedWindow::WindowProc 透過訊息對應來傳送其訊息。如果訊息需要進一步處理,它會被傳給該視窗類別的原始視窗程序。

檢查範例程式碼 (AtlEdit.h)

CAtlEdit 類別的建構函式設定 m_bWindowOnly 成員變數為 TRUE,如此可以確保控制項絕不會啟動成無視窗 (Windowless) 控制項。

CContainedWindow 成員變數 m_EditCtrl 是透過 CAtlEdit 建構函式來初始化。CContainedWindow 建構函式接受三個參數:被設定為 Superclass 的視窗類別名稱 (在本例中為 "EDIT");指向 CAtlEdit 類別的指標,此類別包含了訊息對應;處理 m_EditCtrl 訊息的訊息對應識別項。在預設狀態下,m_EditCtrl 會使用一個替代的、且以 ALT_MSG_MAP 巨集宣告的訊息對應。

預設的訊息對應會為傳遞至 CAtlEdit 控制項的 WM_CREATEWM_CTLCOLOREDIT 訊息宣告處理常式函式的名稱。OnCreate 處理常式會呼叫 CContainedWindow::Create 來建立 m_EditCtrl 的視窗。OnCtlColorEdit 處理常式會替 m_EditCtrl 指定新的背景和文字色彩。

替代的訊息對應會為傳遞至 m_EditCtrlWM_CHAR 訊息宣告一個處理常式函式。此處理常式只能接受字元,而非符號或數字,然後將 WM_CHAR 訊息傳遞至 Windows 編輯類別所定義的原始視窗程序。

屬性

本範例使用下列屬性:

coclass, com_interface_entry, default, dual, emitidl, helpstring, implements_category, module, object, pointer_default, progid, registration_script, threading, uuid, version, vi_progid

關鍵字

本範例使用下列關鍵字:

CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CContainedWindow::DefWindowProc; DisableThreadLibraryCalls; GetStockObject; GetWindowRect; IDataObjectImpl; IDispatchImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISpecifyPropertyPagesImpl; IViewObjectExImpl; SetBkColor; SetTextColor; SetWindowPos

注意事項:

部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。

請參閱

其他資源

ATL 屬性範例