handle to parent or owner window HMENU hMenu, // menu handle or child identifier HINSTANCE hInstance, // handle to application instance LPVOID lpParam // window-creation data );
使用这个API函数,我们可以创建各种窗口。 CWnd封装的函数:
virtual BOOL CWnd::Create ( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT&; rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL );
不用我说,你也能看出这仍然是个改改参数的蹩脚的封装。我们不去管它,现在我们关心的是:CWnd::Create 对CreateWindow 进行了封装,可是这一封装的结果是:原来CreateWindow能实现的一些事情,在 CWnd::Create里突然成了例外。是的,为了适应CWnd在MFC架构中所处的角色,程序员在涉及CWnd时必须记忆这样一条例外:
“CWnd的Create用于创建窗口的实际元素,但其中参数dwStyle不能包含有窗口风格中WS_POPUP(弹出式窗口),如果你要建立一个带有该风格的窗口,请使用CreateEx??”
5
我仍然要说VC也是一个很优秀的编程工具,但对于不想浪费无谓精力的编程初学者,我个人建议使用Borland C++Builder,因为它实现真正的对象封装,从而使你可以节省不低于80%的时间来
学习编程本质的知识——就是我们常说的数据结构与算法,这些东西最终决定你的编程能力。
下面是C++Builder提供我们的最重要的东西:
一、VCL类库:一个好的底层类库,让我们从学习编程最初时刻就自然而然地学会使用面向对象的方法来写程序。它大大降低了我们入门门槛的高度,却又让我们一开始就站在比别人高的位置看待与程序有关的问题;
二、组件技术:组件技术代表了当今编程技术的主要方向,其设计思想与MS力推的Active 控件如出一辙:拥有相同的先进性。只有借助组件技术,我们才有可能从一个初学者,迅速成为可实际
工作的编程工作者;另一方面,如果作为组件的提供者,我们可以编写组件的过程中迅速提高自已的编程能力。
C++Builder还提供了许多其它先进技术,如事件委拖等等,归根到底都是通过封装让Windows编程原本需要长期积累才有可能掌握的知识变得直观易懂。如果你刚刚开始学习编程,或者学习较长时间仍没有重大突破,或许使用C++Builder结合本课程系列,是个不错的选择。
附言:微软最近推出的C#相信会对上述MFC的不足做一个收拾,它对C++的扩展与约束与Borland C++Builder对C++的扩展与约束惊人的相似。如果你乐意,我也真的很建议你在学完C++Builde后,继续学习C#。
熟悉Borland C++Builder
一、界面:
启动Borland C++Builder后,你会发现它的窗口和我们常见的一体化窗口的应用程序有所不同:CB的各个子窗口并没有集成在一个主应用窗口中,而是分散为独立的主窗口。
6
(笔者的桌面分辨率为1024*728,但为了不让图的尺寸太大,我特意将各窗口拉得很小)
如果你打开CB后出现在界面和上图有所不同,可以通过File菜单,再选New Application,建一新的工程,则上图标注的2到4的窗口应该出现。如果仍然有缺,请用鼠标点上图的标注为“1”所示窗口的标题栏(以确保为活动状态),然后多按几次F11或F12,可以在以上窗口来回切换(两者功能有不同,可以自己试一下)。 下面我们来了解这四个窗口:
标注为1的窗口:这是我们比较熟悉的应用程序主窗口,虽然它看上去是一个长条,不过其上有主菜单(MainMenu),工具栏(Toolbar),和别的软件一样。不一样的是这一“长条”的右下部分的多页式工具条。事实上它并不是寻常意义上的工具条,因为其上的每一工具按钮并不提供执行某一命令的功能。我们称它为控件栏。控件是CB提供的先进的编程思想的体现之一,本章后面我们会