MFC 窗体按钮的按键的实现和字符串的相关处理函数的问题

原创 2013年12月02日 14:37:31

Windows表头文件类型

正如您在第一章所看到的那样,一个Windows程序包括表头文件WINDOWS.H。该文件包括许多其它表头文件,包括WINDEF.H,该文件中有许多在Windows中使用的基本型态定义,而且它本身也包括WINNT.H。WINNT.H处理基本的Unicode支持。

WINNT.H的前面包含C的表头文件CTYPE.H,这是C的众多表头文件之一,包括wchar_t的定义。WINNT.H定义了新的数据型态,称作CHAR和WCHAR:

typedef char CHAR ; typedef wchar_t WCHAR ; // wc

当您需要定义8位字符或者16位字符时,推荐您在Windows程序中使用的数据型态是CHAR和WCHAR。WCHAR定义后面的注释是匈牙利标记法的建议:一个基于WCHAR数据型态的变量可在前面附加上字母wc以说明一个宽字符。

WINNT.H表头文件进而定义了可用做8位字符串指针的六种数据型态和四个可用做const8位字符串指针的数据型态。这里精选了表头文件中一些实用的说明数据型态语句:

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ; typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

前缀N和L表示「near」和「long」,指的是16位Windows中两种大小不同的指标。在Win32中near和long指标没有区别。

类似地,WINNT.H定义了六种可作为16位字符串指针的数据型态和四种可作为const 16位字符串指针的数据型态:

typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ; typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;

至此,我们有了数据型态CHAR(一个8位的char)和WCHAR(一个16位的wchar_t),以及指向CHAR和WCHAR的指标。与TCHAR.H一样,WINNT.H将TCHAR定义为一般的字符类型。如果定义了标识符UNICODE(没有底线),则TCHAR和指向TCHAR的指标就分别定义为WCHAR和指向WCHAR的指标;如果没有定义标识符UNICODE,则TCHAR和指向TCHAR的指标就分别定义为char和指向char的指标:

#ifdef UNICODE typedef WCHAR TCHAR, * PTCHAR ; typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ; typedef LPCWSTR LPCTSTR ; #else typedef char TCHAR, * PTCHAR ; typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ; typedef LPCSTR LPCTSTR ; #endif

如果已经在某个表头文件或者其它表头文件中定义了TCHAR数据型态,那么WINNT.H和WCHAR.H表头文件都能防止其重复定义。不过,无论何时在程序中使用其它表头文件时,都应在所有其它表头文件之前包含WINDOWS.H。

WINNT.H表头文件还定义了一个宏,该宏将L添加到字符串的第一个引号前。如果定义了UNICODE标识符,则一个称作__TEXT的宏定义如下:

#define __TEXT(quote) L##quote

如果没有定义标识符UNICODE,则像这样定义__TEXT宏:

#define __TEXT(quote) quote

此外, TEXT宏可这样定义:

#define TEXT(quote) __TEXT(quote)

这与TCHAR.H中定义_TEXT宏的方法一样,只是不必操心底线。我将在本书中使用这个宏的TEXT版本。

这些定义可使您在同一程序中混合使用ASCII和Unicode字符串,或者编写一个可被ASCII或Unicode编译的程序。如果您希望明确定义8位字符变量和字符串,请使用CHAR、PCHAR(或者其它),以及带引号的字符串。为明确地使用16位字符变量和字符串,请使用WCHAR、PWCHAR,并将L添加到引号前面。对于是8位还是16位取决于UNICODE标识符的定义的变量或字符串,要使用TCHAR、PTCHAR和TEXT宏。

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.   设按钮ID为ID_BTN_OK, 当前Dialog窗口.   实际上系统并不能区分按钮是真的按下了(如用鼠标...
  • blackboyofsnp
  • blackboyofsnp
  • 2008年11月25日 20:41
  • 20864

使用MFC 发送消息模拟按钮按下事件

有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应.    设按钮ID为ID_BTN_OK, 当前Dialog窗口.    实际上系统并不能区分按钮是真的...
  • u012782049
  • u012782049
  • 2014年01月16日 20:15
  • 3544

MFC中几种常用的字符串分割方法

本文总结了几种常用的MFC字符串分割的方法,以方便自己以后查阅,也希望能帮助到有需要帮助的人。 1、CString 自带的函数Tokenize 1 ...
  • xiaominggunchuqu
  • xiaominggunchuqu
  • 2016年01月05日 20:29
  • 4993

MFC控件之Button基本用法

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。 一、创建动态控件: 为了对照,我们先来看一下静态控件的创建。 放置静态控件时必须先建立一个容器,一般是对...
  • ghevinn
  • ghevinn
  • 2014年03月21日 11:23
  • 23219

字符串相关处理函数

1. strcpy: 2. strcat: 3. strcmp:
  • qqliyunpeng
  • qqliyunpeng
  • 2015年08月29日 20:50
  • 646

按键处理函数

  • 2017年08月23日 15:37
  • 10KB
  • 下载

AUX音频输入按键处理函数

  • 2013年03月26日 17:19
  • 5KB
  • 下载

【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)

在启动定时器后,就需要添加定时器的消息处理函数,基本的步骤就是:在VS中,用户界面设计右击打开Class Wizard, 切换到Message选项卡,然后找到WM_TIMER这个message, 双击...
  • u013035197
  • u013035197
  • 2014年02月18日 17:44
  • 1488

SQL Server字符串处理函数大全

  • 2014年07月09日 18:02
  • 37KB
  • 下载

常用字符串处理函数

  • 2013年08月29日 09:22
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 窗体按钮的按键的实现和字符串的相关处理函数的问题
举报原因:
原因补充:

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