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. python之terminaltables

    from terminaltables import AsciiTable, DoubleTable, SingleTable from colorclass import Color, Window ...

  2. 各种转码(bytes、string、base64、numpy array、io、BufferedReader )

    bytes 与 string 之间互转 Python3 最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是 Unicode,由str类型表示,二进制数据则由 bytes 类型表示. ...

  3. WPF Button LinkButton 绑定多个值 Template

    效果如下: 代码如下: <Button Click="InventoryDetail_OnClick" Template="{StaticResource Inve ...

  4. echo的色彩处理

    在Shell脚本中,可以使用echo的-e选项使显示内容呈现出不同的颜色. 格式1:echo -e "\033[背景颜色代码;文字颜色代码m 输出的字符串 \033[0m" 格式2 ...

  5. 第一本docker书 学习笔记(一)

    Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...

  6. DNS与ARP协议

    DNS(domain name system) DNS的作用:将域名(如baidu.com)转换为IP地址 DNS的本质是:分层的DNS服务器实现的分布式数据库: 根DNS服务器 - com DNS服 ...

  7. angular4.x实现一个全选,反选,外加从下一页返回上一页,选中上一次的操作记录

    productMap:any = new Map<string, string>(); //定义一个map的数据模型 //只要操作这个checkbox 那么只管把数据全部勾起了就行了 刷新 ...

  8. Any Video Converter Pro for Mac注册码

    Any Video Converter Pro for Mac注册码:name:www.macmofo.comsn:000016-D84U8Q-8BN16B-WP2BV6-9RA73A-X7D4V3- ...

  9. 元素高度变化使用动画transition

    高度变化,使用transition,没有效果,可以使用max-height替换. 思路: 初始元素max-height:0; 不显示,父元素hover时,重新设置元素的max-height的值, 可以 ...

  10. 【NPDP笔记】第五章 工具与度量

      5.1 创意工具 Ideation 创意开发 创意工具 Scamper Substitute Combine Adapter Modify Put to another use Eliminate ...