1. 程式人生 > >MFC在VS2010中為ActiveX控制元件新增屬性

MFC在VS2010中為ActiveX控制元件新增屬性

ActiveX控制元件有四種屬性:

(1)Stock:為每個控制元件提供的標準屬性,如字型或顏色。

(2)Ambient:圍繞控制元件的環境屬性——已被置入容器的屬性。這些屬性不能被更改,但控制元件可以使用它們調整自己的屬性。

(3)Extended:這些是由容器處理的屬性,一般包括大小和在螢幕上的位置。

(4)Custom:由控制元件開發者新增的屬性。

在VS2008下,新增這些屬性的方法如下所述:

(1)新增Stock屬性。

首先在類檢視下的lib選單中找到名為_DClockActiveX的項,其中ClockActiveX換成你的工程名即可:

在_DClockActiveX上右擊,找新增->新增屬性,彈出如下對話方塊:

在此對話方塊中的屬性名下的下拉列表中,選擇你所需要的標準屬性:

注意:

1)新增完標準屬性後,若想執行時在容器的屬性面板中,對此控制元件的這些屬性的修改有所反應,還必須通過寫程式碼實現。如在OnDraw()中新增如下程式碼來修改背景色和前景色兩個屬性:

  1. //添加了標準屬性後,還需要寫程式碼來實現屬性的設定
  2. CBrush brush(TranslateColor(GetBackColor()));   //修改背景色時做出的相應動作
  3. pdc->FillRect(rcBounds, &brush);  
  4. pdc->SetBkMode(TRANSPARENT); //設定文字背景為透明
  5. pdc->SetTextColor(TranslateColor(GetForeColor())); //修改前景色時做出的相應動作

2)若容器沒有屬性面板,那麼也可通過新增屬性頁來實現。如下所示為新增一個系統的顏色屬性頁:

  1. // TODO: 按需要新增更多屬性頁。請記住增加計數!
  2. BEGIN_PROPPAGEIDS(CClockActiveXCtrl, 2)  
  3.     PROPPAGEID(CClockActiveXPropPage::guid)  
  4.     PROPPAGEID(CLSID_CColorPropPage) //新增系統的顏色屬性頁
  5. END_PROPPAGEIDS(CClockActiveXCtrl)  

執行時,右擊控制元件,有屬性這一選項,點選進去就可在顏色屬性頁中修改此控制元件的前景色和背景色:

(2)新增Custom屬性。

在_DClockActiveX上右擊,找新增->新增屬性,在彈出的對話方塊中,屬性名的列表中輸入自定義的屬性名,然後選擇相應的屬性型別:

如此新增即可,在VS2008自帶的容器中可以測試。在容器中新增此控制元件後,選擇Control->Invoke Methods,彈出如下對話方塊:

在Invoke Methods中的Method Name下拉列表中選擇interval(PropPut),然後在Parameter Value編輯框中輸入2000,之後依次點選Set Value按鈕和Invoke按鈕,就可發現時鐘是以2秒的間隔在改變。

注意:

若想在屬性頁中提供一個編輯框給使用者自己編輯來改變控制元件的使用者屬性,那麼,可通過如下的一種方式。

假如就上面所說的interval屬性,在屬性頁上設計一個編輯框,可以讓使用者輸入時鐘顯示間隔:

在編輯框上右擊,選擇新增變數,為此編輯框關聯一個數值變數,名為m_updateInterval,型別為SHORT。並將此數值變數與上面使用者屬性interval相關聯,具體做法為:在PropPage.cpp檔案中的DoDataExchange()函式裡新增如下程式碼:

  1. void CClockActiveXPropPage::DoDataExchange(CDataExchange* pDX)  
  2. {  
  3.     DDP_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval, _T("interval")); //為新增的程式碼
  4.     DDX_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval);  
  5.     DDP_PostProcessing(pDX);  
  6. }  

一定要將DDP_Text();和DDX_Text();放置在DDP_PostProcessing();之前才起作用。

執行後,在上述圖的對話方塊的編輯框中輸入間隔,確定後可看到時鐘顯示間隔相應發生變化。