国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼

這篇具有很好參考價(jià)值的文章主要介紹了MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼

背景:為什么同時(shí)使用MFC和OSG

我建立了一個(gè)MFC工程,以O(shè)SG作為視圖顯示的基礎(chǔ),通過(guò)點(diǎn)擊MFC菜單啟動(dòng)某些功能。因此,在工程中包含了OSG庫(kù)。并且,為了使生成的exe在Windows下能正常處理中文路徑,使用**多字節(jié)字符集(ANSI)**作為編碼方式。因此,程序中并不會(huì)使用L()宏來(lái)定義Unicode字符串,也不會(huì)使用wchar等寬字符類(lèi)型,而是所有字符串都用一樣的寫(xiě)法,比如:

const char* pHUDText="我愛(ài)你中國(guó)";

如果不考慮OSG,這種寫(xiě)法完全沒(méi)有問(wèn)題,運(yùn)行MFC程序、使用MFC對(duì)話框顯示和讀取中文輸入都是正常工作的。
但是,我的工程中還引入了OSG庫(kù),這個(gè)庫(kù)僅支持utf-8的字符串顯示。所以我必須將要輸入OSG顯示的中文字符串轉(zhuǎn)換成utf-8編碼格式。為了完成這件事,進(jìn)行了下面幾種嘗試:

  1. MSVC項(xiàng)目屬性中加入 /execution-charset:utf-8
    操作如下圖所示:
    MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼,mfc,c++
    代碼中仍使用正常的字符串寫(xiě)法。

  2. 使用u8字符串

  3. 使用函數(shù)將字符串轉(zhuǎn)到utf-8編碼(使用支持C++11的編譯器時(shí),完全可以由方法2替代)。定義如下:

#include<Windows.h>//WideCharToMultiByte定義在這里
void unicodeToUTF8(const std::wstring &src, std::string& result) 
{ 
	int n = WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, 0, 0, 0, 0 ); 
	result.resize(n); 
	::WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, (char*)result.c_str(), result.length(), 0, 0 ); 
}

void gb2312ToUnicode(const std::string& src, std::wstring& result) 
{ 
	int n = MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, NULL, 0 ); 
	result.resize(n); 
	::MultiByteToWideChar( CP_ACP, 0, src.c_str(), -1, (LPWSTR)result.c_str(), result.length()); 
}

void gb2312toUTF8(const std::string& src, std::string& result) 
{ 
	std::wstring strWideChar; 
	gb2312ToUnicode(src, strWideChar); 
	unicodeToUTF8(strWideChar, result); 
}

其中CP_ACP就是指當(dāng)前代碼頁(yè)。CP_UTF8指的是65001(utf-8)代碼頁(yè)。
gb2312toUTF8的第一個(gè)參數(shù)是傳入的待轉(zhuǎn)換字符串,第二個(gè)參數(shù)是結(jié)果字符串。

詳解三種使字符串能在OSG中顯示的方法

/execution-charset:utf-8 設(shè)置程序執(zhí)行時(shí)的編碼為utf-8

即程序源碼中的字符串編譯后在可執(zhí)行程序或庫(kù)中的編碼方式都由此選項(xiàng)控制。如果一個(gè)MSVC項(xiàng)目在命令行加入了這一項(xiàng),則程序中的所有字符串都會(huì)按照utf-8編碼存儲(chǔ)。

u8字符串字面量

使用u8字符串字面量?jī)H對(duì)當(dāng)前字符串的編碼指定為utf-8存儲(chǔ)。即,如果程序本身是按系統(tǒng)的ANSI編碼正常工作,設(shè)置u8字符串字面量
示例:

#include <iostream>

int main()
{
    std::cout << u8"大家好";
}

在這段代碼中,編譯器會(huì)將"大家好"三個(gè)漢字按照utf-8編碼存進(jìn)生成的.exe程序中。執(zhí)行程序時(shí),按照Windows系統(tǒng)默認(rèn)代碼頁(yè)(ANSI,936)從.exe中讀取這段字符數(shù)據(jù),并輸出到命令行。這當(dāng)然會(huì)亂碼啦!如圖所示:
MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼,mfc,c++
但是,如果你打開(kāi)命令行后,將命令行的代碼頁(yè)切換到utf-8,再運(yùn)行這個(gè)程序,則會(huì)輸出正確的結(jié)果。如下圖所示:

MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼,mfc,c++

GB2312toUTF8函數(shù)

通過(guò)WINAPI將字符串從默認(rèn)代碼頁(yè)ANSI轉(zhuǎn)到Unicode,再?gòu)腢nicode轉(zhuǎn)到utf-8。

總結(jié)

