日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FLTK中的字体

發布時間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FLTK中的字体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FLTK中的字體

    • 字體在FLTK中的表示
    • 獲取系統的字體編號表
    • 程序示例

字體在FLTK中的表示

在FLTK中,系統中的每一種字體都對應著一個整數類型(嚴格來講是Fl_Font類型,但Fl_Font本身就是int的別名)的字體編號。例如,在本人的系統中“楷體”所對應的字體編號為618。

在創建控件后,可以通過labelfont(int)方法來設施其所顯示的字體。例如,下列代碼創建了一個字體為楷體的Fl_Box對象:

Fl_Box pBox = new Fl_Box(0, 0, 200, 30, "這是楷體"); pBox->labelfont(618);

獲取系統的字體編號表

FLTK用字體編號表(Face table)來存儲系統中的字體編號和字體名稱的對應關系。

在FLTK中可以通過以下步驟來獲取字體編號表中的內容:

  • 更新字體編號表
    可以通過Fl::set_fonts靜態方法(注意這里fonts中有s)來讓FLTK搜尋系統中的字體并儲存到字體編號表中。其函數原型如下,其中xstarname是一個字符數組,用來描述要添加的字體集 。傳遞空指針表示選取ISO8859-1編碼的字體,而傳遞-*表示選取所有字體(WIN平臺)。一般建議參數選-*,具體說明可以參考官方文檔。
  • Fl_Font Fl::set_fonts(const char* xstarname=0);
  • 獲取字體編號
    可以通過Fl::get_font_name靜態方法來獲取對應字體編號的字體名稱。其輸入是字體編號,返回值是字體名稱。其函數原型如下,其中參數fnum是一個整型,代表字體編號,返回值是一個字符數組,代表字體的名稱。另一個參數attributes的用來表明所對應字體類別,分別是0-普通,1-粗體,2-斜體,3-斜黑體。具體說明可以參考官方文檔。
  • const char* Fl::get_font_name(Fl_Font fnum, int* attributes=0);

    獲取系統的字體編號表的示例代碼如下:

    int type; /* 用來存放得到字體的類型 */ int font_number = Fl::set_fonts("-*"); /* 獲取系統中字體的數目 */ for(int i=0; i<font_number; i++){ /* 找到名字為楷體的字體編號 */if(!strcmp(Fl::get_font_name(i), "楷體")){std::cout << "字體編號: " << i << "字體名稱: " << Fl::get_font_name((Fl_Font)i, &type) << std::endl;} }

    程序示例

    下面是一個創建窗口并用不同字體顯示的示例程序:

    #include <FL/Fl.H> #include <FL/Fl_Double_Window.H> #include <FL/Fl_Box.H> #include <cstring> #include <vector> #include <iostream>int main(){char s[] = "問君能有幾多愁,恰似1群Tj上青樓~"; /* 演示文本 */std::vector<int> vecInt; /* 保存字體編號 */std::vector<Fl_Box*> vecBox; /* 保存控件的指針 */int type; /* 用來存放得到字體的類型 */int font_numbers = Fl::set_fonts("-*"); /* 獲取系統中的字體數目 *//* 打印前10種字體以及楷體的字體編號和字體名稱并保存 */ for (int i=0; i<font_numbers; i++){if (i<10){std::cout << "字體編號: " << i << ", 字體名稱: " << Fl::get_font_name((Fl_Font)i, &type);std::cout << ", 字體類型: " << ((type==0)?("普通"):((type==1)?("黑體"):((type==2)?("斜體"):((type==3)?("黑斜"):("未知"))))) << std::endl;vecInt.push_back(i);}else if (!strcmp(Fl::get_font_name((Fl_Font)i,nullptr), "楷體")){std::cout << "字體編號: " << i << ", 字體名稱: " << Fl::get_font_name((Fl_Font)i,&type);std::cout << ", 字體類型: " << ((type==0)?("普通"):((type==1)?("黑體"):((type==2)?("斜體"):((type==3)?("黑斜"):("未知"))))) << std::endl;vecInt.push_back(i);vecInt.push_back(i);}}Fl_Double_Window* pMainWindow = new Fl_Double_Window(300, 400, "字體測試");for (size_t i=0; i<vecInt.size(); i++){vecBox.push_back(new Fl_Box(0, i*30, 300, 30, s));vecBox[i]->labelfont(vecInt[i]);}pMainWindow->end();pMainWindow->show();return Fl::run(); }

    這里注意在編譯的時候記得加上-lfltk命令(在MSYS2上還要加上-mwindows -DWIN32 -lole32 -luuid -lcomctl32)。

    其在命令行界面得到的結果如下:

    字體編號: 0, 字體名稱: Arial, 字體類型: 普通 字體編號: 1, 字體名稱: Arial bold, 字體類型: 黑體 字體編號: 2, 字體名稱: Arial italic, 字體類型: 斜體 字體編號: 3, 字體名稱: Arial bold italic, 字體類型: 黑斜 字體編號: 4, 字體名稱: Courier New, 字體類型: 普通 字體編號: 5, 字體名稱: Courier New bold, 字體類型: 黑體 字體編號: 6, 字體名稱: Courier New italic, 字體類型: 斜體 字體編號: 7, 字體名稱: Courier New bold italic, 字體類型: 黑斜 字體編號: 8, 字體名稱: Times New Roman, 字體類型: 普通 字體編號: 9, 字體名稱: Times New Roman bold, 字體類型: 黑體 字體編號: 618, 字體名稱: 楷體, 字體類型: 普通

    創建的窗口如下:
    相關鏈接
    專欄:FLTK

    總結

    以上是生活随笔為你收集整理的FLTK中的字体的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。