vc学习笔记之active控件

新建MFC ActiveX控件 工程,命名为clock00,,在类视图/clock00Lib下的_Dclock00接口中添加hello()方法和backcolor、forecolor标准属性和interval自定义属性,在Cclock00Ctrl类中添加事件(事件的方法由容器实现)。


在clock00Ctrl.cpp中写添加属性页代码:PROPPAGEID(CLSID_CColorPropPage)///添加颜色属性页,可通过颜色属性页设置颜色相关属性,如backcolor、forecolor


标准属性与对应属性页的数据移动由工具完成。在与自动生成的常规属性页对应的Dialog资源IDD_PROPPAGE_CLOCK00中添加一个编辑框并添加变量minterval,在clock00PropPage.cpp中的

DoDataExchange函数中添加关联minterval到控件的interval属性的DDP_Text函数:

void Cclock00PropPage::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDIT1, minterval);  ///实现minterval与IDC_Edit1控件之间的数据交换
DDP_Text(pDX, IDC_EDIT1, minterval,_T("interval"));///绑定属性页IDC_Edit1控件成员变量minterval
///到ocx控件属性“interval”,这样就可以通过在属性页填入IDC_Edit1的值改变“interval”属性值
    DDP_PostProcessing(pDX);///在DDP_Text后
}


为了保存设置的属性值,在clock00Ctrl.cpp中的void Cclock00Ctrl::DoPropExchange(CPropExchange* pPX)函数中添加:

// TODO: 为每个持久的自定义属性调用 PX_ 函数。
PX_Short(pPX,_T("interval"),m_interval,1000);
///BOOL PX_Short(CPropExchange* pPX, LPCTSTR pszPropName, short& sValue, short sDefault);


在clock00Ctrl.cpp中的OnDraw()函数中添加设置控件前景背景并显示时间的代码:

CBrush brush(TranslateColor(GetBackColor())); 
pdc->FillRect(rcBounds,&brush);
pdc->SetBkMode(TRANSPARENT);
pdc->SetTextColor(TranslateColor(GetForeColor()));

CTime time = CTime::GetCurrentTime();
CString strtime = time.Format("%H:%M:%S");
pdc->TextOut(0,0,strtime);


为Cclock00Ctrl类添加WM_CREATE消息和WM_TIMER消息,在OnCreate()中添加:

SetTimer(1,m_interval,NULL);
/*也可以用全局的::SetTimer(),
UINT_PTR SetTimer
(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);*/


在OnTimer()中添加:

if(AmbientUserMode())///若控件处于设计模式AmbientUserMode()返回0值,处于运行模式返回非零值
Invalidate();///使窗口无效,触发OnDraw()重绘窗口,InvalidateContrl()也可以


在void Cclock00Ctrl::OnintervalChanged(void)中添加:

KillTimer(1);
SetTimer(1,m_interval,NULL);
BoundPropertyChanged(0x2);///通知容器,(属性面板)绑定的自定义属性值已经改变,以同步属性值



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值