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
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 類別