如果是在MFC 下它会自动创建一个从CWnd继承的包装类,动态生成很方便,但在在ATL中没有生成这样的类.我一开如用的如果方法:
CComPtr<Ixxx> m_pSomething;
m_pSonething.CoCreateInstance(CLSID_xxx);
用这种方法创建实例成功但是一调用接口函数就出异常,但是没有界面的组件就不会出错.
在ATL中有有类似MFC的功能吗? 如果没有怎样动态创建这类控件呢?
8 个解决方案
#1
将ActiveX控件加到你的对话框里!
创建一个类来处理对话框
class ATL_NO_VTABLE CXXXDlg :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CXXXDlg, &CLSID_XXXDlg>,
public IDispatchImpl<IXXXDlg, &IID_IXXXDlg, &LIBID_YYYYLib>,
public CAxDialogImpl<CXXXDlg>
创建一个类来处理对话框
class ATL_NO_VTABLE CXXXDlg :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CXXXDlg, &CLSID_XXXDlg>,
public IDispatchImpl<IXXXDlg, &IID_IXXXDlg, &LIBID_YYYYLib>,
public CAxDialogImpl<CXXXDlg>
#2
用这个方法也不能算动态创建,但我用这个方法试了一下用到是可以用,但是还是有问题,显示不太正常,有时能显示,有时又不能显示.但是创建后它还是属于它的窗口,我能不能把这个控件移到客户提供的窗体中,变成这个新窗口的控件.我试了几个方法都不行,如SetWindowPos;
SetParent.不知有没有别的办法.
SetParent.不知有没有别的办法.
#3
http://www.fruitfruit.com/vc/atl/createcontrol.cpp
#4
to masterz(www.fruitfruit.com) :
怎样用MFC来实现呢?
怎样用MFC来实现呢?
#5
学习关注
#6
学习
#7
用MFC就简单了, 选 Project -> Add to project -> Components and controls
进入 Registered ActiveX Controls 再选择用到的组件, 单击 Insert, 确定生成的类
然后在程序中就可以像普通的窗口一样的使用了.
进入 Registered ActiveX Controls 再选择用到的组件, 单击 Insert, 确定生成的类
然后在程序中就可以像普通的窗口一样的使用了.
#8
找到一个函数 AtlAxCreateControlEx 可以动态创建ActiveX, 但不知如何得到他的HWND, 显示还是不正常,有时不能显示出来.
#1
将ActiveX控件加到你的对话框里!
创建一个类来处理对话框
class ATL_NO_VTABLE CXXXDlg :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CXXXDlg, &CLSID_XXXDlg>,
public IDispatchImpl<IXXXDlg, &IID_IXXXDlg, &LIBID_YYYYLib>,
public CAxDialogImpl<CXXXDlg>
创建一个类来处理对话框
class ATL_NO_VTABLE CXXXDlg :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CXXXDlg, &CLSID_XXXDlg>,
public IDispatchImpl<IXXXDlg, &IID_IXXXDlg, &LIBID_YYYYLib>,
public CAxDialogImpl<CXXXDlg>
#2
用这个方法也不能算动态创建,但我用这个方法试了一下用到是可以用,但是还是有问题,显示不太正常,有时能显示,有时又不能显示.但是创建后它还是属于它的窗口,我能不能把这个控件移到客户提供的窗体中,变成这个新窗口的控件.我试了几个方法都不行,如SetWindowPos;
SetParent.不知有没有别的办法.
SetParent.不知有没有别的办法.
#3
http://www.fruitfruit.com/vc/atl/createcontrol.cpp
#4
to masterz(www.fruitfruit.com) :
怎样用MFC来实现呢?
怎样用MFC来实现呢?
#5
学习关注
#6
学习
#7
用MFC就简单了, 选 Project -> Add to project -> Components and controls
进入 Registered ActiveX Controls 再选择用到的组件, 单击 Insert, 确定生成的类
然后在程序中就可以像普通的窗口一样的使用了.
进入 Registered ActiveX Controls 再选择用到的组件, 单击 Insert, 确定生成的类
然后在程序中就可以像普通的窗口一样的使用了.
#8
找到一个函数 AtlAxCreateControlEx 可以动态创建ActiveX, 但不知如何得到他的HWND, 显示还是不正常,有时不能显示出来.