zoukankan      html  css  js  c++  java
  • WinMain与wWinMain,win32的字符集问题

    刚接触win32开发的会发现,用vs新建一个win32项目默认代码里面的入口函数并不是WinMain而是_tWinMain或者wWinMain,这些都有什么区别呢?

    WinMain对应的是多字节字符集(ANSI),wWinMain对应Unicode字符集。_tWinMain是tchar.h文件里面定义的:

    #ifdef _UNICODE
    #define _tWinMain wWinMain
    #else
    #define _tWinMain WinMain
    #endif

    编译时当字符集为ANSI时就同于WinMain,字符集为Unicode时同于wWinMain。

    要更改字符集的话,在vs里面点 项目->项目属性

    windows api很多函数都分为两个版本,比如CreateWindow的定义如下:

    #ifdef UNICODE
    #define CreateWindow  CreateWindowW
    #else
    #define CreateWindow  CreateWindowA
    #endif

    那么,什么时候该用Unicode字符集,什么时候该用多字节字符集呢?

    其实并不是程序中有中文时就必须用Unicode字符集,当windows系统语言为中文时,不管你选择哪个字符集都是可以正常显示中文的,但是系统语言不为中文时就会出现乱码了。所以如果你的软件需要适应多语言的windows系统的话就得用Unicode字符集。

    另外需要说明的是,当字符集为Unicode时,向api函数传递的一个字符串的时候应该将该字符串转换为Unicode编码的,可用L转换:

    CreateWindow(wndClass, L"这是窗口标题", ......);

  • 相关阅读:
    [转载]openerp 6.0.2库存业务
    [转载]OPENERP 6.0.2中的财务概念
    负载均衡
    SQL Server高可用性部署实施 SQL server 群集
    在苹果lion中安装xcode3系列版本
    MacBook 以及 XCode 使用小结
    C++必知的几个知识点
    最新 xcode 4.2 ios 5.0无证书发布ipa文件
    负载参考
    SQLSERVER 2005 表分区说明
  • 原文地址:https://www.cnblogs.com/ostin/p/9193282.html
Copyright © 2011-2022 走看看