共用方式為


CComControl 類別

這個類別提供建立和管理ATL控件的方法。

重要

這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。

語法

template <class T, class WinBase = CWindowImpl<T>>
class ATL_NO_VTABLE CComControl : public CComControlBase,
    public WinBase;

參數

T
實作控件的類別。

WinBase
實作視窗化函式的基類。 預設為 CWindowImpl

成員

公用建構函式

名稱 描述
CComControl::CComControl 建構函式。

公用方法

名稱 描述
CComControl::ControlQueryInterface 擷取所要求介面的指標。
CComControl::CreateControlWindow 建立控件的視窗。
CComControl::FireOnChanged 通知容器的接收控件屬性已變更。
CComControl::FireOnRequestEdit 通知容器的接收,控件屬性即將變更,而且物件要求接收如何繼續。
CComControl::MessageBox 呼叫這個方法來建立、顯示及操作消息框。

備註

CComControl 是ATL控件的一組實用的控制項協助程式函式和基本數據成員。 當您使用 ATL 控件精靈建立標準控件或 DHTML 控件時,精靈會自動從 CComControl衍生您的類別。 CComControl 會從 CComControlBase 衍生大部分的方法。

如需建立控件的詳細資訊,請參閱 ATL 教學課程。 如需 ATL 專案精靈的詳細資訊,請參閱建立 ATL 專案一文

如需方法和數據成員的 CComControl 示範,請參閱 CIRC 範例。

繼承階層架構

WinBase

CComControlBase

CComControl

需求

標頭: atlctl.h

CComControl::CComControl

建構函式。

CComControl();

備註

呼叫 CComControlBase 建構函式,傳遞m_hWnd透過 CWindowImpl 繼承的數據成員。

CComControl::ControlQueryInterface

擷取所要求介面的指標。

virtual HRESULT ControlQueryInterface(const IID& iid, void** ppv);

參數

iid
[in]所要求介面的 GUID。

ppv
[out]iid識別之介面指標的指標,如果找不到介面,則為 NULL。

備註

只會處理 COM 對應數據表中的介面。

範例

// Retrieve the control's IOleObject interface. Note interface 
// is automatically released when pOleObject goes out of scope

CComPtr<IOleObject> pOleObject;
ControlQueryInterface(IID_IOleObject, (void**)&pOleObject);

CComControl::CreateControlWindow

根據預設,呼叫 CWindowImpl::Create來建立 控件的視窗。

virtual HWND CreateControlWindow(HWND hWndParent, RECT& rcPos);

參數

hWndParent
[in]父視窗或擁有者視窗的句柄。 必須提供有效的視窗句柄。 控制件視窗僅限於其父視窗的區域。

rcPos
[in]要建立之視窗的初始大小和位置。

備註

如果您想要執行建立單一視窗以外的其他動作,請覆寫此方法,例如建立兩個視窗,其中一個視窗會成為控件的工具列。

範例

RECT rc = {10,10,210,110};
HWND hwndParent, hwndControl;

// get HWND of control's parent window from IOleInPlaceSite interface
m_spInPlaceSite->GetWindow(&hwndParent);
hwndControl = CreateControlWindow(hwndParent, rc);

CComControl::FireOnChanged

通知容器的接收控件屬性已變更。

HRESULT FireOnChanged(DISPID dispID);

參數

dispID
[in]已變更之屬性的標識碼。

傳回值

其中一個標準 HRESULT 值。

備註

如果您的控件類別衍生自 IPropertyNotifySink,這個方法會呼叫 CFirePropNotifyEvent::FireOnChanged,以通知所有連線IPropertyNotifySink介面指定的控件屬性已變更。 如果您的控件類別不是衍生自 IPropertyNotifySink,這個方法會傳回S_OK。

即使您的控件不支援連接點,這個方法也是安全的。

範例

STDMETHODIMP CMyControl::put_MyText(BSTR newVal)
{
   // store newVal in CComBstr member
   m_bstrMyText = newVal;

   // note the DISPID for the MyText property is 3 in this example
   FireOnChanged(3);

   return S_OK;
}

CComControl::FireOnRequestEdit

通知容器的接收,控件屬性即將變更,而且物件要求接收如何繼續。

HRESULT FireOnRequestEdit(DISPID dispID);

參數

dispID
[in]即將變更之屬性的標識碼。

傳回值

其中一個標準 HRESULT 值。

備註

如果您的控件類別衍生自 IPropertyNotifySink,此方法會呼叫 CFirePropNotifyEvent::FireOnRequestEdit,以通知所有連接的IPropertyNotifySink介面,指定的控件屬性即將變更。 如果您的控件類別不是衍生自 IPropertyNotifySink,這個方法會傳回S_OK。

即使您的控件不支援連接點,這個方法也是安全的。

範例

STDMETHODIMP CMyControl::put_MyTitle(BSTR newVal)
{
   // the DISPID for MyTitle in this example is 4
   DISPID dispID = 4;

   // make sure we can change the property
   if (FireOnRequestEdit(dispID) == S_FALSE)
      return S_FALSE;

   // store newVal in CComBstr member
   m_bstrMyTitle = newVal;

   // signal that the property has been changed
   FireOnChanged(dispID);

   return S_OK;
}

CComControl::MessageBox

呼叫這個方法來建立、顯示及操作消息框。

int MessageBox(
    LPCTSTR lpszText,
    LPCTSTR lpszCaption = _T(""),
    UINT nType = MB_OK);

參數

lpszText
要顯示在消息框中的文字。

lpszCaption
對話框標題。 如果為 NULL(預設值),則會使用標題 「錯誤」。

nType
指定對話框的內容和行為。 如需可用的不同消息框清單,請參閱 Windows SDK 檔案中的 MessageBox 專案。 預設值提供簡單的 [確定] 按鈕。

傳回值

傳回整數值,指定 Windows SDK 檔中 MessageBox所列的其中一個功能表項值。

備註

MessageBox 在開發期間,以及在向使用者顯示錯誤或警告訊息的簡單方式時,都很有用。

另請參閱

CWindowImpl 類別
類別概觀
CComControlBase 類別
CComCompositeControl 類別