像我的應(yīng)用場(chǎng)景,MFC+OSG場(chǎng)景顯示,MFC程序中的字符讀取都還是按ANSI編碼,僅僅將輸入OSG的字符串轉(zhuǎn)換為utf-8編碼,所以不適合采用第一種策略(將所有字符串都以u(píng)tf-8編碼存儲(chǔ))。第二種方法和第三種方法是等價(jià)的,且在編譯器支持u8字符串字面量時(shí)更推薦第二種方法,簡(jiǎn)潔又省事。

如果已經(jīng)在C/C+±命令行中加入了/execution-charset:utf-8,但是在程序中又同時(shí)使用了GB2312toUTF8函數(shù)將字符串轉(zhuǎn)換,則又會(huì)導(dǎo)致亂碼。例如:

int main()
{
    std::string str, str1, str2;
    str1 = "大家好!\n";
    str2 = u8"大家好!\n";
    gb2312ToUtf8(str1, str);
    std::cout << str;
    std::cout << str1;
    std::cout << str2;
}

在65001代碼頁(yè)中的運(yùn)行結(jié)果為:

MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼,mfc,c++
可見(jiàn),這三種方式只使用其中一種即可,u8和/execution-charset:utf-8不沖突,而gb2312ToUtf8/execution-charset:utf-8同時(shí)使用是不行的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-720089.html

