加载中…
正文 字体大小:

AxtiveX控件

(2010-12-27 10:10:27)
标签:

杂谈

分类: AxtiveX

什么是容器和服务器程序?

容器应用程序是可以嵌入或链接对象的应用程序。Word就是容器应用程序。
服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。Excel就是服务器应用程序。


AxtiveX
后缀可以是OCX或者DLL等
四种属性:
Stock:为每个控件提供的标准属性,如字体或颜色。
Ambient:围绕控件的环境属性——已被置入容器的属性。这些属性不能被更改,但控件可以使用它们调整自己的属性。
Extended:这些是由容器处理的属性,一般包括大小和在屏幕上的位置。
Custom:由控件开发者添加的属性。


第一步:新建工程为:MFC ActiveX ControlWizard
第二步:
  How many controls would you like your project to have?
意思是,再控件做成后,其他程序加载此控件后产生的应用图标按钮个数

Would you like the controls in this project to have a runtinme license?
是否生成一个控件的运行时许可,用以给该控件进行限制应用
第三步:直接保持默认


如何删除已经注册的ACTIVEX控件信息?
1.打开运行-》输入regsvr32 /u ->之后将您刚才注册的控件拖动到运行框体里面(注意内容与/u保持一个空格距离)
这样就删除成功了
同样的将/U 去掉,则是向系统注册此控件
2.在vc6.0 编译器的TOOLS菜单项下,Register Control


怎么样在制作的控件背面特性框加一个颜色属性页需要?
BEGIN_PROPPAGEIDS(CClockCtrl, 2)--》注意,原来是1,现在多加了一项,改为2
 PROPPAGEID(CClockPropPage::guid)
 PROPPAGEID(CLSID_CColorPropPage)--》加上此句
END_PROPPAGEIDS(CClockCtrl)
(CLSID_CColorPropPage)颜色全球唯一标识符


如何初始化你 的控件属性对应的变量默认值?
BOOL PX_Short( CPropExchange* pPX, LPCTSTR pszPropName, short& sValue );

BOOL PX_Short( CPropExchange* pPX, LPCTSTR pszPropName, short& sValue, short sDefault);


void CClockCtrl::DoPropExchange(CPropExchange* pPX)
{
 ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
 COleControl::DoPropExchange(pPX);
 PX_Short(pPX,"Interval",m_interval,1000);---》此句仅限制于short类型的属性
}

如何设置定时器?
int CClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (COleControl::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 // TODO: Add your specialized creation code here
 SetTimer(1,m_interval,NULL);
 
 return 0;
}

void CMainFrame::OnStartTimer()
{
   m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer()
{
   KillTimer(m_nTimer);   --》停止计时器
}

如何判断程序已经进入运行时再进行事件的触发?
COleControl::AmbientUserMode
BOOL AmbientUserMode( ); ---》如果返回为0,则是在设计模式

COleControl::InvalidateControl---》强制控件自身重绘

void InvalidateControl(
LPCRECT lpRect = NULL, ---》如果为NULL,则使整个窗口重绘
BOOL bErase = TRUE );

void CClockCtrl::OnTimer(UINT nIDEvent)
{
 
 if(AmbientUserMode())
  InvalidateControl();
 COleControl::OnTimer(nIDEvent);
}


如何将生成的控件后,其他程序可以保存属性里的值?
void BoundPropertyChanged( DISPID dispid );

void CClockCtrl::OnIntervalChanged() ---》这是一个属性设置后的方法
{
 // TODO: Add notification handler code
 if(m_interval<0 || m_interval>6000)
 {
  m_interval=1000;
 }
 else
 {
  m_interval=m_interval/1000*1000;
  KillTimer(1);
  SetTimer(1,m_interval,NULL);
  BoundPropertyChanged(0x1);--》此函数用于保存设置的改变
 }
 SetModifiedFlag();
}


如何设置控件背景颜色、前景颜色?

OLE_COLOR GetForeColor( );
COleControl::GetBackColor

COLORREF TranslateColor( ---》将OLE_COLOR 转换为COLORREF
OLE_COLOR clrColor,
HPALETTE hpal = NULL );


void CClockCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
 CBrush brush(TranslateColor(GetBackColor()));
 pdc->FillRect(rcBounds, &brush);
 pdc->SetBkMode(TRANSPARENT);---》设置背景颜色不会改变在自绘前
 pdc->SetTextColor(TranslateColor(GetForeColor()));--》设置前景文字颜色

 CTime time=CTime::GetCurrentTime();
 if(0==time.GetSecond())
 {
  FireNewMinute();
 }
 CString str=time.Format("%H:%M:%S");
 pdc->TextOut(0,0,str);
}
colecontrol
activecontrol

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangbaojun52024029/archive/2010/01/15/5194420.aspx

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
前一篇:182面试
后一篇:CUDA
  • 评论加载中,请稍候...
发评论

       

    验证码: 请点击后输入验证码 收听验证码

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇182面试
    后一篇 >CUDA
      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有