1. 程式人生 > >MFC 的ActiveX控制元件開發(屬性頁)

MFC 的ActiveX控制元件開發(屬性頁)

屬性頁

屬性頁使 ActiveX 控制元件使用者得以檢視和更改 ActiveX 控制元件屬性。可通過呼叫控制元件屬性對話方塊訪問這些屬性。該對話方塊包含一個或多個屬性頁,這些屬性頁提供自定義的圖形介面用於檢視和編輯控制元件屬性。

使用預設屬性頁

建立ActiveX控制元件專案後,系統就自動為我們添加了一個屬性頁類,這裡就是Cactivexdemo1PropPage。同時在對話方塊資源裡也會有一個屬性頁對話方塊資源,這裡就是IDD_PROPPAGE_ACTIVEXDEMO1。

在ActiveX控制元件測試容器中點選工具欄上的屬性按鈕,就會看到這個屬性頁對話方塊。

比如就像下圖這樣。當然這個上面什麼還沒有。

如果是在使用控制元件開發時,則在選中控制元件後,在屬性視窗中點選屬性頁按鈕可以開啟這個屬性頁,開發人員可以在這個彈出的屬性頁視窗中設定控制元件的屬性。

如果要通過屬性頁修改控制元件屬性,那麼就要通過在屬性頁上放置一些控制元件給使用者來修改屬性值。比如我們上面添加了一個Caption屬性,我們要在屬性頁上提供修改這個屬性的功能一般就是要用一個文字輸入框。這樣我們在屬性頁的對話方塊上放置一個Edit控制元件,設id為IDC_EDIT_CAPTION。然後為這個Edit控制元件繫結一個變數。用右鍵點這個Edit控制元件,學則新增變數,開啟

在新增成員變數嚮導中新增一個新變數,設為m_caption,這裡注意要把型別設為Value,由於屬性是個字串,所以這個地方變數型別也使用CString。

然後我們來看一下屬性頁類中的一個DoDataExchange函式。這個函式是由系統自動呼叫的,用來將控制元件與成員變數進行資料交換。由於我們剛把Edit控制元件綁定了m_caption變數,在DoDataExchange已經給我們寫入了這麼一句DDX_Text(pDX, IDC_EDIT_CAPTION, m_caption);,就是這一句實現了m_caption與Edit控制元件之間的資料交換。但此時控制元件Caption屬性還不能自動從Edit控制元件中填寫的值獲得,還需要一個操作,即DDP_Text(pDX, IDC_EDIT_CAPTION, m_caption, _T(”Caption”));,這樣就把Caption屬性與與屬性頁中的m_caption變數繫結,這樣每當我們在修改了屬性頁視窗中的Edit控制元件內容後,就能修改控制元件的Caption。

那麼完整的DoDataExchange函式就應該像下面這樣。

void Cactivexdemo1PropPage::DoDataExchange(CDataExchange* pDX)

{

DDX_Text(pDX, IDC_EDIT_CAPTION, m_caption);

DDP_Text(pDX, IDC_EDIT_CAPTION, m_caption, _T(”Caption”));

DDP_PostProcessing(pDX);

}

另外注意這個地方DDP_PostProcessing是系統自動生成的程式碼,這句話一定要放在DDX_Text和DDP_Text的後面,否則不能實現控制元件屬性與屬性頁上控制元件的繫結。至此,我們就可以在設計時通過這個屬性頁來修改Caption屬性,而不必通過程式程式碼來修改了。

新增其他自定義屬性頁

預設情況下只有一個屬性頁,如果需要設定的屬性太多就需要另外新增自定義屬性頁。

新新增屬性頁的方法是這樣的,開啟VS的資源檢視,新增一個新的Dialog資源。

在這裡我們選擇IDD_OLE_PROPPAGE_SMALL,當然也可以選和Large。給這個新資源ID指定為IDD_OLE_PROPPAGE_SMALL。

然後需要給這個資源新建一個關聯類。這個關聯類應當是MFC類,設類名為CPropPage1,基類應當是COlePropertyPage,對話方塊ID選擇我們新新增的這個對話方塊資源ID。

然後,開啟控制元件類Cactivexdemo1Ctrl的cpp檔案,找到屬性頁的巨集宣告部分。

BEGIN_PROPPAGEIDS(Cactivexdemo1Ctrl, 1)

PROPPAGEID(Cactivexdemo1PropPage::guid)

END_PROPPAGEIDS(Cactivexdemo1Ctrl)

把我們新建的這個屬性頁新增進去,並將屬性頁計數加一。

// TODO: 按需要新增更多屬性頁。請記住增加計數!

BEGIN_PROPPAGEIDS(Cactivexdemo1Ctrl, 2)

PROPPAGEID(Cactivexdemo1PropPage::guid)

PROPPAGEID(CPropPage1::guid)

END_PROPPAGEIDS(Cactivexdemo1Ctrl)

這樣就把新新增的這個屬性頁附加到控制元件中去了,再開啟控制元件的屬性頁就會看到多了一個屬性頁了。

