SetWindowTextW表示设置的字符串是WCHAR (双字节字符 )
SetWindowTextA表示设置的字符串是CHAR (单字节字符 )
SetWindowText表示设置的字符串是自动匹配当前项目的字符环境是单字节还是双字节字符

#ifdef UNICODE

#define    SetWindowText      SetWindowTextW

#else

#define    SetWindowText      SetWindowTextA

#ENDIF          //! UNICODE

首先解释A和W的不同意义:

其实MFC中,凡是涉及字符串处理的API函数都有A和W两个版本

A结尾的表示使用ANSI编码:中文的Windows操作系统一般对应的就是GBK,GBK在内存里英文占用一个字节 、汉字两个字节。

W结尾的表示:

UTF-16版本---英文两个字节、汉字两个字节

UTF-32版本---英文四个字节、汉字四个字节

如果确定你的软件将来只需要英文或汉文字符,那就选择A版本的API,如果有可能要使用多国文字,那么最好使用W版本的API。

MFC中的源代码,其实实际上只存在SetWindowTextW和SetWindowTextA,如果你的整个项目字符集是UNICODE格式的字符集,那SetWindowText和SetWindowTextW其实就是一个东西,如果不是UNICODE那SetWindowText就和SetWindowTextA是一个东西。

函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。

  函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString);

  参数:

  hWnd:要改变文本内容的窗口或控件的句柄。

  lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。

  返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

  备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控件。然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。

  SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。

ANSI和Unicode到底是什么

简单地说:
ANSI是美国要家标准(我没有精确用词,只表示一下意思),每个数字、字母、标点符号都用一个字节表示,汉字用2个字节表示;
UNICODE是国际标准(我没有精确用词,只表示一下意思),每个数字、字母、标点符号、汉字都用2个字节表示;

ANSI是历史发展的中间产物。最终是要淘汰的,尽管我们现在的PC机默认还是ANSI,但它是为了兼容以前的ANSI,新的东西如手机基本上都用UNICODE了。

【转】SetWindowText 的用法的更多相关文章

  1. 转:SetWindowText 的用法

    SetWindowText   函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏).如果指定窗口是一个控件,则改变控件的文本内容.然而,SetWindowText函数不改变其他应用程序 ...

  2. VC++ 浅谈VS2010中CMFCToolBar的用法

    本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. Generate a Certificate Signing Request (CSR) in macOS Keychain Access

    macOS 10.14 (Mojave) 1. Open the Keychain Access application, located at /Applications/Utilities/Key ...

  2. http 1.1 状态码定义

    part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 10 Status Code Definitions ...

  3. Cassandra开发入门文档第五部分(使用场景)

    正确建模 开发人员在构建Cassandra数据库时犯的另一个主要错误是分区键的选择不佳.cassandra是分布式的.这意味着您需要有一种方法来跨节点分布数据.Cassandra通过散列每个表的主键( ...

  4. MySQL高效分页-mybatis插件PageHelper改进

    MySQL分页在表比较大的时候,分页就会出现性能问题,MySQL的分页逻辑如下:比如select * from user limit 100000,10 它是先执行select * from user ...

  5. spring boot的actuator

    actuator官方的介绍 Spring Boot includes a number of additional features to help you monitor and manage yo ...

  6. .NET Core开源Quartz.Net作业调度框架实战演练

    一.需求背景 人生苦短,我用.NET Core!作为一枚后端.NET开发人员,项目实践常遇到定时Job任务的工作,在Windows平台最容易想到的的思路Windows Service服务应用程序,而在 ...

  7. Mysql 添加用户并授所有权

    创建用户并授权GRANT ALL PRIVILEGES ON *.* TO 'caoxiaobo'@'%' IDENTIFIED BY 'Caoxiaobo0917!' WITH GRANT OPTI ...

  8. static binding/dynamic binding

    static binding/dynamic binding class Person { private void who() { System.out.println("Inside p ...

  9. python3 安装 pyinstaller 时报错的解决办法

    如上图所示,在安装的过程中发现是所关联的一个 future模块安装失败,庵后我有单独安装了一下这个future,发现还是失败 然后在网上寻找解决办法,最后找到了这个指令,pip install fut ...

  10. todolist 包含本地存储知识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...