没有合适的资源?快使用搜索试试~ 我知道了~
wxWidgets和MFC混合编程

温馨提示


试读
2页
wxWidgets和MFC混合编程 讲述在一个程序中wxWidgets和MFC的窗口如何一起工作。
资源推荐
资源详情
资源评论
















wxWidgets 和 MFC 混合编程
很多文章都讲到了将 MFC 程序迁移到 wxWidgets 上(首先要读的也许是 IBM
developerWorks 上这篇 将
MFC
应用程序移植到
Linux ),但对于一个比较大的程序,
要一下子完成移植也显得有些艰巨。所以我在琢磨有没有可能在一个程序中同时使用
这两种技术(同时我看中了 wxWidgets 上使用 wxPython 时给应用程序带来的可扩
展性,有兴趣的可以查看 wxPython 中的这个 embed 示例)。
wxWidgets 的代码库中倒是有一个
wx
和
MFC
混合的例子 (发布出来的 2.6 的代码包
里面好像没有,2.8 才有),它演示了如何在一个程序中分别有 wx 和 MFC 的窗口(分
属于 wxFrame 和 CFrameWnd 类)。
但它没有解答的问题是:怎样将一个 wx 的控件放到 MFC 上面去,或者反过来。
在这个例子中,如果你想将 wx 的窗口作为应用程序开始时显示的窗口,就需要这个:
m_pMainWnd = new CDummyWindow((HWND) wxTheApp-
>GetTopWindow()->GetHWND());
如果你了解 MFC 对窗口的封装,就知道它基本没有自己的东西,CWnd 这些类基本上
没有自己的数据成员,基本上都是调用 Windows API(只是把那些 API 中的 HWND
参数给省略了。所以任何一个 Windows 桌面上的窗口,要体现为一个 CWnd 类对象
是很容易的,只需要调用 CWnd::FromHwnd()或者 CWnd::Attach()就可以了,示
例中的 CDummyWindow 就是这样做的。基于这样的思路,我们很容 易把其它的
wx 控件通过 CDummyWindow 放到 MFC 控件中去。
wxTreeCtrl * wxtree = new wxTreeCtrl(.....)
CDummyWindow *dummy = new CDummyWindow((HWND)wxtree-
>GetHWND());
dummy->SetParent(this);
我们需要其实不要 CDummyWindow 也没有问题,只要这样:
wxTreeCtrl * wxtree = new wxTreeCtrl(....)
::SetParent(HWND)wxtree->GetHWND(), m_hWnd);
但这里有另外一个问题: 创建一个 wxWindow 对象时是必须给出一个 parent 的,而
这个 parent 又必须是 wxWindow 类型(除非为 NULL)。
反过来要将 MFC 的东西放到 wx 上面就可以那么好运了,虽然也可以用上面这一招将
MFC 的控件显示出来, 但这些控件低于 wx 来说是透明的,你没法利用到
wxSplitterWindow 的分割功能,没法利用上各种 layout manager/sizer。
在 wxWidgets For MFC Programmers(from wxWidgets Wiki)中讲述了如何将一
个 CWnd 转换为 wxWindow 对象:
wxWindow * win = new wxWindow();
win->SetHWND((WXHWND)hWnd);
win->AdoptAttributesFromHWND();
win->Reparent(wxGetApp().GetTopWindow());
资源评论

- kachina2013-11-14只有一页.doc,看不懂
- zyc_gz2013-05-15只有1页的doc,内容是网上抄袭的,排版都没做
- yaodingxia20102012-11-27很不错,可以学习

acus009
- 粉丝: 6
- 资源: 28
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
