小弟不喜欢用MFC,感觉到用那个太麻烦,而且很乱!
所以喜欢建立Win32 Application工程,但是在对话框资源中加入第三方控件时,使用DialogBox函数无法显示对话框,小弟不知道MFC是怎么实现控件加载的,感到很好奇,恳请各位高手指教!

解决方案 »

  1.   


    MFC还麻烦啊?用SDK更惨,不知道得写多少代码呢,而且控件里面导出来的内容怎么写呀?
      

  2.   

    呵呵,个人认为使用MFC心里很不明白,有很多东西都不敢动
    还是用SDK最能掌握一个程序的核心
    在我明白MFC的封装原理以前我不想用它,否则不明不白的,没意思
      

  3.   

    ::在我明白MFC的封装原理
    楼主的目标很远大哦~
    要像彻底明白恐怕不是一天两天的事
    不过MFC也没什么不好的,只是一个类库,把C++和API做了封装,为了让用户更好用而已
    如果你真想什么都自己弄 不如去搞操作系统~~
      

  4.   

    不知道你所谓第三方控件指的是什么,如果是ActiveX控件的话,要初始化一下:
    CoInitialize
      

  5.   

    呵呵,也许是个人有个人的癖好吧,我觉得要熟练的使用MFC也得首先弄明白它是怎么操作的。如果一切都不用我操心那我还不如去学VB
    这里的控件,举个例子吧,比方说Windows Media Player控件,把它加到对话框中后,用DialogBox是无法显示这个对话框的,说明这个控件类没有被加载,小弟想求教加载的方法,即如果没有MFC,只有Windows,我们怎么办?
      

  6.   

    列表框、树型控件等
    程序开始要调用InitCommonControlsEx
    ActiveX控件要初始化COM环境
    程序开始要调用 CoInitialize
    程序结束要调用 CoUninitialize
      

  7.   

    mfc就是为了不麻烦才使用的吧
      

  8.   

    以下是创建IE 浏览器控件1 .h文件
    #include <atlcom.h>
    #include <atlhost.h>
    #include <atlwin.h>
    #include <atlctl.h>CAxWindow m_wndBrowser;
    CComPtr<IWebBrowser2> m_pBrowserApp;
    2:cpp文件
    /**
    * 创建窗体包容web控件
    */
    RECT rc={0,0,100,100};
    HWND hWnd=m_wndBrowser.Create ( hParent, rc, _T(""), WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN ); /**
    * 创建Web控件,并查询IWebBrowser2接口指针赋予m_pBrowserApp
    */
    if( hWnd )
    {  
    LPOLESTR lpProgId = NULL;
    HRESULT hResult = ProgIDFromCLSID( CLSID_WebBrowser,&lpProgId );
    if( hResult == S_OK )
    {
    CComPtr<IUnknown> punkCtrl;
    m_wndBrowser.CreateControlEx ( lpProgId, NULL,NULL, &punkCtrl );
    if( punkCtrl )
    {
    m_pBrowserApp = punkCtrl;
    }
    CoTaskMemFree( lpProgId );
    }
    }
      

  9.   

    再改一下:1 .h文件
    #include <atlbase.h>
    #include <atlcom.h>
    #include <atlhost.h>
    #include <atlwin.h>
    #include <atlctl.h>CAxWindow m_wndBrowser;
    CComPtr<IWebBrowser2> m_pBrowserApp;
    2:cpp文件
    CoInitialize( NULL );
    /**
    * 创建窗体包容web控件
    */
    RECT rc={0,0,100,100};
    HWND hWnd=m_wndBrowser.Create ( hParent, rc, _T(""), WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN ); /**
    * 创建Web控件,并查询IWebBrowser2接口指针赋予m_pBrowserApp
    */
    if( hWnd )
    {  
    LPOLESTR lpProgId = NULL;
    HRESULT hResult = ProgIDFromCLSID( CLSID_WebBrowser,&lpProgId );
    if( hResult == S_OK )
    {
    CComPtr<IUnknown> punkCtrl;
    m_wndBrowser.CreateControlEx ( lpProgId, NULL,NULL, &punkCtrl );
    if( punkCtrl )
    {
    m_pBrowserApp = punkCtrl;
    }
    CoTaskMemFree( lpProgId );
    }
    }
      

  10.   

    谢谢各位,现在我觉得这好像涉及到很多COM以及很多程序载入的东西,我觉得如果明白了它以后比单纯用MFC拖控件要有用的多!