使用ATL编写支持MFC的COM,想要创建一个窗体该如何写
刚接触COM不久,很多东西都不能知道原理。我使用ATL编写了一个支持MFC的COM组件,在其中需要创建一个窗体,用作消息响应。但是这个窗体我不希望它显示出来,
我的疑问是:
1.窗体原来是工程的主窗体,但是我现在使用它主要是为了用作消息响应。我该怎么作才对,有没有特殊的写法。
2.这个接口该怎么来编写,才能正确的创建窗体。如果我要隐藏它该怎么办,将窗体visibled设置为false是不行的。
--------------------编程问答-------------------- 1 Create a COM object instead of an ActiveX
2 see above --------------------编程问答-------------------- jiangsheng(蒋晟.Net[MVP]) 非常感谢!
窗体的问题我已经解决了,我使用了CAxDialogImpl窗体来实现,就一切都顺利了。
可是现在遇到的一个新的问题:
原来的工程中有一个继承自CPropertySheet的属性页文件,还有几个继承自ProfileSheetPage的页面,这几个页面动态加载在CPropertySheet中。现在我想要在ATL中执行某个接口函数时,打开这个属性页,编译都正常,执行时遇到了一些问题,开始时会报afxwin1.inl第26行错误,我看了那个文件中是说ASSERT(afxCurrentResourceHandle != NULL错误,然后我在初始化时设置了
fxCurrentInstanceHandle = ATL::_pModule->get_m_hInst();
afxCurrentResourceHandle = ATL::_pModule->get_m_hInst();
这此afxCurrentInstanceHandle有值了,可是又会弹出appcore.cpp 872行错误,内容是说
ASSERT(afxCurrentInstanceHandle == m_hInstance);
然后我又在这个函数之前增加了AFX_MANAGE_STATE(AfxGetAppModuleState( ));因为对于ATL支持MFC程序AFX_MANAGE_STATE(AfxGetStaticModuleState());是没有效果的。可是这样一来,程序又出现ASSERT(afxCurrentInstanceHandle != NULL。我想应该是我赋值有问题,可是不知道该怎么做才对,请各位高手能指点一下。谢谢!
--------------------编程问答-------------------- 补充,弹出appcore.cpp 872行错误的时候,界面是能出来的,也是经过初始化的,所以我不知道是不是因为我的资源没有及时切换回来的原因,可是调用AFX_MANAGE_STATE(AfxGetStaticModuleState());还需要自己切换资源吗? --------------------编程问答-------------------- 为什么我执行AFX_MANAGE_STATE(AfxGetStaticModuleState());后,afxCurrentInstanceHandle和afxCurrentInstanceHandle 都为NULL了? --------------------编程问答-------------------- 消息循环离不开窗体,有种很简单的方式:创建好Atl Com框架后,添加一个Atl dialog即可。 --------------------编程问答-------------------- 请问LZ窗口是怎么创建的
补充:.NET技术 , 组件/控件开发