0. 楔子
学编程干什么?
唉!主要是给老板写软件,赚点活这个城市的生活费吧……
忘记了吗?在 《编程启蒙》的最后一节课《你是程序员》 我们提过一嘴:要勇于苦中作乐。
这可不是阿Q精神,一身本事,没必要时时刻刻都用来当乙方,偶尔也可以给朋友写一些可以帮助到朋友的小系统,写一些可以拿来自己用的工具软件——没有KPI,所以写代码时腰可以挺得特别的直。
很多小工具应用,整个应用的主窗口就是一个对话框——这节课的意义,就这样,它来了。
1. 视频
还是先看视频。
2. 注意点
创建项目过程,及结束后,以下四点需注意——
- GUI Builder:选择使用 wxSmith 设计器;
- Application Type:选择 Dialog Based Application;
- 附加库,(借助按 Ctrl 键),选中 jpeg 和 tiff;
- 生成后,在修改控件的Label属性为汉字标题之前,记得修改源文件编码为 UTF8 (方法:主菜单 Edit / File encode)
其中的第2点并非必选项,因为当然可以不使用 GUI Builder 来创建对话框项目,只是本课堂教学需要,我们借机了解 wxSmith 的用法。
为什么叫wxSmith ? 答:Smith (史密斯)这个人名在英美,早先之前常用于修理工,匠人,园艺师……
3. 关键代码理解
在 wxSmith 选项加持下,XXXApp.cpp 中,App 的 OnInit() 方法现为:
//(*AppInitialize
bool wxsOK = true;
wxInitAllImageHandlers();
if ( wxsOK )
{
HelloDlgDialog Dlg(0);
SetTopWindow(&Dlg);
Dlg.ShowModal();
wxsOK = false;
}
//*)
return wxsOK;
-
解读一:首先注意那些奇怪的注释符号,不能修改或删除,它们是 wxSmith 在代码中作的记号,方便它后面依据我们的设计,直接修改源代码;
-
解读二:函数直接返回 false (变量 wxsOk 没啥用,它就是 flase),我们之前已经学习过,wxAPP 的 OnInit() 方法返回 false ,应用将直接退出(逻辑没错,因为此时应用程序的主窗口已经关闭了,参见下一点);
-
解读三:创建的窗口对象 Dlg 是一个对话框,入参为 0 表示它没有父窗口,而后,来自 wxApp 的方法
SetTopWindow(&Dlg)
是在告诉当前应用,这个窗口(对话框,Dlg)就是当前应用的最顶层的窗口(主窗口的另一说法); -
解读四:创建项目时,之所要以选 wxTiff 和 wxJPEG 库,是因为此处的
wxInitAllImageHandlers()
,它用来初始化 wxWidgets 所支持的全部图形类型,如果前面不选附加库,并且又希望代码能通过编译,只需注释或直接删除本行。
4. 思考
课后思考:请打开项目中的主窗口的源文件(XXXMain.cpp),你将看到一个空的事件表:
BEGIN_EVENT_TABLE(HelloDlgDialog,wxDialog)
//(*EventTable(HelloDlgDialog)
//*)
END_EVENT_TABLE()
奇怪,事件表空无一物,可是,正如视频演示,我们点击对话框上的 “About” 或 “Quit”,都有事件发生呢?
这是下一节课我们要学习的内容:事件,然后再下一节课,我们将综合使用对话框和事件的知识,动手写一个可以安装在 Windows 里的屏幕保护程序。