常用屬性頁

除了可以根據需要自定義屬性頁外,系統還提供給開發人員一些預製的常用屬性頁,如顏色、字型等屬性頁。MFC 提供了三個與 ActiveX 控制元件一起使用的常用屬性頁:CLSID_CColorPropPage、CLSID_CFontPropPage  和 CLSID_CPicturePropPage。這些頁分別顯示常用顏色、字型和圖片屬性的使用者介面。

要將這些屬性頁合併到控制元件中,只需要請將它們的 ID 新增到初始化控制元件的屬性頁 ID 陣列的程式碼。也就是在類控制元件Cactivexdemo1Ctrl的cpp檔案中的PROPPAGEIDS宣告處修改成如下形式。與自定義屬性頁中相同,也需要增加屬性頁計數。

// TODO: 按需要新增更多屬性頁。請記住增加計數!

BEGIN_PROPPAGEIDS(Cactivexdemo1Ctrl, 3)

PROPPAGEID(Cactivexdemo1PropPage::guid)

PROPPAGEID(CPropPage1::guid)

PROPPAGEID( CLSID_CColorPropPage )

END_PROPPAGEIDS(Cactivexdemo1Ctrl)

這樣就在屬性頁裡添加了一個顏色屬性頁,但要想使用這個屬性頁還需要新增幾個常用屬性,比如說我們希望能通過這個屬性頁設定BackColor和ForeColor屬性,就參照常用屬性一節中的方法新增一個BackColor和一個ForeColor屬性,編譯生成控制元件後在ActiveX控制元件測試容器中點選工具欄中的屬性。

在彈出的屬性視窗中就能看到有關這兩個屬性的設定了。

若要使用顏色屬性,則需要呼叫COleControl::TranslateColor成員函式。此函式的引數為顏色屬性值和可選的調色盤控制代碼。返回值為 COLORREF 值,可以將它傳遞給 GDI 函式,如 SetTextColor 和 CreateSolidBrush。下例說明如何在繪製控制元件時使用這兩個顏色屬性。

CBrush bkBrush(TranslateColor(GetBackColor()));

COLORREF clrFore = TranslateColor(GetForeColor());

pdc->FillRect( rcBounds, &bkbrush );

pdc->SetTextColor( clrFore );

pdc->DrawText( InternalGetText(), -1, rcBounds, DT_SINGLELINE | DT_CENTER | DT_VCENTER );

相關推薦

MFCActiveX控制元件開發屬性

屬性頁 屬性頁使 ActiveX 控制元件使用者得以檢視和更改 ActiveX 控制元件屬性。可通過呼叫控制元件屬性對話方塊訪問這些屬性。該對話方塊包含一個或多個屬性頁,這些屬性頁提供自定義的圖形介面用於檢視和編輯控制元件屬性。 使用預設屬性頁 建立ActiveX控制元件專

基於ActiveX 控制元件開發動態Web

  Web頁面的開發主要分為三類:靜態Web頁面、半動態Web頁面以及Client端動態頁面。本文重點論述基於ActiveX Control(控制元件)動態實時頁面的開發。   ActiveX控制元件用於Web的過程是將控制元件嵌入主頁中,使用者通過瀏覽器訪問該主頁時,將主頁中的控制元件下載,並在使用者機器上

C#.net 地圖控制元件開發十一 地圖控制元件MapControl

地圖控制元件     地圖控制元件(MapControl)包含了地圖物件(Map),並在控制元件重繪時將繪圖的控制代碼傳遞給地圖物件,讓地圖物件可以繪製圖層集合。 地圖控制元件類         作用:主要用來繪製地圖。         類:提供地圖物件屬性,可以將使用者自

MFCActiveX控制元件開發(屬性)

屬性 屬性是 ActiveX 控制元件中向所有容器公開的資料成員。與事件和方法類似,也分為常用屬性和自定義屬性。 常用屬性 常用屬性已由 COleControl 類實現。COleControl 類包含支援控制元件的通用屬性的預定義成員函式。某些通用屬性包括控制元件的標題以及

MFC操作串列埠,詳細 複製程式碼ActiveX控制元件和Windows API函式

