您的位置:首页 > 其它

MFC在VS2008中为ActiveX控件添加属性 .

2013-11-04 14:12 344 查看
ActiveX控件有四种属性:

(1)Stock:为每个控件提供的标准属性,如字体或颜色。

(2)Ambient:围绕控件的环境属性——已被置入容器的属性。这些属性不能被更改,但控件可以使用它们调整自己的属性。

(3)Extended:这些是由容器处理的属性,一般包括大小和在屏幕上的位置。

(4)Custom:由控件开发者添加的属性。

 

在VS2008下,添加这些属性的方法如下所述:

(1)添加Stock属性。

首先在类视图下的lib菜单中找到名为_DClockActiveX的项,其中ClockActiveX换成你的工程名即可:



在_DClockActiveX上右击,找添加->添加属性,弹出如下对话框:



在此对话框中的属性名下的下拉列表中,选择你所需要的标准属性:



注意:

1)添加完标准属性后,若想运行时在容器的属性面板中,对此控件的这些属性的修改有所反应,还必须通过写代码实现。如在OnDraw()中添加如下代码来修改背景色和前景色两个属性:

[cpp]
view plaincopyprint?

        //添加了标准属性后,还需要写代码来实现属性的设置   
CBrush brush(TranslateColor(GetBackColor()));   //修改背景色时做出的相应动作
  
pdc->FillRect(rcBounds, &brush);  
pdc->SetBkMode(TRANSPARENT); //设置文本背景为透明   
pdc->SetTextColor(TranslateColor(GetForeColor())); //修改前景色时做出的相应动作  

//添加了标准属性后,还需要写代码来实现属性的设置
CBrush brush(TranslateColor(GetBackColor()));   //修改背景色时做出的相应动作
pdc->FillRect(rcBounds, &brush);
pdc->SetBkMode(TRANSPARENT); //设置文本背景为透明
pdc->SetTextColor(TranslateColor(GetForeColor())); //修改前景色时做出的相应动作

2)若容器没有属性面板,那么也可通过添加属性页来实现。如下所示为添加一个系统的颜色属性页:

[cpp]
view plaincopyprint?

// TODO: 按需要添加更多属性页。请记住增加计数!   
BEGIN_PROPPAGEIDS(CClockActiveXCtrl, 2)  
    PROPPAGEID(CClockActiveXPropPage::guid)  
    PROPPAGEID(CLSID_CColorPropPage) //添加系统的颜色属性页
  
END_PROPPAGEIDS(CClockActiveXCtrl)  

// TODO: 按需要添加更多属性页。请记住增加计数!
BEGIN_PROPPAGEIDS(CClockActiveXCtrl, 2)
PROPPAGEID(CClockActiveXPropPage::guid)
PROPPAGEID(CLSID_CColorPropPage) //添加系统的颜色属性页
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()函数里添加如下代码:

[cpp]
view plaincopyprint?

void CClockActiveXPropPage::DoDataExchange(CDataExchange* pDX)  
{  
    DDP_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval, _T("interval")); //为添加的代码
  
    DDX_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval);  
  
    DDP_PostProcessing(pDX);  
}  

void CClockActiveXPropPage::DoDataExchange(CDataExchange* pDX)
{
DDP_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval, _T("interval")); //为添加的代码
DDX_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval);

DDP_PostProcessing(pDX);
}

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



运行后,在上述图的对话框的编辑框中输入间隔,确定后可看到时钟显示间隔相应发生变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: