在win32 api程序中:使用C++风格的字符串

转载 2006年06月15日 11:31:00

        初学win32 api程序设计的人,通常对于C语言的字符串和数字转换感到比较头痛。尤其像我这样只学过C++,却不谙C语言的标准库的人,使用起char*和atoi()来实在是如履薄冰

所以我总琢磨着在api程序里用上C++标准库里的string。经过一番折腾发现还是可以的。

以下进入正题:

首先我们知道windows为了解决unicode的问题,定义了一个TCHAR的typedef,会根据是否使用unicode来定义成char 或者 wchar_t。所以如果我们直接使用STL预定义的string类型的话就会有问题,因为string里保存的是char。

所以我们必须使用以下形式来定义一个用于api程序的字符串:

basic_string<TCHAR> str;
这样str里保存的字符也会根据unicode的定义与否而变为相应的char或wchar_t。

我们来看一个在TextOut中使用的例子:

TextOut(hWnd,0,0,str.c_str(),str.length());

因为TextOut函数还是需要一个TCHAR* 类型的参数,所以我们要调用str的c_str()成员函数来获得一个C风格的字符串。

使用basic_string的最大好处是你可以任意拷贝、合并、截取字符串而不需要使用strcpy之类函数的unicode兼容性问题。

另外一个重大的好处是我们还可以从而抛弃atoi(),而转投C++风格的数字->字符串 转换,不过现在来不及了 下回再讲

相关文章推荐

使用Win32 API 实现MDI程序

http://www.codeproject.com/KB/winsdk/Sigma.aspx  使用Win32 API 实现MDI程序  介绍     这篇文章讲解了如何使用Win32...

WIN32 C++ API 程序控制COM口

  • 2017-08-25 17:10
  • 6.62MB
  • 下载

windows程序设计 win32 API 获取系统内存信息 GlobalMemoryStatus 和 GlobalMemoryStatusEx

原文地址:http://www.cnblogs.com/llz5023/archive/2012/12/30/2839776.html 1、获取系统内存信息有2个api,分别是Glo...

C#通过WIN32 API 获取外部程序sysListview的值和TreeView的值

C#通过WIN32 API 获取外部程序sysListview的值   using System.Runtime.InteropServices; public const uint L...

图解C# 调用Win32 API 示例程序

先上代码;相关函数不解释;网上比较容易查到; using System; using System.Collections.Generic; using System.ComponentModel; ...

Win32 API 实现系统托盘程序

托盘程序就是运行在系统托盘区域的程序,显示为桌面右下角显示区域的一个小图标。通常托盘程序带有几种功能:托盘菜单,托盘图标,气泡提示,托盘提示。例如QQ收到消息后,会在系统右下角显示闪动QQ图标。 主...

C#+Win32 API程序控制鼠标的操作 解脱烦重的鼠标繁复操作

命名空间:using System.Runtime.InteropServices; 在程序中添加:         [DllImport("User32")]public e...

win32 API &winsock & c++架构实现仿QQ聊天室

由于时间紧迫,我决定学习opengl的同时学习winsock,看了两个星期的windows socket编程,发现动手比看书效果好啊,于是,我决定写一个QQ聊天室的小程序,仿照书上的服务器端和客户端代...

《C++字符串完全指南——第一部分:win32 字符编码》

《C++字符串完全指南--第一部分:win32 字符编码》     原作者:Michael Dun       译    者:Dingqiao W...

C++字符串完全指引之一 —— Win32 字符编码

引言   毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏。你也许正在盯着显示器发愁。本指引将总结引进各种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)