【发布时间】:2021-05-02 14:58:01
【问题描述】:
我正在为 MFC 应用程序开发 ActiveX 控件。
在这个应用程序中,我有一个控制类:
class MyControl : public COleControl
还有一个 CWnd 类:
class MyCWnd : public CWnd
以及活动 x 和 idl 文件的其他类...
在 MyControl 类中,我想将窗口 MyCWnd 作为 MFC 设备(窗口运行的线程)打开。
为此,我在 MyControl 中有一个属性 theWnd 定义为:
MyCWnd theWnd
在使用 MyControl 的方法中,我想通过调用来创建窗口:
theWnd.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), NULL, AFX_IDW_PANE_FIRST, NULL);
但是这一行返回 false。
我应该如何在 COleControl 类中初始化然后创建(启动)一个 CWnd? 如果不可能,我可以从 COleControl 以外的其他类继承 ActiveX 控件吗?
【问题讨论】:
-
不确定是否允许将
NULL用作CWnd::Create()调用的第一个参数。 Documentation. -
@AdrianMole,我认为这不是问题,因为在另一个项目中,我看到 create 的第一个参数为
NULL,它工作正常。在另一个项目中,CWnd::Create()是从 CWnd 类调用的,因此第 5 个参数定义为this。我猜这里的问题是MyControl不是窗口。 -
首先,为什么要使用 ActiveX?是的,在一个线程中,这对于第五个参数是不够的。你还没有窗户。