Unicode简介

Unicode是ASCII字符编码的一个扩展。Unicode用的是16位字符编码,而不是像ASCII那样的7位编码。

---------------------------------------------------------------------------------------------------------------------------------------------

C语言中宽字符是基于wchar_t数据类型的。

typedef unsigned short wchar_t;

wchar_t c = 'A';等同于wchar_t c = L'A';

---------------------------------------------------------------------------------------------------------------------------------------------

wchar_t str[1000] = {0};

wcscpy(str, L"Hello");
wcscpy(str, TEXT("Hello"));

C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:
char *strcpy(char *strDestination, const char *strSource);
wchar_t *wcscpy(wchar_t *strDestination, const wchar_t *strSource); wcscpy()即为strcpy()的宽字符版本,与_T类似的,Visual C++提供了类似的同名函数:

#ifdef UNICODE      
#define _tcscpy wcscpy 
#else     
#define _tcscpy strcpy 
#endif

_tcscpy
在编译时会根据条件被替换,
如果是 非UNICODE 工程,它就被替换为 strcpy
UNICODE 工程被替换为 wcscpy

宽字符的输出问题:

wchar_t str[] = L"qwe123";

C语言输出:wprintf(L"%s\n", str);

C++输出:wcout << str << endl;

相比如果输出汉字的话:

wchar_t str[] = L"哇哈哈";setlocale(LC_ALL, "");wcout << str << endl;wprintf(L"%s\n", str);

需要本地化函数输出。

charsetlocale(int category, const char* locale);

category:为locale分类,表达一种locale的领域方面,通常有下面这些预定义常量:LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME,其中 LC_ALL 表示所有其它locale分类的并集。
locale:为期望设定的locale名称字符串,在Linux/Unix环境下,通常以下面格式表示locale名称:language[_territory][.codeset][@modifier],language 为 ISO 639 中规定的语言代码,territory 为 ISO 3166 中规定的国家/地区代码,codeset 为字符集名称。

C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法。

locale.h是C程序设计语言标准函数库的一个头文件,声明了C语言本地化函数. 这些函数用于在处理多种自然语言的软件编程设计时,把程序调整到特定的区域设置. 这些区域设置影响到C语言标准库的输入/输出函数.

-----------------------------------------------------------------------------------------------------------------------------------------------------

在使用宽字符的时候,字符串的字符长度并没有改变,改变的只是字节的长度。

#include <iostream>
#include <cstdlib>
using namespace std;int main()
{wchar_t str[] = L"12345";cout << "sizeof(str) = " << sizeof(str) << endl;cout << "sizeof(wcslen) = " << wcslen(str) << endl;return 0;
}

输出:

sizeof(str) = 12
sizeof(wcslen) = 5
请按任意键继续. . .

-------------------------------------------------------------------------------------------------------------------------------------------------------
学习过程中,出现了MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

出现这个的原因是:

我接着使用了先前编辑windowsGUI程序使用的入口还是WinMain,而此时是W32控制台程序,没有进行转化。

解决方案见:http://blog.csdn.net/lgh1992314/article/details/8701358

MessageBox的使用:

VS2010下默认是UNICODE编码,所以进行MessageBox输出的时候得注意编码方式。

1、我们可以强制使用ANSI编码方式,即MessageBoxA。

#include <windows.h>
#include <stdio.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{char str[1024] = {0};sprintf(str, "%s","12345");MessageBoxA(NULL, str, str, 0);return 0;
}

2、使用UNICODE编码,注意user32.dll里并没有MessageBox的入口点,仅仅是简单的#define MessageBoxW MessageBox

#include <windows.h>
#include <stdio.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{wchar_t str[1024] = {0};wsprintf(str, L"%s",L"哇哈啊哈");MessageBox(NULL, str, str, 0);return 0;
}

-------------------------------------------------------------------------------------------------------------------------------------------

如何定义UNICODE标识符?

UNICODE标识符的定义要在所有源文件之上,当然包括windows.h,加上一句 #define UNICODE

--------------------------------------------------------------------------------------------------------------------------------------------

在windows程序中不能使用cin、cout、scanf等标准输入输出函数。

------------------------------------------------------------------------------------------------------------------------------

格式化的消息框-----显示视频显示器的宽度和高度。

