控件

原创 2003年04月21日 09:02:00

控件

                                     何志丹
1,File=>New=>Project=>MFC ActiveX ControlWizard创建一个名为Owner的工程,所有的设置都默认,直接Finish就可以了。
4,Ctrl+F5运行。Executable For Debug Session,选取消就可以了。
5,Tool=>ActiveX Control Test Container中进行测试。
6,注册,将控件的ocx文件拷到Windows系统目录下,如:win95/system.开始菜单,运行Regsvr32 Owner.ocx.
   Regsvr32 [/u][/s][/c][/i[:cmdline]] dllname
  其中:
  /u 注销动态库
  /s 不显示提示信息
  /c 输出控制台
  /i  调用Dllinstall并传递cmdline,与/u一起使用时调用注销程序
  /n 不调用DllRegisterSever,必须与/i一起使用。
7,创建一个基于对话框的可执行程序OwnerExe,注意AppWizard-Step 2 of 6将ActiveX controls复选框选中。
  应用程序向导会为我们添加
BOOL COwnerExeApp::InitInstance()
{
 AfxEnableControlContainer();
       ......
8,Project=>Add To Project- Components.找到刚才注册的控件,插入到控制工具栏中。像使用标准控件一样将它弄到对话框上。
9,Ctrl+F5,我们就可以看到一个什么都不干的控件。
下面我们来做一个检查一个数是不是2的几次幂(如1,2,4,8)的控件,我们来补充第二步和第三步。
2,在COwnerCtrl增加一个布尔变量Is2n,初值为false;将OnDraw改成:
void COwnerCtrl::OnDraw(
   CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
 CBrush * pBrush;
 if(Is2n)
  pBrush = new CBrush(RGB(255,0,0));
     else
  pBrush = new CBrush(RGB(255,255,255));
 pdc->FillRect(rcBounds, pBrush);
 delete pBrush;
}
Ctrl+w打开类向导,Automation=>Add Method. name填IsPow2n,返回值void,一个长整形的参数x.注意有多个参数时,用向下光标键或PageDown移动。
修改此函数:void COwnerCtrl::IsPow2n(long x)
{
 Is2n = ((x&-x)==x);
 InvalidateControl();
}
Ctrl+F5生成新的ocx,覆盖原来的ocx.注意当Windows系统目录下的ocx被修改以后,我们的程序中的oxc会自动更新控件。并不是控件所有的函
数都可以被控件使用者调用,只有方法才可以。
回到OwnerExe,加一个编辑控件(与一个长整形变量m_input相关联)和一个按钮,让控件与m_ctrl相关联,此按钮的响应函数为:
void COwnerExeDlg::OnIs2n()
{
 UpdateData();
 m_ctrl.IsPow2n(m_input);
}
Ctrl+F5,查看效果,仔细一点就会发现当输入零时,结果是错的。显然0不可能是2的n次方。
3,我们为控件定义一个事件,事件很像自定义的消息,你必须决定它何时被调用,并用在调用时,必须设置好初值。
再回到我们的控件,ctrl+w=>ActiveX Events=>Add Events.名字Zero,参数为x,长整形。
将if(0 == x)FireZero(x);插到void COwnerCtrl::IsPow2n(long x)中,表示在IsPow2n执行过程过发现IsPow2n的参数为0,此方法被调用。且它的参数与IsPow2n相同。
void COwnerCtrl::IsPow2n(long x)
{
 Is2n = ((x&-x)==x);
 if(0 == x)
 {
  FireZero(x);
  Is2n = false;
 }
 InvalidateControl();
}

回到OwnerExe,Ctrl+w=>MessageMaps. ID填我们的控件,在Messages中双击我们刚刚加的Zero,编辑函数:
void COwnerExeDlg::OnZeroOwnerctrl1(long x)
{
 CString str;
 str.Format("请输入一个非%ld整数",x);
 AfxMessageBox(str);
}
Ctrl+F5。
3.5大家可能觉得颜色设置得太差,我们可以增加控件的属性。
回到我们的控件,Ctrl+w=>Automation=>Add Property;在External name中选择库存属性。
我们来自定义两个属性是2的n次方时的颜色和不是时的颜色,isColor,notColor;类型是OLE_COLOR;编辑代码。
void COwnerCtrl::OnIsColorChanged()
{
 InvalidateControl();
 SetModifiedFlag();
}

void COwnerCtrl::OnNotColorChanged()
{
 InvalidateControl();
 SetModifiedFlag();
}
void COwnerCtrl::OnDraw(
   CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
 CBrush * pBrush;
 if(Is2n)
  pBrush = new CBrush(m_isColor);
    else
  pBrush = new CBrush(m_notColor);
 pdc->FillRect(rcBounds, pBrush);
 delete pBrush;
}
void COwnerCtrl::DoPropExchange(CPropExchange* pPX)
{
 ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
 COleControl::DoPropExchange(pPX);
 PX_Color(pPX,"isColor",m_isColor,RGB(0,255,255));
 PX_Color(pPX,"notColor",m_notColor,RGB(0,255,0));
}
后两行不只是赋初值,同时还使得控件使用者可以用颜色对话框选择颜色。

JQuery 操作基本控件

根据控件的样式class获取控件 $(".className")...... //className代表的就是控件的样式 根据控件的ID获取控件 $("#id")...... ...
  • it_wangxiangpan
  • it_wangxiangpan
  • 2011年12月17日 18:07
  • 6781

【C#】透明控件的实现

  转载 http://wtunuiyf.blog.163.com/blog/static/18003200871951529580/   最近做的一个任务中需要用到透明控件,结果在网上找了好久,也没...
  • zhangzeshuai
  • zhangzeshuai
  • 2008年09月20日 02:17
  • 12203

Web控件和HTML控件的不同之处

在将ASP.Net的时候,讲到了Web 控件和HTMl控件,在VS2012中的工具一栏中也有明显的分类,Web控件和Html控件,两者的不同之处在哪里呢? 第一:相识,相知 Html控件:  ...
  • u010196821
  • u010196821
  • 2014年11月16日 14:04
  • 2148

Win32控件使用——通用函数

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8087862   在我的理解当中控件就是一个子窗口,所以对...
  • Drecik__
  • Drecik__
  • 2012年10月18日 23:26
  • 1653

android重要控件各种大全

Android中国开发精英 目前包括:     Android开源项目第一篇——个性化控件(View)篇        包括ListView、ActionBar、Menu、Vie...
  • mapeifan
  • mapeifan
  • 2016年01月04日 09:38
  • 6454

Winform控件多线程操作控件的解决方案

1)在要访问的控件的那个窗体,定义公共属于或公共方法,这样可以实现间接的访问2)在主窗体,定义方法来包装上面定义的另外一个窗体的方法,然后定义委托。3)如果当线程,直接委托实现就可以,如果多线程,用i...
  • yaoohfox
  • yaoohfox
  • 2009年03月24日 11:03
  • 4638

