在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++风格的数字->字符串 转换,不过现在来不及了 下回再讲

WPF在mxs里引用图片资源并释放的方法

最近在MXS里用WPF写了UI,图片资源都是在Xaml里写绝对路径,这样子不方便而且容易报错 下面这个方法可以在MXS里正确加载图片资源 这是UI ...

Maxscript面向对象编程技术之封装与继承

Oop 抽象的开始 提高代码维护性,扩展性,高效性 1、封装 2、继承 3、多肽 一、从代码中解读封装和继承 Struct Cat ( Public --公开接口 -- 初始化Cat...

使用Win32 API 实现MDI程序

http://www.codeproject.com/KB/winsdk/Sigma.aspx  使用Win32 API 实现MDI程序  介绍     这篇文章讲解了如何使用Win32...
  • dreamcs
  • dreamcs
  • 2011年07月15日 12:38
  • 2946

MFC 文件操作及C、C++、win32 API对文件操作的复习和CFileDialog的使用

C语言的文件系统是带缓冲的文件系统(fflush)。 注意以二进制文件和文本文件在读取上的区别(记住:对文件的操作写入方式与读取方式要保持一致)。 1、当按照文本方式向文件中写入数据时,一旦遇到“...

基于c++使用win32 api遍历文件夹

在做图像处理算法过程中,有时需要将算法应用于某个文件夹下的所有图片,然后对比查看处理效果。有时文件夹内还有子文件夹,这时就需要递归遍历当前文件夹,以将算法应用于所有图片。遍历文件夹程序网上可以找到一些...

win32程序连接和使用本地sqlite数据库(visual c++ 2008)

1.安装配置sqlite http://www.sqlite.org/download.html

WIN32 C++ API 程序控制COM口

  • 2017年08月25日 17:10
  • 6.62MB
  • 下载

Win32 API 实现系统托盘程序

托盘程序就是运行在Windows系统托盘的程序,就是在桌面右下角的显示区域的一个小图标。通常托盘程序带有几种功能:托盘菜单,托盘图标,气泡提示,托盘提示。例如QQ收到消息后,会在系统右下角显示闪动QQ...
  • cwqcwk1
  • cwqcwk1
  • 2013年11月05日 17:53
  • 3884

<Win32 API> 钩子程序的实现

原文地址:Win32环境下代码注入与API钩子的实现 1. 主要点 挂API钩子分为四步:1. 查找并打开宿主进程,2. 将注入体装入宿主进程中运行,3. 用伪装函数替换目标API,4. 执行伪装...

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

C#通过WIN32 API 获取外部程序sysListview的值   using System.Runtime.InteropServices; public const uint L...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在win32 api程序中:使用C++风格的字符串
举报原因:
原因补充:

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