MFC ActiveX 控制項:在 ActiveX 控制項中使用圖片
本文說明一般圖片類型以及如何實作它在您的 ActiveX 控制項。 主題包括:
自訂圖片屬性概觀
實作您的 ActiveX 控制項的自訂圖片屬性
對控制項專案的時機
自訂圖片屬性概觀
圖片型別是一個型別的一組通用的某些 ActiveX 控制項。 圖片型別處理中繼檔、點陣圖或圖示並允許使用者指定在 ActiveX 控制項中顯示的圖片。 自訂圖片屬性實作使用圖片物件並取得/允許對圖片屬性的控制項使用者存取的 Set 函式。 使用內建圖片屬性頁,控制使用者存取自訂圖片屬性。
除了標準圖片型別之外,字型和色彩型別也是可用的。 如需使用標準字型的詳細資訊輸入您的 ActiveX 控制項,查看這篇文章 MFC ActiveX 控制項:使用字型。
ActiveX 控制項類別提供可用來實作控制項內的圖片屬性的多個元件。 這些包含下列元件:
CPictureHolder 類別。
這個類別可讓您輕易存取圖片物件和功能為自訂圖片屬性顯示的項目。
支援型別 LPPICTUREDISP屬性,實作與 Get 和 Set 函式。
使用類別檢視您可以快速地將自訂屬性或屬性,支援圖片類型。 如需將使用類別檢視的 ActiveX 控制項屬性的詳細資訊,請參閱本文件的 MFC ActiveX 控制項:屬性。
管理控制項的圖片屬性的屬性頁。
這個屬性頁是內建屬性頁面群組的一部分可用的 ActiveX 控制項。 如需 ActiveX 控制項屬性頁的詳細資訊,請參閱本文 MFC ActiveX 控制項:使用內建屬性頁
實作您的 ActiveX 控制項的自訂圖片屬性
當您完成本節概述的步驟時,控制項可以顯示其使用者選取的圖片。 使用者可以變更顯示的圖片使用顯示目前圖片的屬性頁並不允許使用者對選取不同的圖片的瀏覽按鈕。
自訂圖片屬性實作使用程序類似於實作其他屬性使用的時,是的主要差異自訂屬性必須支援圖片類型。 因為必須將 ActiveX 控制項繪製圖片屬性的項目,必須進行一些新增和修改到屬性,並可以完整實作之前。
若要實作自訂圖片屬性,您必須執行下列動作:
將程式碼加入至版本控制 。
必須將標準圖片屬性頁 ID、型別 CPictureHolder資料成員和型別 LPPICTUREDISP 自訂屬性的取得/設定實作。
修改控制項類別的數個函式。
這些變更會將對您的 ActiveX 控制項繪製負責的數個函式。
對控制項專案的時機
若要加入標準圖片屬性頁上的屬性頁 ID,插入下列程式碼行,在控制項實作檔案後 (.CPP) 的 BEGIN_PROPPAGEIDS 巨集:
PROPPAGEID(CLSID_CPicturePropPage)
您必須也將 BEGIN_PROPPAGEIDS 巨集計數參數。 以下行數將說明這點:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
要加入 CPictureHolder 資料成員加入至控制項,將下行程式碼插入控制項類別宣告的受保護區段底下的標頭檔(.H):。
CPictureHolder m_pic;
命名您的資料成員 m_pic名稱是不必要的;所有名稱而言。
接下來,加入支援圖片型別的自訂屬性:
使用加入屬性精靈,將自訂圖片屬性
載入控制項的專案。
在類別檢視中,展開您的控制項程式庫節點。
以滑鼠右鍵按一下控制項的 (程式庫節點的第二個節點介面節點) 開啟捷徑功能表。
從捷徑功能表中,按一下 [加入],再按一下 [加入屬性]。
在 [屬性名稱] 方塊中,輸入屬性名稱。 供示範之用, ControlPicture 會使用這個程序。
在 屬性型別 方塊中,為屬性型別選取 IPictureDisp* 。
對於 Implementation Type,按一下 Get/Set Methods。
輸入唯一名稱您的 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();
這會設定控制項的圖片至空白圖片。
若要適當地繪製圖片,請呼叫以控制 OnDraw 函式的 CPictureHolder::Render 。 修改您的函式類似下列範例:
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);
注意事項 |
---|
您的類別和函式名稱可能與上述範例相同。 |
在您完成修改後,請重新建置您的專案將自訂圖片屬性的新功能和使用測試容器測試新的屬性。 如需存取測試容器的詳細資訊,請參閱用測試容器測試屬性和事件。