在Visual Studio上构建C++的GUI框架wxWidgets的开发环境

本文使用的Unicode+DLL+Debug的方式,因为不想最后生成的exe文件太大。

环境搭建步骤如下:

1、下载wxWidgets包:

登录wxWidgets的下载页面:http://www.wxwidgets.org/downloads
下载最新的Stable Release稳定版,我这里用旧的2.8.12版作演示。

2、将wxMSW-2.8.12.zip解压到D盘根目录下。

转到D:\wxMSW-2.8.12\build\msw目录,用VS2005打开wx.dsw,会有提示转换项目:

选择“全是”。

3、进入到VS2005的界面,在下图所示区域选择DLL Unicode Debug:

4、按F7生成解决方案,这个操作会在D:\wxMSW-2.8.12\lib下生成一个“vc_dll”文件夹,里面是我们需要的dll和lib。

不过第一次执行会提示有一些失败的。因为有一些生成项依赖于其他的生成项。此时继续按F7,直到提示有1个失败。此时,再按F7也是没用的,看看错误提示:

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

这个wxbase28ud_odbc.lib在D:\wxMSW-2.8.12\lib\vc_dll下并不存在。此时可以在上图中选择Unicode Debug,之后在左边选择odbc,右击,选择生成,会在D:\wxMSW-2.8.12\lib\vc_lib目录下生成wxbase28ud_odbc.lib,将这个文件拷到D:\wxMSW-2.8.12\lib\vc_dll目录下,在上图中将选项选回DLL Unicode Debug,再按F7,这样所有的文件都生成了。

这样,在生成了14个dll文件和18个lib文件。

5、在菜单栏依次选择 工具——选项,在打开的窗口依次选择 项目和解决方案——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

如下图:

6、关闭原来的工程,新建一个空的Win32项目,名称为wxTest。注意,要是空的项目。

为这个项目添加一个C++文件Test.cpp,内容为D:\wxMSW-2.8.12\samples\minimal\minimal.cpp的内容。

7、配置项目:

选中这个项目,在菜单栏依次选择 项目——wxTest属性,在打开的窗口配置属性:

7.1 在“配置属性 —— C/C++ —— 预处理器”中的“预处理器定义”添加:

_UNICODE;WXUSINGDLL

7.2 在“配置属性 —— C/C++ —— 运行时库”中的“运行时库”选择:

多线程调试 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运行这个程序,会提示计算机中丢失wxmsw28ud_core_vc_custom.dll,从D:\wxMSW-2.8.12\lib\vc_dll中把这个文件拷到生成的exe文件所在的目录下。再次运行,会提示丢失wxbase28ud_vc_custom.dll,再把这个文件拷到生成的exe文件所在的目录下。此时再运行就可以正确执行了:

关于wxWidgets控件出现乱码问题的解决
这两天在用wxWidgets做一个小程序,突然遇到了一个控件显示出现乱码的问题。

首先声明:我用的编译器是Visual Studio 2005,wxWidgets版本是2.8.12,下面的解决方法不一定对所有的平台都有效。

我们知道,wxWidgets中控件显示字符串一般都是用wxString,例如下面的一小段代码创建并显示一个按钮:

// 创建一个按钮,显示名称就是“按钮”
wxButton* oneButton = new wxButton( itemFrame1, ID_BUTTON, wxT("按钮"), wxDefaultPosition, wxDefaultSize, 0);
// 把这个按钮放在一个BoxSizer中
itemBoxSizer->Add(oneButton, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);

上面的代码没有错误,显示截图如下:

但是,很多情况下,我们想要显示的控件的标签是先放在char *中的,我们当然要先转换成wxString,转换的方法有很多,比如用wxString::FromUTF8(),或者可以定义一个wxString对象,调用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);

得到的结果是

而如果使用wxString::FromUTF8(),则控件中根本没有显示的标签。

谷歌了很久都没找到解决办法,后来突然想到,以前做一个GTK项目的时候遇到过中文出现乱码的问题,当时峰哥给我发了一个将字符串转换编码的函数,当然,GTK有自带的函数可以进行转换,是g_locale_to_utf8。而wxWidgets貌似没有这样的函数。峰哥给我的函数正好派上用场。

峰哥给我的函数是ANSI与UTF8相互转换,为什么有用,是因为VS默认的编码是ANSI。我今天在谷歌的时候,见到有人说将源代码的编码格式改成UTF8,在VS的 文件——高级保存选项中,我试过了,没用。但是用了峰哥给我的函数,效果就不一样了。

峰哥的代码是:

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;
}

可以把这段代码放在程序的某个头文件中,作为一个成员函数。别忘了包含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);

这样就可以正常显示了:

(0)

相关推荐

  • 在Visual Studio使用C++开发Metro应用

    Visual Studio 11 消费者预览版支持使用 C++ 创建 Metro 风格的应用程序,这对广大本地应用开发者来说是一个大消息.这里我们来创建一个非常简单的 Metro 应用. 启动 Visual Studio 并通过 Visual C++>Windows Metro Style>Blank Application 模板创建一个项目.  "Hello world" 打开 BlankPage.xaml 文件,滚动到代码底部并定位 Grid 元素,然后插入一个 Tex

  • Linux上搭建C/C++IDE开发环境

    文/张善友 Redhat linux上面没有提供Anjuta软件包,上面提供了一个Glade应用程序界面设计工具.Linux上面使用Anjuta和Glade以及Glademm软件包可以搭建一个linux下面进行C/C++软件开发的IDE环境,可以进行GTK+/Gnome的应用程序开发. 以前开发 Linux 程序时写出好的图形化用户界面比较难.在 GIMP 工具包 (GTK)诞生之后,这件事就变得比较容易了.当Damon Chaplin 写出 GLADE 这个用于在 GTK 环境下生成图形化用户

  • 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ VS2017亮点很多,包括模块化安装.启动速度加快(第一次启动加快50%以上).github插件.启动页完善.增强代码提示功能,等等,更多参考:https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes. Visual

  • 基于C++自动化编译工具的使用详解

    @echo off  title=HYTradingGateway自动化编译打包工具mode con cols=80 lines=40echo -------------------------------------------------------------echo 使用说明echo.                                                             echo HYTradingGateway自动化编译打包工具.修改echo 使用前提

  • 学习C++编程的必备软件

    1. 前言 这一课我们来做一些 C++ 开发前的准备工作. 2. 编程的必要工具 依你看,对编程来说,什么软件是必要的呢? 如果你认真学了上一课,那你至少可以说出一种吧. 对了,就是编译器.这个重要的程序可以把你的源代码(用高级语言如 C 语言写的指令)转换成电脑可以理解的二进制码(只包含 0 和 1 的,类似 01100110001111011101010... ). 上一课我们也提了一下,每种高级语言都有对应的编译器(当然对于 Python 这样的解释性语言,就不需要编译了),光是 C++

  • 在Visual Studio上构建C++的GUI框架wxWidgets的开发环境

    本文使用的Unicode+DLL+Debug的方式,因为不想最后生成的exe文件太大. 环境搭建步骤如下: 1.下载wxWidgets包: 登录wxWidgets的下载页面:http://www.wxwidgets.org/downloads 下载最新的Stable Release稳定版,我这里用旧的2.8.12版作演示. 2.将wxMSW-2.8.12.zip解压到D盘根目录下. 转到D:\wxMSW-2.8.12\build\msw目录,用VS2005打开wx.dsw,会有提示转换项目: 选

  • Visual Studio 2017正式版发布 亮点看这里

    Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等.无论使用哪种语言或平台,都能节省开发者在日常任务上花费的时间和精力. 此外,该版本还带来了一个新的轻量化和模块化的安装体验,可根据需要量身定制安装.多个增强功能汇集在一起,使 Visual Studio 2017 的启动速度比 Visual Studio 2015 快3倍,解决方案加载时间缩短 2

  • .NET Visual Studio 代码性能分析工具

    下面通过图文并茂的方式给大家介绍下,具体内容如下: 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和性能测试,从而大大简化程序员进行代码性能优化的过程.MSDN杂志2011年7月份曾发布主题为".NET代码分析工具和技术"的那一期,让广大程序员收获颇丰.四年过去之后,这些工具又进一步做出了很多改进,同时也出现了更多的选择.本文对当前主流

  • Visual Studio for Mac版 初体验

    你喜爱的 IDE,现在可用于 Mac.因为在 Visual Studio for Mac 之前,已经有了 Visual Studio Code for Mac,那时候我们还以为 Visual Studio Code 就是 Visual Studio 的跨平台版本,但事实微软并不是这样想的,Visual Studio Code 相对于 Visual Studio 还是太简化了,企业级的应用开发 Visual Studio Code 还是有些力不从心,所以 Visual Studio for Mac

  • 分享Visual Studio原生开发的10个调试技巧

    最近碰巧读了Ivan Shcherbakov写的一篇文章,<11个强大的Visual Studio调试小技巧>.这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧.我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧.(如果你是工作在托管代码下,调试器会有更多的特性,在CodeProject中有介绍它们的文章),下面是我的整理的一些技巧: 异常中断 | Break on Exception Watch窗口中的伪变量 |

  • .NET  Visual Studio 代码性能分析工具

    下面通过图文并茂的方式给大家介绍下,具体内容如下: 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和性能测试,从而大大简化程序员进行代码性能优化的过程.MSDN杂志2011年7月份曾发布主题为".NET代码分析工具和技术"的那一期,让广大程序员收获颇丰.四年过去之后,这些工具又进一步做出了很多改进,同时也出现了更多的选择.本文对当前主流

  • Visual Studio 2017安装使用教程

    "工欲善其事,必先利其器",学习一门语言,选择一款高效的IDE(集成开发环境)尤为重要,支持C++的IDE有很多,Visual Studio便是其中之一. Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.话不多说,进入正题. 一.下载 Visual Studio 打开Visual Studio 的官网下载链接

  • Visual Studio Code 配置C、C++ 文件debug调试环境的详细过程

    目录 vscodeC/C++ExtensionPack插件安装 vscodewindows端debug配置 windowMinGW环境安装 windows端C.CPP单文件debug调试 代码文件中文目录文件名,如何在window端正常调试 vscodeubuntu端debug配置 ubuntuC.CPP单文件调试 中文目录文件名,在ubuntu端正常调试 官方文档参考 大家好我是SLF,在午休的时候给嵌入式软件的同事,演示了一下如何用vscode调试应用端的CPP程序,他之前一直用的是Ultr

  • Visual Stduio 2010开发环境搭建教程

    Visual Studio是微软公司推出的开发环境.是目前最流行的Windows平台应用程序开发环境. Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了.Visual Studio 2010同时带来了 NET Framework 4.0.Microsoft Visual Studio 2010 CTP( Community Technology Preview--CTP),并且支持开发面向Windows 7的应用

随机推荐