欢迎访问Nana C++ Library FAQ

该FAQ是为了演示Nana库提供的基础功能。

常见问题

仍然还有疑问?请询问我: cnjinhao at hotmail com

如何关闭命令提示符窗口?

文档及参考手册中提供的示例,都使用main()函数作为入口函数。在Windows系统中,通常情况下main()函数用于作为命令行程序的入口函数,因此,当在运行这些示例程序时,你会看到有一个命令提示符的窗口。如果要关闭这些命令提示符窗口,在创建工程时选择Win32应用程序项目,这样就以WinMain()函数作为入口函数。


怎么拦截Windows控件发送的消息?

Nana库没有提供访问系统消息循环的方法,因为这个特性是系统相关的。然而,通过一些库提供的功能和 Windows的窗口子类化技术,可以实现访问系统的消息的功能。 窗口子类化是用SetWindowLong()函数通过GWL_WNDPROC来设置一个新的窗口过程函数,从而获得系统内部传递的窗口消息。这里有一个示例代码实现了窗口子类化技术,单击这里


Nana是否支持布局管理?

是的,支持。 Nana提供了一个功能强大的place类处理布局,它可以使程序代码变得更加清晰、简短。类place还支持分割栏,而不需要写一行代码从而实现对两个窗口的分割功能。 通过使用类place,程序可以动态地修改其窗口的布局方式而无需重新编译。请参考文档查阅更多place的详情。


nana::string是什么?

nana::string是 std::string 或者 std::wstring的别名。如果定义了NANA_UNICODE这个标志,nana::string就是std::wstring的别名,否则就是std::string。


如何将UTF-8字符串转换成本地字符编码?

Nana提供了一个charset类。

std::string utf8_str; //UTF-8 字符串
std::string lc_str = nana::charset(utf8_str, nana::unicode::utf8); //在Windows上,UTF-8被转换为本地字符编码。
std::wstring utfx_str = nana::charset(utf8_str, nana::unicode::utf8); //UTF-8 转换为 UTF-16/UTF-32

请参考 文档查阅详情。


Nana是否支持现实阿拉伯文字?

是的,Nana支持显示BiDi语言。


如何在Nana程序中使用GDI+?

当您需要绘制图像时,您需要一个图像对象。例如,使用GDI+在窗口中绘制一个矩形。

int main()
{
    //初始化 GDI+ ...
    using namespace nana;

    form fm;

    //类drawing的作用是为指定的widget设置一个绘图函数。当Nana重绘这个widget的时候,
    //设置的绘图函数就会被调用。
    drawing{fm}.draw([](nana::paint::graphics& graph)
    {
        Gdiplus::Graphics gdip((HDC)graph.context());    //平台相关的代码
        Gdiplus::Pen pen(Gdiplus::Color(255, 0, 0), 2.0);
        gdip.DrawRectangle(& pen, 0, 0, 100, 100);
    });

    fm.show();
    exec();
}

参考文档查阅类drawing的详情。