Hello Nana C++ Library

Hello Nana

项目网址

介绍贴

我们开始一个简单的程序,然后一行一行的讲解。


1    #include<nana/gui/wvl.hpp>
2    #include <nana/gui/widgets/label.hpp>

3    int main()
4    {
5        using namespace nana::gui;
6        form fm;
7        label lab(fm, nana::size(100, 20));
8        lab.caption(STR("Hello Nana"));
9        fm.show();
10       exec();
     }


第一行和第二行,包含定义在 namespace nana::gui 中的 form 类和 label 类。所有用Nana C++ Library开发的界面程序都需要包含<nana/gui/wvl.hpp>。

第五行,将nana::gui这个命名空间引入到main函数域中,使编译器可以直接查找到定义在nana::gui中的名字,例如:form, label, exec。

第六行,定义一个名为fm的form对象。在该例子中,这是一个用于摆放label微件的窗口。

第七行,定义一个名为lab的label对象,是一个用于显示文本字符串的标签微件,被创建在窗口中。微件是用户界面中的一个可视元素。

第八行,设置label对象的标题,每个微件都有一个caption()方法用于设置标题。在这行代码中,有一个被名为STR()的宏引用的字符串,这个宏用来外覆一个字符串,作用是使程序在UNICODE和多字节版本之间方便地切换。

第九行,使窗口可见。

第十行,将程序的控制权交给Nana库,此时,程序进入事件循环,等待并接收用户输入,例如,鼠标的移动,单击和键盘的敲击等等,exec()函数会阻塞该线程,直到窗口fm被关闭,在该例中,当关闭掉窗口,程序也随即结束。

Figure 1.1 Hello Nana

现在,使该程序在你的系统中运行之前,你应该安装Nana C++ Library。在帮助目录中,Installation Library Documentation讲解了安装的方法。


事件处理

为了接收用户的操作,需要对指定的微件注册事件处理函数,Nana库会等待用户输入,然后触发与事件对应的事件处理函数。第二个例子展示如何响应用户操作,该程序由一个按钮组成,当点击该按钮,程序就退出。

#include <nana/gui/wvl.hpp>
#include <nana/gui/widgets/button.hpp>

int main()
{
	using namespace nana::gui;
	form fm;
	button btn(fm, nana::size(100, 20));
	btn.caption(STR("Quit"));
	btn.make_event<events::click>(API::exit);
	fm.show();
	exec();
}
这段代码和第一个例子很相似,只是把label换成了button,并且给按钮注册了一个click(单击)事件。所有的widget(微件)类都提供一组方法用于注册事件,这组方法全都名为make_event,这是一个函数模板,第一个模板参数指定了一个事件的类型,并且必须显式指定。该函数模板的参数为事件的处理函数,API::exit()是Nana库提供的一个函数,用于关闭当前UI线程中的所有窗口,并退出事件循环函数。在该例中,当单击按钮时,API::exit()会被调用,然后窗口被关闭,程序随即结束。

在下篇中,我们将讲解函数对象和lambdas,以及这两个语言特性是如何运用在事件处理中,使程序的结构更加的清晰。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页