亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在Visual Studio上構(gòu)建C++的GUI框架wxWidgets的開發(fā)環(huán)境

 更新時(shí)間:2016年04月22日 14:43:28   作者:雙子座  
這篇文章主要介紹了Visual Studio上構(gòu)件C++的GUI框架wxWidgets開發(fā)環(huán)境的方法,wxWidgets是一個(gè)跨多個(gè)系統(tǒng)平臺的圖形化界面開發(fā)框架,并且可用語言不限于C++,需要的朋友可以參考下

本文使用的Unicode+DLL+Debug的方式,因?yàn)椴幌胱詈笊傻膃xe文件太大。

環(huán)境搭建步驟如下:

1、下載wxWidgets包:

登錄wxWidgets的下載頁面:http://www.wxwidgets.org/downloads
下載最新的Stable Release穩(wěn)定版,我這里用舊的2.8.12版作演示。

2、將wxMSW-2.8.12.zip解壓到D盤根目錄下。

轉(zhuǎn)到D:\wxMSW-2.8.12\build\msw目錄,用VS2005打開wx.dsw,會有提示轉(zhuǎn)換項(xiàng)目:

2016422143616269.png (436×240)

選擇“全是”。

3、進(jìn)入到VS2005的界面,在下圖所示區(qū)域選擇DLL Unicode Debug:

2016422143635372.png (465×241)

4、按F7生成解決方案,這個(gè)操作會在D:\wxMSW-2.8.12\lib下生成一個(gè)“vc_dll”文件夾,里面是我們需要的dll和lib。

不過第一次執(zhí)行會提示有一些失敗的。因?yàn)橛幸恍┥身?xiàng)依賴于其他的生成項(xiàng)。此時(shí)繼續(xù)按F7,直到提示有1個(gè)失敗。此時(shí),再按F7也是沒用的,看看錯(cuò)誤提示:

1>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\vc_dll\wxbase28ud_odbc.lib”

這個(gè)wxbase28ud_odbc.lib在D:\wxMSW-2.8.12\lib\vc_dll下并不存在。此時(shí)可以在上圖中選擇Unicode Debug,之后在左邊選擇odbc,右擊,選擇生成,會在D:\wxMSW-2.8.12\lib\vc_lib目錄下生成wxbase28ud_odbc.lib,將這個(gè)文件拷到D:\wxMSW-2.8.12\lib\vc_dll目錄下,在上圖中將選項(xiàng)選回DLL Unicode Debug,再按F7,這樣所有的文件都生成了。

這樣,在生成了14個(gè)dll文件和18個(gè)lib文件。

5、在菜單欄依次選擇 工具——選項(xiàng),在打開的窗口依次選擇 項(xiàng)目和解決方案——VC++目錄。

5.1 在“包含文件”中添加:

D:\wxMSW-2.8.12\include
D:\wxMSW-2.8.12\include\msvc

5.2 在“庫文件”中添加:

D:\wxMSW-2.8.12\lib\vc_dll
D:\wxMSW-2.8.12\lib\vc_dll\mswud

如下圖:

2016422143719550.png (757×493)

6、關(guān)閉原來的工程,新建一個(gè)空的Win32項(xiàng)目,名稱為wxTest。注意,要是空的項(xiàng)目。

為這個(gè)項(xiàng)目添加一個(gè)C++文件Test.cpp,內(nèi)容為D:\wxMSW-2.8.12\samples\minimal\minimal.cpp的內(nèi)容。

7、配置項(xiàng)目:

選中這個(gè)項(xiàng)目,在菜單欄依次選擇 項(xiàng)目——wxTest屬性,在打開的窗口配置屬性:

7.1 在“配置屬性 —— C/C++ —— 預(yù)處理器”中的“預(yù)處理器定義”添加:

_UNICODE;WXUSINGDLL

7.2 在“配置屬性 —— C/C++ —— 運(yùn)行時(shí)庫”中的“運(yùn)行時(shí)庫”選擇:

多線程調(diào)試 DLL (/MDd)

7.3 在“配置屬性 —— 鏈接器 —— 輸入”中的“附加依賴庫”添加:

wxbase28ud.lib
wxbase28ud_net.lib
wxbase28ud_odbc.lib
wxbase28ud_xml.lib
wxexpatd.lib
wxjpegd.lib
wxmsw28ud_adv.lib
wxmsw28ud_aui.lib
wxmsw28ud_core.lib
wxmsw28ud_html.lib
wxmsw28ud_media.lib
wxmsw28ud_qa.lib
wxmsw28ud_richtext.lib
wxmsw28ud_xrc.lib
wxpngd.lib
wxregexud.lib
wxtiffd.lib
wxzlibd.lib

這里是一股腦全加上了。

8、生成解決方案,是成功的。按F5運(yùn)行這個(gè)程序,會提示計(jì)算機(jī)中丟失wxmsw28ud_core_vc_custom.dll,從D:\wxMSW-2.8.12\lib\vc_dll中把這個(gè)文件拷到生成的exe文件所在的目錄下。再次運(yùn)行,會提示丟失wxbase28ud_vc_custom.dll,再把這個(gè)文件拷到生成的exe文件所在的目錄下。此時(shí)再運(yùn)行就可以正確執(zhí)行了:

2016422143924026.png (476×270)

關(guān)于wxWidgets控件出現(xiàn)亂碼問題的解決
這兩天在用wxWidgets做一個(gè)小程序,突然遇到了一個(gè)控件顯示出現(xiàn)亂碼的問題。

首先聲明:我用的編譯器是Visual Studio 2005,wxWidgets版本是2.8.12,下面的解決方法不一定對所有的平臺都有效。

我們知道,wxWidgets中控件顯示字符串一般都是用wxString,例如下面的一小段代碼創(chuàng)建并顯示一個(gè)按鈕:

// 創(chuàng)建一個(gè)按鈕,顯示名稱就是“按鈕”
wxButton* oneButton = new wxButton( itemFrame1, ID_BUTTON, wxT("按鈕"), wxDefaultPosition, wxDefaultSize, 0);
// 把這個(gè)按鈕放在一個(gè)BoxSizer中
itemBoxSizer->Add(oneButton, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);

上面的代碼沒有錯(cuò)誤,顯示截圖如下:

2016422143955526.png (200×150)

但是,很多情況下,我們想要顯示的控件的標(biāo)簽是先放在char *中的,我們當(dāng)然要先轉(zhuǎn)換成wxString,轉(zhuǎn)換的方法有很多,比如用wxString::FromUTF8(),或者可以定義一個(gè)wxString對象,調(diào)用Printf方法。然而,兩種方法都不行。

如下代碼:

char *label = "按鈕";
wxString wxLabel;
wxLabel.Printf(wxT("%s"), label);
wxButton* oneButton = new wxButton( itemFrame1, ID_BUTTON, wxLabel, wxDefaultPosition, wxDefaultSize, 0);
itemBoxSizer->Add(oneButton, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);

得到的結(jié)果是

2016422144022865.png (200×150)

而如果使用wxString::FromUTF8(),則控件中根本沒有顯示的標(biāo)簽。

谷歌了很久都沒找到解決辦法,后來突然想到,以前做一個(gè)GTK項(xiàng)目的時(shí)候遇到過中文出現(xiàn)亂碼的問題,當(dāng)時(shí)峰哥給我發(fā)了一個(gè)將字符串轉(zhuǎn)換編碼的函數(shù),當(dāng)然,GTK有自帶的函數(shù)可以進(jìn)行轉(zhuǎn)換,是g_locale_to_utf8。而wxWidgets貌似沒有這樣的函數(shù)。峰哥給我的函數(shù)正好派上用場。

峰哥給我的函數(shù)是ANSI與UTF8相互轉(zhuǎn)換,為什么有用,是因?yàn)閂S默認(rèn)的編碼是ANSI。我今天在谷歌的時(shí)候,見到有人說將源代碼的編碼格式改成UTF8,在VS的 文件——高級保存選項(xiàng)中,我試過了,沒用。但是用了峰哥給我的函數(shù),效果就不一樣了。

峰哥的代碼是:

BOOL ansi_to_utf8(char * lpcszStr, char** lpwszStr)
{  
 WCHAR* strA; 
 int i= MultiByteToWideChar(CP_ACP, 0, (char*)lpcszStr, -1, NULL, 0); 
 strA = (WCHAR *)malloc(sizeof(WCHAR) * i); 
 MultiByteToWideChar(CP_ACP, 0, (char* )lpcszStr, -1, strA, i*2); 
 i= WideCharToMultiByte(CP_UTF8, 0, strA, -1, NULL, 0, NULL, NULL);
 *lpwszStr = (char *)malloc(i);
 WideCharToMultiByte(CP_UTF8, 0, strA, -1, *lpwszStr, i, NULL, NULL);  
 return TRUE;
}

可以把這段代碼放在程序的某個(gè)頭文件中,作為一個(gè)成員函數(shù)。別忘了包含windows.h頭文件。

再修改上面的第二段代碼如下:

char *label = "按鈕2";
char *label_utf8;
this->ansi_to_utf8(label, &label_utf8);
wxButton* oneButton = new wxButton( itemFrame1, ID_BUTTON, wxString::FromUTF8(label_utf8), wxDefaultPosition, wxDefaultSize, 0);
free(label_utf8);
itemBoxSizer->Add(oneButton, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);

這樣就可以正常顯示了:

2016422144053513.png (200×150)

相關(guān)文章

  • AndriodStudio使用listview實(shí)現(xiàn)簡單圖書管理

    AndriodStudio使用listview實(shí)現(xiàn)簡單圖書管理

    這篇文章主要為大家詳細(xì)介紹了AndriodStudio使用listview實(shí)現(xiàn)簡單圖書管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于Android LayoutInflater的使用介紹

    基于Android LayoutInflater的使用介紹

    本篇文章小編為大家介紹,基于Android LayoutInflater的使用介紹。需要的朋友參考下
    2013-04-04
  • Android Adapter里面嵌套ListView實(shí)例詳解

    Android Adapter里面嵌套ListView實(shí)例詳解

    這篇文章主要介紹了Android Adapter里面嵌套ListView實(shí)例詳解的相關(guān)資料,這里提供實(shí)例代碼并說明如何實(shí)現(xiàn)該功能,需要的朋友可以參考下
    2017-07-07
  • Android設(shè)置拍照或者上傳本地圖片的示例

    Android設(shè)置拍照或者上傳本地圖片的示例

    本篇文章主要介紹了Android設(shè)置拍照或者上傳本地圖片示例,可以拍照或者上傳本地文件,有需要的可以了解一下。
    2016-11-11
  • android實(shí)現(xiàn)圖片反轉(zhuǎn)效果

    android實(shí)現(xiàn)圖片反轉(zhuǎn)效果

    這篇文章主要介紹了android實(shí)現(xiàn)圖片反轉(zhuǎn)效果的方法,需要的朋友可以參考下
    2015-09-09
  • Android實(shí)現(xiàn)漸變色的圓弧虛線效果

    Android實(shí)現(xiàn)漸變色的圓弧虛線效果

    最近在學(xué)習(xí)Android的paint類的時(shí)候,學(xué)習(xí)了PathEffect路徑效果和Shader渲染效果。所以就做了下面的一個(gè)效果,其中自定義的view組主要是用DashPathEffect、SweepGradient的API形成的效果。感興趣的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • Android編程實(shí)現(xiàn)開始及停止service的方法

    Android編程實(shí)現(xiàn)開始及停止service的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)開始及停止service的方法,涉及Android針對service的開始、停止、綁定等操作相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下
    2016-01-01
  • Android SeekBar實(shí)現(xiàn)禁止滑動(dòng)

    Android SeekBar實(shí)現(xiàn)禁止滑動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)禁止滑動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android筆記之:App應(yīng)用之發(fā)布各廣告平臺版本的詳解

    Android筆記之:App應(yīng)用之發(fā)布各廣告平臺版本的詳解

    Android的廣告平臺是很多的,各市場對各平臺的接受程度是不一樣的,Android的開發(fā)者如果想集成廣告基本要考慮下面兩個(gè)問題
    2013-04-04
  • Android Service生命周期詳解

    Android Service生命周期詳解

    Android Service 生命周期可以促使移動(dòng)設(shè)備的創(chuàng)新,讓用戶體驗(yàn)到最優(yōu)越的移動(dòng)服務(wù),只有broadcast receivers執(zhí)行此方法的時(shí)候才是激活的,當(dāng) onReceive()返回的時(shí)候,它就是非激活狀態(tài)
    2015-11-11

最新評論