王朝网络
分享
 
 
 

控件

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

控件

何志丹

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));

}

后两行不只是赋初值,同时还使得控件使用者可以用颜色对话框选择颜色。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有