• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ATL写的控件如何创建自定义类型的属性?

ATL写的控件如何创建自定义类型的属性?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl控件,atl34砂轮,atl方形动力电池,atl80.dll官方下载,atl71.dll一键修复等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ATL写的控件如何创建自定义类型的属性?
描述:

我用VC++.Net 写的ATL控件想要创建一个属性。这个属性的类型我想使用我自己定义的一个类,为什么编译总不能通过。
我想知道,用ATL写的控件的属性是否只能使用向导提供的那些类型?
但是我看别的控件,比如MapX控件,他的属性就是他自己定义的类型。
或者还有其他的控件,比如有个Picture 属性。可以如下使用
MyCtl.Picture = LoadPicture("C:\temp\a.bmp") 。
而这个 Picture 属性就是MyCtl 中自己定义的类型,专门保存位图。
这个问题一直没解决。谢谢各位。


解决方案1:

当然可以,不过这个class必须是实现IDispatch
作为参数的数据应该是这个class的接口,而不是class本身.
同时要在指定的该类和接口的定义位置. 
比如在idl中我有定义
[
  uuid(39A50DE5-86E3-40D2-BCBB-8F192A788756),
  version(1.0)
]
coclass Person {
    [default] interface _Person;
};
就可以在方法中有如下定义
[id(0x60030000)]
HRESULT GetPerson([out, retval] _Person** );

解决方案2:

传递类也可以实现
方法
1.直接使用COM对象作为传送的类,只不过使用接口方式传送(就是我前面说的一种方式,也是标准的)
2.使用序列化或其的方法把对象变为字节流,以BYTES方式传送

解决方案3:

一般是在接口定义文件里修改,如把enum写到typelib定义文件中去
// HoverButton.odl : type library source for ActiveX Control project.
// This file will be processed by the Make Type Library (mktyplib) tool to
// produce the type library (HoverButton.tlb) that will become a resource in
// HoverButton.ocx.
#include <olectl.h>
#include <idispids.h>
[ uuid(A6B9C705-C1B5-11D2-AB5E-0000E82A9730), version(1.0),
  helpfile("HoverButton.hlp"),
  helpstring("HoverButton ActiveX Control module"),
  control ]
library HOVERBUTTONLib
{
importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
//  Primary dispatch interface for CHoverButtonCtrl
typedef
[ uuid(CD470FA1-CB0F-11d2-AB5E-0000E82A9730),
  helpstring("Dispatch interface for HoverButton Control Style") ]
enum tagBtnStyle
{
[helpstring("Simple")] BS_NONE = 0,
[helpstring("Flat Button")] BS_FLAT = 1,
[helpstring("Spot Light")] BS_SPOT = 2,
}BTNSTYLE;
[ uuid(A6B9C706-C1B5-11D2-AB5E-0000E82A9730),
  helpstring("Dispatch interface for HoverButton Control"), hidden ]
dispinterface _DHoverButton
{
properties:
// NOTE - ClassWizard will maintain property information here.
//    Use extreme caution when editing this section.
//{{AFX_ODL_PROP(CHoverButtonCtrl)
[id(DISPID_CAPTION), bindable, requestedit] BSTR Caption;
[id(DISPID_FONT), bindable] IFontDisp* Font;
[id(DISPID_BACKCOLOR), bindable, requestedit] OLE_COLOR BackColor;
[id(DISPID_FORECOLOR), bindable, requestedit] OLE_COLOR ForeColor;
[id(3)] IPictureDisp* Picture;
[id(1)] OLE_COLOR SpotBackColor;
[id(2)] OLE_COLOR SpotForeColor;
[id(4)] BTNSTYLE Style;  ////////////////////////////////////
//}}AFX_ODL_PROP
methods:
// NOTE - ClassWizard will maintain method information here.
//    Use extreme caution when editing this section.
//{{AFX_ODL_METHOD(CHoverButtonCtrl)
//}}AFX_ODL_METHOD
[id(DISPID_ABOUTBOX)] void AboutBox();
};
//  Event dispatch interface for CHoverButtonCtrl
[ uuid(A6B9C707-C1B5-11D2-AB5E-0000E82A9730),
  helpstring("Event interface for HoverButton Control") ]
dispinterface _DHoverButtonEvents
{
properties:
//  Event interface has no properties
methods:
// NOTE - ClassWizard will maintain event information here.
//    Use extreme caution when editing this section.
//{{AFX_ODL_EVENT(CHoverButtonCtrl)
[id(DISPID_CLICK)] void Click();
[id(DISPID_DBLCLICK)] void DblClick();
//}}AFX_ODL_EVENT
};
//  Class information for CHoverButtonCtrl
[ uuid(A6B9C708-C1B5-11D2-AB5E-0000E82A9730),
  helpstring("HoverButton Control"), control ]
coclass HoverButton
{
[default] dispinterface _DHoverButton;
[default, source] dispinterface _DHoverButtonEvents;
};
//{{AFX_APPEND_ODL}}
//}}AFX_APPEND_ODL}}
};


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于cabarc打包atl控件的问题,郁闷中~~~
  • ATL控件2问
  • 关于ATL做复合控件的问题
  • 大家一般都怎么打包Atl开发的ActiveX控件?
  • 使用ATL编写控件的接收器时,怎样在事件处理方法中得到事件源接口?
  • 请教,ATL写的ActiveX控件在IE中加载时接口的调用顺序
  • 在一个atl的复合控件项目中,如果调用其它ocx控件的方法??
  • 如何使用ATL编写的COM控件来播放AVI文件,需要在IE上使用的
  • 如何得到用ATL作的控件的窗口句柄,试了几个都无效,怎么回事?
  • 想用ATL做个控件,但这是怎么回事?

相关文章

  • 2017-06-05 求助--关于windows串口编程
  • 2017-06-04 初学者还问:关于ATL的补充接口
  • 2017-06-05 如何不用定时器实现多个EDIT数据的刷新。
  • 2017-06-05 AfxEndThread和return0的区别
  • 2017-06-04 有网络报表控件的源码出售
  • 2017-06-05 添加厂家提供的activeX控件后,运行时出现assert错误
  • 2017-06-05 如何读取客户端目录下文件?
  • 2017-06-04 哪位大哥帮我解决一下啊,不能输入,VC6,MFC的,
  • 2017-06-05 为什么没人回答我的问题:“关于释放进程内组件的问题”
  • 2017-06-04 easyUI+SQLite可以做个简单查询功能的内网网站吗

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ActiveX创建对象并调用对象方法
    • 关于线程同步的2个简单问题
    • msn插件的问题
    • CWebBrowser和CShockwaveflash能播放flv文件吗?
    • 如何用MIDL对earthidl文件生成头文件和库文件
    • 我在一个程序中,不断的开线程,内存一直升上去,降不下来(线程已经结束)为什么?
    • 软件技术中的底层技术都包括哪些
    • ShockwaveFlash控件右键菜单的疑问!!!
    • 问个在控件中使用控件的问题
    • 关于线程????

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有