四时宝库

程序员的知识宝库

codeblocks和VS2019下的fltk使用中文

在fltk中用中文有点问题。


英文是这样。中文就成这个样子了。

我查了查资料,说用UTF-8编码就行了。


edit->File encoding->UTF-8

然后保存文件。


看下下边的编码指示确定是UTF-8。

编译并运行。


是不是好了?

那在vs2019中呢?

方法1

在开头加入要求使用UTF-8编码的指令,有些VS版本不支持。

//使用UTF-8字符集
#pragma execution_character_set("utf-8")

方法2

字符串前面加u8标记这是UTF-8字符串,给fltk使用就不会出错。

char str[] = u8"这是UTF-8字符";

方法3

在配置属性那里加/utf8

这个和方法1是性质一样的。

方法4

unicode 转化成UTF-8字符串

//------------------------------------------------------
	const size_t MAX = 256;
	char utf8[MAX];
	wchar_t wstr[] = L"字符串转换";
	fl_utf8fromwc(utf8, MAX, wstr, wcslen(wstr));

	//--------------------------------------------------------
	Fl_Box* box = new Fl_Box(20, 20, 260, 100, utf8);
	box->box(FL_UP_BOX);
	box->labelsize(36);
	box->labelfont(FL_BOLD + FL_ITALIC);
	box->labeltype(FL_SHADOW_LABEL);

后面是完整代码



/*使用UTF-8字符集
#pragma execution_character_set("utf-8")
*/

#ifdef _DEBUG
#pragma comment(lib,"fltk.lib")
#else
#pragma comment(lib,"fltk.lib")
#endif

#include <iostream>
#include "FL/Fl.H"
#include "FL/Fl_Window.H"
#include "FL/Fl_Box.H"
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

int main(int argc, char** argv) {

	Fl_Window* window = new Fl_Window(300, 400);
	//------------------------------------------------------
	const size_t MAX = 256;
	char utf8[MAX];
	wchar_t wstr[] = L"字符串转换";
	fl_utf8fromwc(utf8, MAX, wstr, wcslen(wstr));

	//--------------------------------------------------------
	Fl_Box* box = new Fl_Box(20, 20, 260, 100, utf8);
	box->box(FL_UP_BOX);
	box->labelsize(36);
	box->labelfont(FL_BOLD + FL_ITALIC);
	box->labeltype(FL_SHADOW_LABEL);

	char str[] = u8"这是UTF-8字符";
	//---------------------------------------------------------
	Fl_Box* box1 = new Fl_Box(20, 120, 260, 100, str);
	box1->box(FL_UP_BOX);
	box1->labelsize(36);
	box1->labelfont(FL_BOLD + FL_ITALIC);
	box1->labeltype(FL_SHADOW_LABEL);


	window->end();

	window->show(argc, argv);

	return Fl::run();
}


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接