最近再写一个表格控件,但突然发现再view里无法使用,除了CFormView,
因为我没写create函数,但看他提示的的时候有oncreate函数,不过参数不知道是什么LPCREATESTRUCT型的,当然也不知道怎么写了,请问高手该怎么办?

解决方案 »

  1.   

    activeX控件
    继承 窗口的 才有加上这个宏
    BEGIN_MSG_MAP(CXXX)
    END_MSG_MAP()和MFC的操作就一样了,选中类,点右键---> ....
      

  2.   

    BEGIN_MSG_MAP(CXXXX)
         MESSAGE_HANDLER(WM_CREATE,OnCreate)
    END_MSG_MAP()LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
       ....
       return S_OK;
    }
      

  3.   

    和楼主遇到了同样的问题,着急中...
    我采用了重载OnCreate函数的方法。有没有用,还没来得及试。
      

  4.   

    还不明白UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled这些参数的意思,我怎么才能在指定的一个区域创建一个控件呢?我的好象没继承窗口啊,就是用mfc向导一路点下去,
    刚学不久,请不要见笑啊!呵呵。
      

  5.   

    我试了一下,在控件里不要封装Create函数
    在调用的时候家一个Create
    Create("",WS_DISABLED,theApp.m_pWndMain,0);
      

  6.   

    但调用的时候的Create("",WS_DISABLED,theApp.m_pWndMain,0);
    是哪来的啊?theApp.m_pWndMain这又是什么?
    自动的也又一个create,但只有一个参数,好像是LPCREATESTRUCT类型的,
    不明白是什么?
      

  7.   

    去看一下深入解析ATL关于ATL窗口类的那一章,就回弄明白ATL是如何处理窗口消息的了。
    ACTIVEX控件的创建同窗口的创建不同,如果是在MFC中通过向导加近来的控件,它会为你包装一个类,那个类把控件的SITE窗口也封装在里面,看起来控件的创建和窗口似乎一样了。我的机器现在有问题,一会我在来。
      

  8.   

    无须关心什么Create在你的ACTIVEX控件中,也不需要额外的添加,如果你要在其他的VIEW中创建,可以使用向导为你生成的代码,或者自己去创建SITE窗口,如下(伪码):
    int CYourView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if(CView::OnCreate(lpCreateStruct) == -1)
             return -1;
        if(!m_yourCtrlSite.Create(....))
             return -1;          //m_yourCtrlSite 是CWnd类型变量在你的VIEW类中被定义。
        if(!m_yourCtrlSite.CreateControl(....))
             return -1; 
        .............
        return 0;
    }
      

  9.   

    那create里面的参数怎么办?谢谢。
    解决了可以另行开贴送分。
      

  10.   

    真是对不起,我给的伪码是有问题的,会出现内存泄露。下面是我刚才做的一个测试程序代码的片段:static CLSID const clsid
    = { 0xad962ea1, 0x4acc, 0x4345, { 0xb1, 0xe0, 0x46, 0x9d, 0x12, 0x44, 0xa9, 0x52 } };    //将被创建的控件的CLSID
    int CHostTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;
    if(!m_wndSite.CreateControl(clsid,"",WS_CHILD|WS_VISIBLE,CRect(10,10,500,300),this,0))
                       return -1;
    return 0;
    }