如何在 C++ Builder 3.0 下混用两大 Application Framework VCL & MFC ?
2001-04-05 15:46
615 查看
| ||||||
混用 VCL 与 MFC 的确是个不错的选择,但是、相对的,你的程序复杂度反而会提高。 在此先假设你已经看过『如何在 C++ Builder 3.0下编译含有MFC 的程序』这一篇文章了。因此一些基本知识就不在重复叙述了。 为了讨论这个题目,我决定采用范例实作的方式来做解说: Step 1. 先用你知道的方法来建立一个空的、且可以正确编译 MFC 的 Project (不懂的可以参考『如何在 C++ Builder 3.0下编译含有MFC的程序』这篇文章)。在此先假设此 Project 名称为 Project1,而 MainForm 为 Form1 ,MainForm 的档案为 unit1.cpp,皆以 BCB 3.0 产生的为默认值,因此这时候你应该会有下列这些档案了:
在这个范例中,我决定采用两个 MFC 的类别 (Class) 来与 C++ Builder 的 VCL 混用,而这两个类别分别是 CFileDialog 与 CPoint 。 OK,知道了这些后,我们先 Design 一些东西在 Form 上来使用 MFC 的类别吧! 先置放两个 Label 组件与一个 Button 组件 Step 3. 紧接着就是开始动手加入所们所要的 MFC code 啦,不过在此之前,先必须将 MFC 使用的宣告档给加进来: //--------------------------------------------------------------------------- #include <afxwin.h> #include <Afxdlgs.h> #include <vcl.h> 不过要注意的是, MFC 所用的 Header 档要先于 #include <vcl.h> 之前喔!否则,你一定会在编译时得到一大堆的 Error ! Step 4. 当 Header 档给设定好后,我们开始来作 VCL 与 MFC 的混用吧! 我们先来使用 CPoint 这个类别吧! 先为 Form 建立 OnMouseMove 的个事件,并加入以下这些 Code : void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { CPoint Ps; Ps.x =X; Ps.y =Y; Label1->Caption = "X :" + (AnsiString)Ps.x + " Y :" + (AnsiString)Ps.y; } OK,这样一来就可以编译啦!不过你在编译时,准会得到一大堆 Warning ,这是因为 MFC 中的一些 Marco 与 BCB 的同样名字,所以啰,会得到这些 Warning 使很正常的啦!不过幸好只是 warning 而不是 error ,不然就不能编译成功了。 编译成功后,你可以发现当你移动鼠标时, From 上的 Label1 会一直秀出你现在的鼠标光标,这样一来,使用 CPoint 这个类别就算成功了。 过你或许会想,何不直接用原先传进来的 X 与 Y 就可以了,何必动用到 CPoint 这个类别呢?嘿嘿,如果你不用这样,怎么表现 MFC 与 VCL 的混用呢? Step 5. 嗯,接着我们就再来实作 CFileDialog 类别在 BCB 下使用 先为 Form 上的 Button 建立 OnClick 这个 Event ,并加入以下这些 Code : void __fastcall TForm1::Button1Click(TObject *Sender) { CFileDialog dlg( TRUE,"CPP","*.CPP", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("C++ Source File (*.cpp)")); if( dlg.DoModal()==IDOK ) { Label2->Caption = (AnsiString)dlg.GetPathName(); } } 一样的,在编译时会得到许多 warning ,但是编译完成后,按下此 Button 你将会得到与使用 VCL 中的 TOpenDialog 类别相同的画面,当你选择好档案后 Form 上的 Label2 也会换成你所选择的文件名称了,这样一来 CFileDialog 与 VCL 的混用也一样成功了。
| ||||||
相关文章推荐
- [C++] 如何在 C++ Builder 3.0 下混用两大 Application Framework VCL & MFC?
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- [C++] 如何在 C++ Builder 3.0 下编译含有 MFC 的程序?
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- 如何在 C++ Builder 3.0 下编译含有 MFC 的程序 ?
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- MFC 操作Excel,在线程中调用 ExcelApp.CreateDispatch("Excel.Application",NULL)失败
- 【回答】:Microsoft .NET Framework 各个版本之间的关系?如何安装2.0,3.0,4.0?向下兼容?
- .NET Framework 3.0 版本命名與部署 Q&A
- .NET Framework 3.0 版本命名與部署 Q&A
- .NET Framework 3.0 版本命名與部署 Q&A
- 如何在64位的Win10系统下安装.NET Framework 3.0
- VS2010 MFC 组件 增加Framework 2.0 3.0
- Simple_Application_Framework_for_VCL
- 如何在Qt中处理(接收/发送)MFC或Windows消息(直接覆盖MainDialog::nativeEvent,或者QApplication::installNativeEventFilter安装过滤器,或者直接改写QApplication::nativeEventFilter)
- 阿里RocketMQ如何解决消息的顺序&重复两大硬伤?