(第一次提问,还不熟悉环境,先前在ActiveX小类发了一下,现在在界面来发一哈,请教各位高手,望版主海涵)我做了一个SDI的单文档多视图程序(项目名RealTime),视图基类(包括框架创建的视图)都是CFormView类。
class CMyView1 : public CFormView
{
......
}
在CMainFrame调用窗口基类的Create方法创建各个视图,如下:
CMyView1* m_pMyView1; 
m_pMyView1=new CMyView1;
m_pMyView1->Create(NULL,NULL,WS_CHILD|WS_BORDER,CFrameWnd::rectDefault,                         this,IDD_MYVIEW1,&mContext);
......
然后通过资源编辑器往各个视图对象的form上添加了一些ActiveX 控件。通过classwizard为各个ActiveX控件添加变量。然后在程序中为各个控件变量赋值。
程序编译能通过,但是在运行的过程中出现如下错误:
m_pMyView1->m_cCount1 {......  hWnd=0x00000000}
(m_cCount1为MyView1视图上的一个ActiveX控件对象)
hWnd=0x00000000 是不是说明这个ActiveX控件对象(m_cCount1)在视图的form的创建过程中(前面的m_pMyView1->Create(...);)没有被创建呢?
而我在CMyView1类中通过classwizard对WM_CREATE消息,重载OnCreate()函数,添加代码如下:
CMyView1::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
     if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
     m_cCount1.Create( NULL, NULL, WS_CHILD|WS_VISIBLE,CRect(200,200,400,400), this,
                       IDC_COUNT);     
     
     return 0;
}
后,程序编译运行正常了,对ActiveX控件对象的赋值也成功了。不过这是在视图的form上生成的一个新的ActiveX控件,而不是原先希望的用资源编辑器往form上添加的ActiveX控件。
还有就是在应用程序框架自己创建的视图CRealTimeView对应的form上通过资源编辑器添加同样的ActiveX控件就不会出现这样的问题。
请问这时什么原因呢?为什么在非框架创建的视图中,在创建form的时候用资源编辑器添加的ActiveX控件对象没有被创建呢(其hWnd=0x00000000)?  希望得到各位高手指点(保证给分)!

解决方案 »

  1.   

    如果可以的话,可以将程序发到:[email protected]
    我帮你看看!注明帖子的URL!
      

  2.   

    谢谢vcleaner 老大!
    这个问题是不是由视图基类是CFormView而引起的呢?CFormView没有发送消息去让其上的ActiveX 控件创建他自身。但是应用程序框架创建的视图也是CFormView作为基类,它怎么就可以自己发送消息呢?望各位老大再帮我会诊会诊!谢谢!
      

  3.   

    应该是控件还没被创建前就被你赋值了,当然出错哟
    控件的创建应该在视图的OnInitialUpdate()中,你的赋值之处如果先于视图的初始化,那就出错了三