js实现控件拖拽

Rays Drag Test function DragObj() { var flag=0;//0:no,1:yes var x=0; var y=0; } var d...
  • sjiang2142
  • sjiang2142
  • 2011年08月09日 15:25
  • 3296

安全控件开发原理分析 支付宝安全控件开发 网银密码控件 C++

浏览器安全控件是如果支付宝一样结合web程序密码数据安全处理的程序,采用C++语言开发通常的安全控件分为两种,一种是指支持IE内核的浏览器,一种支持所有内核的浏览器,支付宝采用的是支持所有内核的浏览器...
  • a416090287
  • a416090287
  • 2016年08月03日 21:22
  • 1390

网页加载ActiveX控件

      首先很不幸的告诉大家ActiveX控件有许多缺点,第一它不被多有浏览器兼容,目前仅支持IE内核的浏览器,当然其他浏览器比如firefox,google,世界之窗等都在努力的兼容它,也分别开...
  • googlie
  • googlie
  • 2010年12月21日 13:12
  • 2921

HTML控件和Web控件的区别和联系

在ASP.NET中,使用了两类控件,一类是HTML控件(又分为HTML控件和HTML服务器控件),还有一类是WEB控件。 从以下几个方面来了解他们的区别和联系 一:概念     HTML控件:就...
  • yinjingjing198808
  • yinjingjing198808
  • 2012年07月29日 21:26
  • 4359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:控件
举报原因:
原因补充:

(最多只允许输入30个字)