/******************************************************************* *******函式功能:開啟串列埠裝置連結 *******函式名稱:OpenComm *******輸入引數:無 *******輸出引數:無 ***

最全的基於MFCActiveX控制元件開發教程

一般的Web應用對於瀏覽器外掛能不使用的建議儘量不使用,因為其涉及到安全問題以及影響使用者安裝(或自動下載註冊安裝)體驗問題。在有特殊需求(如涉及資料安全的金融業務資料互動、需外掛才能實現的與本地裝置的互動等)的情況下可以酌情慎用。      瀏覽器

Android:控制元件佈局相對佈局RelativeLayout RelativeLayout是相對佈局控制元件:以控制元件之間相對位置或相對父容器位置進行排列。 相對佈局常用屬性: 子類控制元件相對子

RelativeLayout是相對佈局控制元件:以控制元件之間相對位置或相對父容器位置進行排列。 相對佈局常用屬性: 子類控制元件相對子類控制元件:值是另外一個控制元件的id android:layout_above----------位於給定DI控制元件之上 android:layout_below -

C#.net 地圖控制元件開發 地圖要素Feature

地圖要素     地圖要素(Feature)是構成地圖圖層的最小單元,它包括地物的幾何形狀,符號和描述資訊。描述資訊可以做成資料表的形式儲存在圖層類中,符號也可以儲存在圖層類中作為預設的要素符號,但是為了在圖層中突出表示某個特殊的地物,所以在地圖要素中也增加了符號屬性。

MFC ActiveX 控制元件在IE下閃爍的問題

         這周打算髮布公司新版本的OCX,忽然又收到客戶報的一個很老的bug,公司的OCX在IE下使用的時候,拉動滾動條會重疊,而且還有很嚴重的閃爍的現象。上半年的時候已經查過相關資料,沒有找到解決方法,而且老大也說這個是微軟的一個bug,我們無法解決。有些戲劇性的

關於ActiveX控制元件開發、js呼叫

控制元件製作: 32位控制元件製作 64位控制元件製作 參考:一、建立;二、介面;三、js呼叫 說明:64位控制元件的js呼叫我按上述教程製作,呼叫可以,但是控制元件中沒有文章中說的控制元件中顯示的

ActiveX控制元件開發流程

ActiveX控制元件是註冊到電腦上的一個註冊庫檔案,以ocx和dll結尾,可供第三方程式下載和在本地呼叫介面。下面和大家分享一下怎麼通過visual studio2010建立一個Activex工程以及怎麼在ActiveX中新增自己的方法。 工具/原料 電腦 visual

MFC ActiveX 控制元件:新增自定義事件

自定義事件與常用事件的區別在於,自定義事件不由 COleControl 類自動引發。自定義事件將控制元件開發人員確定的某一操作識別為事件。自定義事件的事件對映項由 EVENT_CUSTOM 巨集表示。下一節實現用“ActiveX 控制元件嚮導”建立的 ActiveX 控制元件專案的自定義事件。 使用“新增事

MFC .ocx控制元件開發

本文將介紹ocx的含義,以及如何利用MFC建立ocx控制元件。 1、ocx控制元件的含義 OCX 是物件類別擴充元件(Object Linking and Embedding (OLE) Control Extension);是可執行的檔案的一種,但不可

visual studio 2010 建立的MFC ActiveX 控制元件的工程 不能執行 提示:無法啟動.ocx程式

vs2010中的TSTCON( ActiveX Control Test Container )工具非自動安裝,而是作為一個例程提供。所以應找到該例程,並編譯: 如vs2010安裝在預設路徑則1, 進入:C:\Program Files\Microsoft Visual S

淺談Winform控制元件開發:使用GDI+美化基礎視窗

 寫在前面: 本系列隨筆將作為我對於winform控制元件開發的心得總結,方便對一些讀者在GDI+、winform等技術方面進行一個入門級的講解,拋磚引玉。 別問為什麼不用WPF,為什麼不用QT。問就是懶,不想學。 本專案所有程式碼均開源在https://github.com/muxiang/

JavaFX UI控制元件教程十五之Combo Box

翻譯自   Combo Box 本章介紹如何在JavaFX應用程式中使用組合框。它討論了可編輯和不可編輯的組合框,教您如何跟蹤可編輯組合框中的更改並處理它們上的事件,並解釋如何使用單元工廠來更改組合框的預設實現。 組合框是使用者介面的典型元素,使使用者可以選擇多個選項之一

JavaFX UI控制元件教程十九之Hyperlink

翻譯自   Hyperlink 本章介紹Hyperlink用於將文字格式化為超連結的控制元件。 所述Hyperlink類表示另一種型別的Labeled控制。圖18-1演示了預設超連結實現的三種狀態。 圖18-1超連結控制的三種狀態  

JavaFX UI控制元件教程十八之Progress Bar和Progress Indicator

翻譯自  Progress Bar and Progress Indicator 在本章中,您將瞭解進度指示器和進度條,以及視覺化JavaFX應用程式中任何操作進度的UI控制元件。 本ProgressIndicator類及其直接子類ProgressBar所提供的功能,以表

JavaFX UI控制元件教程十七之Slider

翻譯自   Slider 在本章中,您將學習如何在JavaFX應用程式中使用滑塊來顯示和與一系列數值進行互動。 該Slider控制元件由一個軌道和一個可拖動的拇指組成。它還可以包括刻度線和刻度標籤,用於指示範圍的數值。圖16-1顯示了一個典型的滑塊並指出了它的主要元素。

JavaFX UI控制元件教程十六之Separator

翻譯自  Separator 本章介紹如何使用分隔符組織JavaFX應用程式的UI元件。 SeparatorJavaFX API中可用的類表示水平或垂直分隔線。它用於劃分應用程式使用者介面的元素,不會產生任何操作。但是,您可以設定樣式,對其應用視覺效果,甚至為其設定動畫。