#include <windows.h>
#include <stdio.h>
#include <tchar.h>int CDECL MessageBoxPrintf(TCHAR *szCaption, TCHAR *szFormat, ...)
{TCHAR szBuffer [1024];va_list pArgList;va_start(pArgList, szFormat);_vsntprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), szFormat, pArgList);va_end(pArgList);return MessageBox(NULL, LPWSTR(szBuffer), LPWSTR(szCaption), 0);
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR lpCmdLine, int iCmdShow)
{int cxScreen, cyScreen;cxScreen = GetSystemMetrics(SM_CXSCREEN);cyScreen = GetSystemMetrics(SM_CYSCREEN);MessageBoxPrintf(TEXT("Screen"), TEXT("The screen is %i pixels wide by %i pixels high."), cxScreen, cyScreen);
}

显示效果:

转载于:https://www.cnblogs.com/lgh1992314/archive/2013/03/20/5835161.html

《windows程序设计》第二章学习心得相关推荐

  1. wi ndows ap i,windows程序设计第二章Unicode简介.doc

    windows程序设计第二章Unicode简介.doc Unico?de简介 在第一章中,我已经预告?,C语言中在?Micro?soft Windo?ws程序设?计中扮演着?重要角色的?任何部分都?会 ...

  2. 201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得

    Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很 ...

  3. c语言编程区分负号与减号,C语言程序设计第二章.ppt

    C语言程序设计第二章 C语言编程习惯 (1) 一行只放一条语句. (2) 养成随时给程序加注释的习惯. (3) 程序的书写要有层次感,该缩进的一定要缩进. (4) 编写函数时,变量定义部分和函数的执行 ...

  4. 数据结构第二章学习总结

    数据结构第二章学习总结 在数据结构第二章,我们学习了线性表的两种结构顺序和链式结构,学习了他们的定义,不同,存储结构和逻辑结构,还有一些基本的操作. 在学习过程中,我发现了许多问题:①书上的大多数代码 ...

  5. Linux_《Linux命令行与shell脚本编程大全》第二章学习总结

    时间:2017年04月05日 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>(第三版 ...

  6. c语言程序设计第二章的答案,C语言程序设计第二章作业参考答案

    C语言程序设计第二章作业参考 <C语言程序设计>第2章作业 布置日期:2017-10-23 截止日期:2017-11-3 一.单选题(每小题4分,共100分) 1.以下说法中正确的是___ ...

  7. 统计学习方法 第一章 学习心得

    统计学习方法 第一章 学习心得 以下可能有不当之处,请各位朋友停步指正,先谢过各位. 上一帖子说道,统计学习方法的三要素: 模型.策略.算法. 模型:模型的假设空间 策略:模型的选择准则,即:定义最优 ...

  8. python程序设计第二章序列类型 题库及选解

    由于学校的python是笔试,所以找了份感觉比较好的题库刷了下其中前八章的填空和判断,附上选解.各章链接如下 python程序设计题库完整版 https://blog.csdn.net/lijia11 ...

  9. 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)

    模式对话框和非模式对话框的区别:(出自<MFC windows程序设计>第二版p370) 1.显示模式对话框需要调用CDialog::DoModal,而显示无模式对话框则要调用CDialo ...

最新文章

  1. NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中
  2. mobaxterm 传文件夹_如何使用MobaXterm上传文件到远程Linux系统-MobaXterm使用教程
  3. 4.1 什么是人脸识别-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. Raspberry Pi 软件源
  5. shape的简单用法
  6. 建立你第一个 Outlook Add-in
  7. 英特尔推出锐炬Xe MAX独立显卡 可提升AI及视频编码速度
  8. vmware虚机无法重启关机的强制处理办法
  9. 一道PHP面试题,求两个文件的相对路径
  10. dbstart $oracle_home,使用dbstart和dbshut命令启动和关闭数据库
  11. 用R和BioConductor进行基因芯片数据分析(三):计算median
  12. 【大数据】Azkaban学习笔记
  13. Linux Block Driver - 1
  14. Docker日志查看命令
  15. ubuntu软件商店提示has install-snap change in progress问题
  16. 生日倒生日计时html代码,一款非常精美实用的生日倒计时代码
  17. 柳如是,当得奇女子。
  18. (转载)一次Linux系统被攻击的分析过程
  19. Java-小写字母转换大写字母
  20. 获取手机的设备信息和唯一ID

热门文章

  1. 【Linux驱动】linux内核模块简介
  2. 【Android】Android模拟器无法上网问题
  3. jmap java opts_jmap --查看JVM内存使用详情
  4. c++如何打印一维数组首地址_C语言之二维数组和指针的结合
  5. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis
  6. 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数
  7. 什么是机器学习:一次权威定义之旅
  8. CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
  9. 微型计算机与接口技术考试题,微机原理与接口技术试题库2
  10. 爱拉托逊斯方法以及素数判断