#include "fx.h"
/*
这是一个经典的例子。正如你所看到的那样,用FOX来做同样的事
并不比相应的控制台程序多多少代码!
下列事项需要注意:
- 每个FOX应用程序需要一个(也只需要一个)application对象(FXApp)。
- 在做任何事情之前,需要初始化application对象。你需要将argc和argv
这两个参数传递给它以便FOX可以处理特定的命令行参数(例如 -display).
- 你至少需要创建一个顶层窗口;在本程序中是FXMainWindow。
- FOX部件只需要以正确的顺序简单地嵌套创建。
这里,我们创建FXButton作为"main"的孩子。
- 一个对FXApp::create()的简单调用将自动创建每一个部件。
若不调用create(),部件只会存在于那里,但并不会出现在屏幕上。
- 最后,FXApp::run()函数会启动主事件循环。直到程序运行结束它才会返回。
*/
// 程序入口点
int main(int argc,char **argv){
// 每个FOX GUI程序需要一个,也只需要一个application对象。
// application对象会自动处理一些共享于部件之间的事务;
// 比如说,它负责发送事件,保存所有的窗口,等等。
// 我们需要传递“名字”以及“vendor(卖主)”给application,
// 这两项是用来查找注册信息数据库(用来保存注册信息的,如
// 字体和颜色)的。
FXApp application("Hello","FoxTest");
// 我们在这里初始化应用程序。我们需要将命令行参数传递给FOX以便它做一
// 些特定的处理。它同时会显示窗口,读取配置文件以便使一些配置生效。
application.init(argc,argv);
// 下面要创建主窗口。我们需要将窗口标题以及图标当作参数传递给它(如果
// 有的话)。它同时支持一些窗口特征,比如边界,关闭按钮,以及拖拽功能。
FXMainWindow *main=new FXMainWindow(&application,"Hello",NULL,NULL,DECOR_ALL);
// 这里我们创建了一个按钮。它上面有一个标签,但是没有图标。
// '&'符号为这个按钮提供了一个快捷键,这样我们就可以用键盘来控制它。
// 按钮会发送一个ID_QUIT消息给application对象,其默认实现为退出应用程序。
new FXButton(main,"&Hello, World!",NULL,&application,FXApp::ID_QUIT);
// 这句“实现”了部件树。这是必要的,因为GUI是一个客户端-服务器系统,
// 也就是说,实际上有两个系统正在运行,一个客户端(在本程序中,是“Hello world”),
// 以及一个服务器(X11 server或者Windows GDI)。我们可以创建C++部件对象,
// 但同时我们也要告诉服务器将窗口显示出来。除了窗口,还有许多其它的资源,
// 如图标,字体等需要创建。这个函数调用将递归地访问整个部件树,然后创建。
application.create();
// 很明显:这句将在屏幕中央显示我们的窗口。
main->show(PLACEMENT_SCREEN);
// 直到现在,我们才真正令我们的程序运行起来。直到我们退出程序,它才会返回。
// 函数run()是一个简单的循环,它从用户那里接收事件,处理之,然后等待下一个事件,
// 直到我们点击退出按钮。
return application.run();
}
/*
这是一个经典的例子。正如你所看到的那样,用FOX来做同样的事
并不比相应的控制台程序多多少代码!
下列事项需要注意:
- 每个FOX应用程序需要一个(也只需要一个)application对象(FXApp)。
- 在做任何事情之前,需要初始化application对象。你需要将argc和argv
这两个参数传递给它以便FOX可以处理特定的命令行参数(例如 -display).
- 你至少需要创建一个顶层窗口;在本程序中是FXMainWindow。
- FOX部件只需要以正确的顺序简单地嵌套创建。
这里,我们创建FXButton作为"main"的孩子。
- 一个对FXApp::create()的简单调用将自动创建每一个部件。
若不调用create(),部件只会存在于那里,但并不会出现在屏幕上。
- 最后,FXApp::run()函数会启动主事件循环。直到程序运行结束它才会返回。
*/
// 程序入口点
int main(int argc,char **argv){
// 每个FOX GUI程序需要一个,也只需要一个application对象。
// application对象会自动处理一些共享于部件之间的事务;
// 比如说,它负责发送事件,保存所有的窗口,等等。
// 我们需要传递“名字”以及“vendor(卖主)”给application,
// 这两项是用来查找注册信息数据库(用来保存注册信息的,如
// 字体和颜色)的。
FXApp application("Hello","FoxTest");
// 我们在这里初始化应用程序。我们需要将命令行参数传递给FOX以便它做一
// 些特定的处理。它同时会显示窗口,读取配置文件以便使一些配置生效。
application.init(argc,argv);
// 下面要创建主窗口。我们需要将窗口标题以及图标当作参数传递给它(如果
// 有的话)。它同时支持一些窗口特征,比如边界,关闭按钮,以及拖拽功能。
FXMainWindow *main=new FXMainWindow(&application,"Hello",NULL,NULL,DECOR_ALL);
// 这里我们创建了一个按钮。它上面有一个标签,但是没有图标。
// '&'符号为这个按钮提供了一个快捷键,这样我们就可以用键盘来控制它。
// 按钮会发送一个ID_QUIT消息给application对象,其默认实现为退出应用程序。
new FXButton(main,"&Hello, World!",NULL,&application,FXApp::ID_QUIT);
// 这句“实现”了部件树。这是必要的,因为GUI是一个客户端-服务器系统,
// 也就是说,实际上有两个系统正在运行,一个客户端(在本程序中,是“Hello world”),
// 以及一个服务器(X11 server或者Windows GDI)。我们可以创建C++部件对象,
// 但同时我们也要告诉服务器将窗口显示出来。除了窗口,还有许多其它的资源,
// 如图标,字体等需要创建。这个函数调用将递归地访问整个部件树,然后创建。
application.create();
// 很明显:这句将在屏幕中央显示我们的窗口。
main->show(PLACEMENT_SCREEN);
// 直到现在,我们才真正令我们的程序运行起来。直到我们退出程序,它才会返回。
// 函数run()是一个简单的循环,它从用户那里接收事件,处理之,然后等待下一个事件,
// 直到我们点击退出按钮。
return application.run();
}