關于ActiveX控件的ClassName如何自定義

joinkee 2007-02-09 10:23:05
在VS.NET中開發基于MFC的ACTIVEX控件需要解決以下問題
控件創建后包括了2個窗口
一個窗口的CLASSNAME是AfxOleControl70x﹐其中的x根據編譯版本不同而存在(Debug/Release)
第二個窗口以第一個窗口作為父窗口﹐classname空﹐此窗口就是ACTIVEX實際的繪圖區域

問題﹕
如何將第1個窗口的classname自定義

嘗試過程﹕
在CTestCtrl對象繼承了PreCreatWindow﹐卻發現改事件實際是在創建第2個窗口才觸發

不知道以上描述是否把問題陳述清楚
希望各位高手幫忙解決

...全文
302 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
joinkee 2007-02-14
  • 打赏
  • 举报
回复
首先感謝 Shepherds的回答
不過﹐按照你的方式只是修改控件在開發是的類名﹐而不是控件的運行時通過Wnd->ClassName()函數所能取到的名字

問這個問題主要目的是﹐我有2個不同功能的控件﹐其他開發人員可能把2個控件放到同一窗口中應用﹐我就需要在2個控件中檢測是否存在另一類的控件(就好象MS的工具欄控件和imagelist控件之間的關系)
那檢測方法我現在是在控件里獲得Parent.classname()﹐但只要用mfc70開發出來的控件一律都是AfxOlecontrol70d﹐其中最后的D是如果控件在編譯時選擇DEBUG才有﹐如果是release版本就沒有
我關心的就是如何修改這個名字

joinkee 2007-02-09
  • 打赏
  • 举报
回复
和編譯版本無關系
我的意思是如何 能將ClassName ==> AfxOleControl70x 改為我需要的名字例如toolbar_ctrl_32這樣的名字
由于該名字是在COleControl中創建的﹐而我開發的activex也是從ColeControl繼承的﹐但我卻找不到應該在那里修改該CLASSNAME

明白問題在那里嗎﹖
wildmen 2007-02-09
  • 打赏
  • 举报
回复
1。 那个类是MFC提供的吧? 如果你想在不同的版本调用不同的类,用条件编译。
2。 没看明白。
shepherds 2007-02-09
  • 打赏
  • 举报
回复
AfxOleControl70x这个名称在你创建工程的时候,你输入了工程名称时就由MFC框架自动确定了,不过你还可以在此时修改,工程创建以后依然可以再修改。
修改方法:
1)创建时修改:你在VS中创建一个新工程时,首先要输入 工程名,如“myProject”,点击确定后,会弹出 “MFC ActiveX Class Wizard - myProject”窗口,点击左边的第3项,即 “Control Names”, 这时右则相关的名称都是可以修改的,其中就有你要的那项,即“Control Class Name”,修改成你想要的名称即可。
2)创建完成后修改:在“类视图”模式下,右键点击查看你要的类的属性,第一项就类的名字,把它改了就行了,MFC框架会自动把这个类的.h和.cpp中由系统自动生成的名称改过来,其它手动添加的代码中的名称和在其它文件中用到此类相关的名称需要你手动改过来。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