Window中数据类型
来源:互联网 发布:添加用户 linux 编辑:程序博客网 时间:2024/05/24 06:34
Integer types
Boolean Type
BOOL 这里是整形和C++中的bool不同
if (result)//正确
if(result==TRUE)//错误
Pointer Types
Windows defines many data types of the form pointer-to-X. These usually have the prefix P- or LP- in the name. For example, LPRECT is a pointer to a RECT, where RECT is a structure that describes a rectangle. The following variable declarations are equivalent.
Historically, P stands for "pointer" and LP stands for "long pointer". Long pointers (also called far pointers) are a holdover from 16-bit Windows, when they were needed to address memory ranges outside the current segment. The LP prefix was preserved to make it easier to port 16-bit code to 32-bit Windows. Today there is no distinction — a pointer is a pointer.
Pointer Precision Types
The following data types are always the size of a pointer — that is, 32 bits wide in 32-bit applications, and 64 bits wide in 64-bit applications. The size is determined at compile time. When a 32-bit application runs on 64-bit Windows, these data types are still 4 bytes wide. (A 64-bit application cannot run on 32-bit Windows, so the reverse situation does not occur.)
- DWORD_PTR
- INT_PTR
- LONG_PTR
- ULONG_PTR
- UINT_PTR
These types are used in situations where an integer might be cast to a pointer. They are also used to define variables for pointer arithmetic and to define loop counters that iterate over the full range of bytes in memory buffers. More generally, they appear in places where an existing 32-bit value was expanded to 64 bits on 64-bit Windows.
Hungarian Notation
匈牙利命名,类型+变量名
如DWORD 类型可以命名如下dwVar
WORD命名wVar
Strings
Windows natively supports Unicode strings for UI elements, file names, and so forth. Unicode is the preferred character encoding, because it supports all character sets and languages. Windows represents Unicode characters using UTF-16 encoding, in which each character is encoded as a 16-bit value. UTF-16 characters are called wide characters, to distinguish them from 8-bit ANSI characters. The Visual C++ compiler supports the built-in data typewchar_t for wide characters. The header file WinNT.h also defines the followingtypedef.
typedef wchar_t WCHAR;
You will see both versions in MSDN example code. To declare a wide-character literal or a wide-character string literal, putL before the literal.
wchar_t a = L'a';wchar_t *str = L"hello";
Here are some other string-related typedefs that you will see:
char
PSTR or LPSTRchar*
PCSTR or LPCSTRconst char*
PWSTR or LPWSTRwchar_t*
PCWSTR or LPCWSTRconst wchar_t*
Unicode and ANSI Functions
When Microsoft introduced Unicode support to Windows, it eased the transition by providing two parallel sets of APIs, one for ANSI strings and the other for Unicode strings. For example, there are two functions to set the text of a window's title bar:
- SetWindowTextA takes an ANSI string.
- SetWindowTextW takes a Unicode string.
Internally, the ANSI version translates the string to Unicode. The Windows headers also define a macro that resolves to the Unicode version when the preprocessor symbolUNICODE
is defined or the ANSI version otherwise.
#ifdef UNICODE#define SetWindowText SetWindowTextW#else#define SetWindowText SetWindowTextA#endif
In MSDN, the function is documented under the name SetWindowText, even though that is really the macro name, not the actual function name.
New applications should always call the Unicode versions. Many world languages require Unicode. If you use ANSI strings, it will be impossible to localize your application. The ANSI versions are also less efficient, because the operating system must convert the ANSI strings to Unicode at run time. Depending on your preference, you can call the Unicode functions explicitly, such asSetWindowTextW, or use the macros. The example code on MSDN typically calls the macros, but the two forms are exactly equivalent. Most newer APIs in Windows have just a Unicode version, with no corresponding ANSI version.
TCHARs
Back when applications needed to support both Windows NT as well as Windows 95, Windows 98, and Windows Me, it was useful to compile the same code for either ANSI or Unicode strings, depending on the target platform. To this end, the Windows SDK provides macros that map strings to Unicode or ANSI, depending on the platform.
wchar_t
char
TEXT("x")L"x"
"x"
For example, the following code:
SetWindowText(TEXT("My Application"));
resolves to one of the following:
SetWindowTextW(L"My Application"); // Unicode function with wide-character string.SetWindowTextA("My Application"); // ANSI function.
The TEXT and TCHAR macros are less useful today, because all applications should use Unicode. However, you might see them in older code and in some of the MSDN code examples.
The headers for the Microsoft C run-time libraries define a similar set of macros. For example,_tcslen resolves to strlen if _UNICODE
is undefined; otherwise it resolves towcslen, which is the wide-character version of strlen.
#ifdef _UNICODE#define _tcslen wcslen#else#define _tcslen strlen#endif
Be careful: Some headers use the preprocessor symbol UNICODE
, others use_UNICODE
with an underscore prefix. Always define both symbols. Visual C++ sets them both by default when you create a new project.
- Window中数据类型
- window 编程数据类型
- window编程数据类型
- Window API (一)数据类型
- Window编程常见数据类型及转换
- javascript中window对象
- dom 中 window属性
- window中常见方法
- javascript中window.documen
- js中 window[Name]
- js中window.onload
- js中WINDOW对象
- js中Window跟window的区别
- Js中window.parent ,window.top,window.self详解
- java中数据类型转换
- ASP中数据类型转换
- java中数据类型转换
- C#中数据类型学习
- 提高关键词排名的28个SEO技巧
- 全排列
- 唯有兴趣才是王道
- 媒体播放器三大底层架构
- dsa 位查询
- Window中数据类型
- linux建立简单服务器(TCP)
- Android中shape的使用
- VLC视频播放的基本原理
- 关于索引删除的策略IndexDeletionPolicy
- mongodb集群读写延迟的问题
- 关于192.168.0.0/24与CIDR
- Flex项目源文件文件夹改名后,加载要修改的地方()
- camera