MFC ActiveX 控制項: 使用 ActiveX 控制項中的圖片
本文將告訴您常用的圖片類型,以及如何在您的 ActiveX 控制項裡實作。 主題包括:
自訂圖片屬性的概觀
ActiveX 控制項中實作自訂圖片屬性
加入項目控制項專案
自訂圖片屬性的概觀
圖片類型是通用於某些 ActiveX 控制項的型別群組。 圖片類型處理的中繼檔、 點陣圖或圖示,並可讓使用者能夠指定要在 ActiveX 控制項中顯示圖片。 使用圖片物件,並允許控制項使用者存取 「 圖片 」 屬性的 Get/Set 函式實作自訂圖片屬性。 使用內建的 [圖片屬性頁的自訂圖片屬性來控制使用者存取。
除了標準的圖片類型,也會提供字型和色彩的類型。 如需有關如何使用 ActiveX 控制項中的標準字型類型的詳細資訊,請參閱下面的文件 MFC ActiveX 控制項: 使用字型。
ActiveX 控制項類別提供許多您可用來實作在控制項中的 「 圖片 」 屬性的元件。 這些元件包括:
CPictureHolder 類別。
這個類別提供簡易存取圖片物件和功能自訂圖片屬性所顯示的項目。
屬性的型別支援 LPPICTUREDISP的 Get/Set 函式的實作。
使用類別檢視] 中您可以快速地新增自訂屬性時,支援圖片類型。 如需有關如何新增使用類別檢視 ActiveX 控制項屬性的詳細資訊,請參閱文章 MFC ActiveX 控制項: 屬性。
操作控制項的 Picture 屬性的屬性頁。
此屬性頁是一群 ActiveX 的控制項,您可以使用內建屬性頁的一部份。 如需有關 ActiveX 控制項屬性頁的詳細資訊,請參閱文章 MFC ActiveX 控制項: 使用內建屬性頁
ActiveX 控制項中實作自訂圖片屬性
當您完成這一節所述的步驟時,控制項可以顯示由使用者所選擇的圖片。 使用者可以變更顯示的圖片使用的屬性頁,則顯示目前的圖片,並具備瀏覽] 按鈕,可讓使用者選取不同的圖片。
自訂圖片屬性是使用類似於用來實作其他的屬性,最主要的差異在於,自訂屬性必須支援圖片類型的處理程序來實作。 必須由 ActiveX 控制項繪製圖片 」 屬性的項目,因為許多新增和修改必須設定成屬性其完整實作之前。
若要實作自訂的 「 圖片 」 屬性,您必須執行下列作業:
將程式碼加入至控制項專案。
標準的圖片屬性頁 ID,資料型別的成員CPictureHolder,和型別的自訂屬性 LPPICTUREDISP 必須使用 Get/Set 加入實作。
修改您的控制項類別中的幾個函式。
這些修改將會對負責將畫出 ActiveX 控制項的幾個函式。
加入項目控制項專案
若要加入屬性頁 ID 的標準圖片屬性頁,請插入下的面這一行之後BEGIN_PROPPAGEIDS巨集儲存在控制項實作檔 (。CPP):
PROPPAGEID(CLSID_CPicturePropPage)
您也必須遞增的計數參數您BEGIN_PROPPAGEIDS巨集的原因。 下面這一行可說明這點:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
若要新增CPictureHolder資料成員至控制項類別,插入下行程式碼的控制項類別宣告受保護的區段下,在控制項標頭檔 (。H):
CPictureHolder m_pic;
並不需要您的資料成員命名為m_pic。 任何名稱就夠了。
接下來,加入自訂屬性支援圖片類型:
若要加入自訂圖片屬性使用加入屬性精靈
載入控制項專案。
在 [類別檢視中,展開您的控制項程式庫節點。
您的控制項 (程式庫節點的第二個節點) 的 [介面] 節點上按一下滑鼠右鍵來開啟快顯功能表。
從快速鍵功能表中選擇 [ 新增 ,然後 加入屬性。
在屬性名稱方塊中,鍵入摘要資訊名稱。 比方說方面, ControlPicture用在這個程序。
在屬性型別 ] 方塊中選取 IPictureDisp 1 屬性型別。
對於實作類型,按一下 [ Get/Set 方法。
輸入您 Get 及 Set 函式的唯一名稱或接受預設名稱。 (在本例中,預設名稱GetControlPicture和SetControlPicture習慣。)
按一下 [完成]。
加入屬性精靈會將下列程式碼之間在控制項標頭檔中的分派對應的註解 (。H) 檔:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
此外,下列程式碼也會插入於控制項實作的分派對應 (。Cpp):
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
加入屬性精靈也會在控制項實作檔新增下列這兩個 stub 函式:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
注意事項 |
---|
您的控制項類別和函式名稱可能與上述範例不同。 |
修改控制項專案
您已經新增所需的項目控制項專案之後,您需要修改會影響您的 ActiveX 控制項的呈現方式的幾個函式。 這些函式, OnResetState, OnDraw,而且 Get/Set 函式的自訂的 「 圖片 」 屬性,則會位於控制項實作檔。 (請注意在這個範例中的控制項類別會呼叫CSampleCtrl、 CPictureHolder資料成員會呼叫m_pic,且自訂圖片屬性名稱為ControlPicture。)
在控制項中OnResetState函式,來呼叫後新增下行選擇性COleControl::OnResetState:
m_pic.CreateEmpty();
這樣可將控制項圖片設成空白圖片。
如果要正確地繪製圖片,請撥電話到 CPictureHolder::Render 在控制項中OnDraw函式。 將函式修改成類似下列的範例:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
在控制項的自訂圖片屬性的 Get 函式,加入下面這一行:
return m_pic.GetPictureDispatch();
在控制項的自訂圖片屬性的 Set 函式,加入下列幾行:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
「 圖片 」 屬性必須設定成永續性,以便在執行階段將會出現在設計階段加入的資訊。 新增下行到COleControl-衍生類別的DoPropExchange函式:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
注意事項 |
---|
您的類別和函式名稱可能與上述範例不同。 |
完成所做的修改之後,重新建置專案,以加入新的自訂圖片屬性的功能,並使用測試容器來測試新的屬性。 如需存取測試容器的詳細資訊,請參閱用測試容器測試屬性和事件。