首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VC/MFC
ATL/ActiveX/COM
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
ATL或MFC实现ActiveX某个属性怎么设置为资源中资源ID并加载?
[已结贴,结贴人:abesky]
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-17 12:10:49
楼主
像标准的控件一样,在资源编辑器,自己编写的ActiveX需要加载资源中已经导入的图标,图片等资源,通过设置ActiveX的属性指定这些资源的ID然后怎么加载?
比如说编写的ActiveX有一项属性为Image,属性设置时怎么能自动列出当前的所有图片资源ID(resource.h 中定义),供选择。
设置好后AcitveX怎样从容纳它的窗口所在模块通过资源ID来加载设置的资源(这个是关键问题)?
问题点数:
100
回复次数:
10
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-17 12:17:02
1
楼 得分:
0
顺便问一下怎么动态的禁用某项属性?即在vs2005中编辑控件属性时,某项属性设置为只读状态?不要告诉我说用SetNotSupported();
这个好像无效;
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
laorer
堕落佛
等级:
发表于:
2008-05-17 12:40:13
2
楼 得分:
0
加载我不清楚,但是可不可以在html中设置其属性呢
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
发表于:
2008-05-17 13:16:34
3
楼 得分:
95
属性和方法都是静态的(idl描述的),不能动态禁用,但是在某些状态下可以忽略属性的调用,或者返回一个错误值。
读取ax自身的资源的方法在所有DLL中都是通用的,都是通过FindResource/LockResource/SizeOfResource等标准套路完成,关键是要得到自身模块句柄用于FindResource,在ATL3.0中是通过_Module.GetResourceHandle()获取,在ATL高版本是通过_AtlBaseModule.GetResourceHandle()获取,在MFC中通过AfxGetResourceHandle()获取,如果直接用API编程,需要在DllMain的参数中保存HINSTANCE句柄
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-17 21:01:31
4
楼 得分:
0
引用 3 楼 jameshooo 的回复:
属性和方法都是静态的(idl描述的),不能动态禁用,但是在某些状态下可以忽略属性的调用,或者返回一个错误值。
读取ax自身的资源的方法在所有DLL中都是通用的,都是通过FindResource/LockResource/SizeOfResource等标准套路完成,关键是要得到自身模块句柄用于FindResource,在ATL3.0中是通过_Module.GetResourceHandle()获取,在ATL高版本是通过_AtlBaseModule.GetResourceHandle()获取,在MFC中通过AfxGetResourceHandle…
你说的我都知道,但是_Module.GetResourceHandle()和_AtlBaseModule.GetResourceHandle()以及AfxGetResourceHandle…在ActiveX中取得的
都是ActiveX自己本身的资源句柄,而不是加载它所在模块的资源句柄!!!!所以不能并不能解决我说的问题.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-17 21:03:37
5
楼 得分:
0
我问的是AcitveX怎样从容纳它的窗口的所在模块通过资源ID来加载设置的资源!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
发表于:
2008-05-17 21:23:26
6
楼 得分:
0
呵呵,还真没看明白你的原意。从控件的IOleObject开始这样获取容器窗口所在的模块句柄
IOleObject::GetClientSite --> IOleClientSite
IOleClientSite::QueryInterface --> IOleInPlaceSite
IOleInPlaceSite::GetWindow --> HWND
GetWindowModuleFileName --> moduleFile
GetModuleHandle(moduleFile) --> HMODULE
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jiangsheng
蒋晟
等级:
发表于:
2008-05-17 21:24:13
7
楼 得分:
5
你可以让容器来设置资源DLL句柄啊
容器中所在的模块未必有你所需要的资源的,你所需要的资源可能在卫星DLL里面
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-18 18:59:13
8
楼 得分:
0
加载需要的句柄按jameshooo 说的找到了,那么怎么翻译资源的ID?
比如容器中定义的一个bmp的图片资源IDB_BMP1怎么翻译为resource.h 中对应的数值映射?即把IDB_BMP1转换为resource.h定义的对应数值?
还有编辑属性时怎么设置让其只能选择容器中某种资源,就像那个picture control 在属性中type设置为bitmap后image属性就只能选择资源中已经加载的图片资源id号了,这个怎么在activex控件中实现?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
发表于:
2008-05-18 20:21:23
9
楼 得分:
0
只要包含了容器工程中的resource.h就能直接使用IDB_BMP1,比如FindResource(hMod, MAKEINTRESOURCE(IDB_BMP1), RT_BITMAP),或者LoadImage。如果没有这个头文件就直接使用宏对应的数值,比如MAKEINTRESOURCE(234)。资源ID都是2字节的整数,用宏和数字是等效的。
如果某个属性的取值影响其它属性的选择,可以自己在属性窗口中控制,不能什么都指望组件来完成
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abesky
神武皇
等级:
发表于:
2008-05-20 21:10:11
10
楼 得分:
0
容器工程中的resource.h在控件中肯定事没有办法包含的,而且为了使控件更趋近与普通的控件,才想让控件的属性设置容器资源时采取resource.h中定义的值
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友