小弟不喜欢用MFC,感觉到用那个太麻烦,而且很乱!
所以喜欢建立Win32 Application工程,但是在对话框资源中加入第三方控件时,使用DialogBox函数无法显示对话框,小弟不知道MFC是怎么实现控件加载的,感到很好奇,恳请各位高手指教!
所以喜欢建立Win32 Application工程,但是在对话框资源中加入第三方控件时,使用DialogBox函数无法显示对话框,小弟不知道MFC是怎么实现控件加载的,感到很好奇,恳请各位高手指教!
解决方案 »
- 单文档可以拆分窗口么?
- 狗日的VC new和malloc,散分
- 调试的时候遇到shellExecuteEx,会启动一个新进程,该如何进入新进程内调试?
- 高分求一正则表达式。能过滤掉HTML页面中的所有字符,只返回中英文
- 如何使得用CMultiDocTemplate创建的DD只打开一个文件
- 如果在CEdit中实现Ctrl+V、Ctrl+C、Ctrl+X的功能
- 界面为什么都在资源文件里呢?(菜鸟问题)
- 如何自动保存菜单状态
- 一个小图片的位置在大图片的中间,都是static控件,如何让小图片更新的时候显示在前面?
- ===急。急。急===我的线程怎么不运行?????菜鸟问题
- \??\C:\Windows\System32\smss.exe到底是个什么路经?
- 在线求助字符串的问题
MFC还麻烦啊?用SDK更惨,不知道得写多少代码呢,而且控件里面导出来的内容怎么写呀?
还是用SDK最能掌握一个程序的核心
在我明白MFC的封装原理以前我不想用它,否则不明不白的,没意思
楼主的目标很远大哦~
要像彻底明白恐怕不是一天两天的事
不过MFC也没什么不好的,只是一个类库,把C++和API做了封装,为了让用户更好用而已
如果你真想什么都自己弄 不如去搞操作系统~~
CoInitialize
这里的控件,举个例子吧,比方说Windows Media Player控件,把它加到对话框中后,用DialogBox是无法显示这个对话框的,说明这个控件类没有被加载,小弟想求教加载的方法,即如果没有MFC,只有Windows,我们怎么办?
程序开始要调用InitCommonControlsEx
ActiveX控件要初始化COM环境
程序开始要调用 CoInitialize
程序结束要调用 CoUninitialize
#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 );
}
}
#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 );
}
}