到了這里,關(guān)于MFC+OSG(Open Secene Graph)場(chǎng)景實(shí)現(xiàn)中文HUD(head up display)效果,防止中文亂碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • osg實(shí)現(xiàn)鼠標(biāo)框選

    osg實(shí)現(xiàn)鼠標(biāo)框選

    目錄 1. 需求的提出 2. 具體實(shí)現(xiàn) ? ? ?2.1. 禁止場(chǎng)景跟隨鼠標(biāo)轉(zhuǎn)動(dòng) ? ? ?2.2. 矩形框前置繪制 3. 附加說(shuō)明 ? ? ? ? 3.1. 顏色設(shè)置說(shuō)明 ? ? ? ? 3.2.矩形框顯示和隱藏的另一種實(shí)現(xiàn) ? ? ? ?有時(shí)需要在屏幕通過(guò)按住鍵盤(pán)上的某個(gè)鍵如Ctrl鍵且按住鼠標(biāo)左鍵,拖出一個(gè)矩形,實(shí)現(xiàn)框選

    2024年02月08日
    瀏覽(30)
  • OPEN AI接入MidJourney 畫(huà)圖支持GPT4中文智能優(yōu)化效果驚艷

    OPEN AI接入MidJourney 畫(huà)圖支持GPT4中文智能優(yōu)化效果驚艷

    OPEN AI 平臺(tái) 開(kāi)放免費(fèi)AI聚合服務(wù)平臺(tái),提供應(yīng)用程序一鍵接入AI畫(huà)圖,對(duì)話的能力。 目前已經(jīng)支持GPT3和GPT4普通對(duì)話和流式對(duì)話。 支持GPT畫(huà)圖和MidJourney 畫(huà)圖。 后續(xù)還會(huì)接入更多功能 在線接入案例演示體驗(yàn) 這里主要展示一下MJ的強(qiáng)大的畫(huà)圖功能 平臺(tái)發(fā)展版本來(lái)龍去脈 如果大

    2024年02月12日
    瀏覽(24)
  • chinese-stable-diffusion中文場(chǎng)景文生圖prompt測(cè)評(píng)集合

    我在git上新建了一個(gè)倉(cāng)庫(kù),主要是總結(jié)一波了chainese-stable-diffusion的模型算法,非常歡迎關(guān)注:? GitHub - leeguandong/Awesome-Chinese-Stable-Diffusion: 中文文生圖stable diffsion模型集合 中文文生圖stable diffsion模型集合. Contribute to leeguandong/Awesome-Chinese-Stable-Diffusion development by creating an accou

    2024年02月04日
    瀏覽(20)
  • ChatGPT 中文調(diào)教指南。各種場(chǎng)景使用指南。學(xué)習(xí)怎么讓它聽(tīng)你的話。

    “寫(xiě)一本擁有出人意料結(jié)局的推理小說(shuō)?!?“寫(xiě)一個(gè)讓讀者參與其中的交互小說(shuō)?!?“為孩子們寫(xiě)一本激勵(lì)他們勇敢面對(duì)挑戰(zhàn)的小說(shuō)?!?“編寫(xiě)一個(gè)有關(guān)科技創(chuàng)新的未來(lái)世界的小說(shuō)?!?“創(chuàng)造一個(gè)讓讀者感到沉浸其中的幻想故事。” 我想讓你充當(dāng) Linux 終端。我將輸入命令

    2024年02月01日
    瀏覽(40)
  • 【開(kāi)發(fā)環(huán)境】VSCode 安裝插件 ( 簡(jiǎn)體中文插件 | Open in Browser 插件 | Auto Rename Tag 插件 | JS-CSS-HTML Formatter 插件 )

    【開(kāi)發(fā)環(huán)境】VSCode 安裝插件 ( 簡(jiǎn)體中文插件 | Open in Browser 插件 | Auto Rename Tag 插件 | JS-CSS-HTML Formatter 插件 )

    在 VSCode 中 , 左側(cè)的 按鈕 是 擴(kuò)展 按鈕 , 使用 Ctrl + Shift + X 也可以快速進(jìn)入插件安裝界面 ; 在彈出的 擴(kuò)展 面板中 , 可以搜索和安裝插件 ; 在擴(kuò)展工具面板中 , 搜索 Chinese , 可以看到 簡(jiǎn)體中文 插件 , 安裝該插件后 , 界面會(huì)變?yōu)楹?jiǎn)體中文界面 ; 安裝完畢后 , 重啟 VSCode 即可完成

    2024年02月13日
    瀏覽(36)
  • AR HUD全面「上新」

    AR HUD全面「上新」

    AR HUD賽道正在迎來(lái)新的時(shí)代。 上周, 蔚來(lái)ET9正式發(fā)布亮相 ,新車(chē)定位為D級(jí)行政旗艦轎車(chē),其中,在智能座艙交互層面,繼理想L系列、長(zhǎng)安深藍(lán)S7之后,也 首次取消儀表盤(pán),取而代之的是業(yè)內(nèi)首個(gè)全焦段AR HUD。 從公開(kāi)的參數(shù)來(lái)看,這套全新一代AR HUD的創(chuàng)新之處在于,可以實(shí)

    2024年01月21日
    瀏覽(19)
  • AR-HUD

    AR-HUD

    目錄 一、C-HUD、W-HUD、AR-HUD 1.實(shí)際考慮車(chē)外環(huán)境信息與相對(duì)位置 2.實(shí)時(shí)考慮駕駛員眼睛的位置 二、ADAS 1、定義 2、ADAS關(guān)鍵節(jié)點(diǎn) 3 、主要功能 A.信息輔助 第一類(lèi)行車(chē)監(jiān)控類(lèi) 第二類(lèi)危險(xiǎn)預(yù)警類(lèi) 第三類(lèi)是駕駛便利類(lèi) IA信息輔助類(lèi)整體列表? B、控制輔助 第一類(lèi)緊急應(yīng)對(duì)類(lèi) 第二類(lèi)為

    2024年02月06日
    瀏覽(16)
  • 中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例

    中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例

    中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例 軟件特色: 1、功能實(shí)用,操作簡(jiǎn)單,不會(huì)電腦也會(huì)操作,軟件免安裝,已內(nèi)置數(shù)據(jù)庫(kù)。軟件在關(guān)閉的時(shí)候,可以設(shè)置會(huì)員數(shù)據(jù)備份到U盤(pán),數(shù)據(jù)本機(jī)備份一份,U盤(pán)備份一份,雙重備份數(shù)據(jù)安全。 2、軟件既

    2024年02月08日
    瀏覽(25)
  • vue插件——relation-graph——實(shí)現(xiàn)關(guān)系圖功能——技能提升

    vue插件——relation-graph——實(shí)現(xiàn)關(guān)系圖功能——技能提升

    在做組織關(guān)系圖時(shí),經(jīng)常會(huì)遇到關(guān)系圖的實(shí)現(xiàn)要求,就是要將人與人或者組織與組織或者人與組織之間的關(guān)系進(jìn)行一一展示。已知的就是節(jié)點(diǎn)和關(guān)系。 最近在寫(xiě)后臺(tái)管理系統(tǒng)時(shí),遇到一個(gè)需求,就是要實(shí)現(xiàn)關(guān)系圖: 如下圖所示: 在前年寫(xiě)天眼查功能時(shí),我也遇到過(guò)這種需求

    2024年02月11日
    瀏覽(18)
  • 【VR】Network Manager HUD

    【VR】Network Manager HUD

    ??本專(zhuān)欄是我關(guān)于VR開(kāi)發(fā)的筆記 ??本篇是——Network Manager HUD 網(wǎng)絡(luò)管理器 HUD是一種快速啟動(dòng)工具,可幫助您立即開(kāi)始構(gòu)建多人游戲,而無(wú)需首先構(gòu)建用于游戲創(chuàng)建/連接/加入的用戶界面。 這個(gè)組件是這個(gè)樣子的: 在Game窗口的顯示是這樣的: offset X: HUD GUI 的水平像素偏移,

    2024年02月10日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包