Windows Api是了解windows程序必不可少的一部分
Windows
以前编写的都是dos程序,Windows程序却更贴近windows.
Hello world
新建项目->win32->windows应用程序(空项目)
参数
int WINAPI WinMain()
1、#include <windows.h>
每个用C编写Windows程序的开头都应该包含,主要含入档案。
2、int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
程序的入口点,向main一样,只是Windows叫做WinMain。第一个参数代表执行实体代号,函数定义第三参数个是LPSTR(是16位windows下)。
MessageBox()
显示小视窗,实际上是一个对话框。
参数1:通常是视窗代号
参数2:讯息方块主体中显示的字符串
参数3:标题
参数4:按钮数量(如下图)
Unicode
宽字元
Win32程序中标准字元定义char c = 'A';
占一个字节,需要一个位的元组存储char *p
这里p占4个字节char a[] = "Hello!"
占七个字节(最后加一个0结束),需要七个位的元组存储
Windwos程序标准元定义typedef unsigned short wchar_t;
这里wchar_t与unsigned short int相同,都是16位元宽,也就是2字节wchar_t c = 'A';
这时候c=0x0041,虽然’A’是一个字节,但是前面是2字节,编译器会自动扩充,就是Unicode字母A,占2个字节,存储顺序0x41,0x00wchar_t *p = L'Hello!';
这里有个L(代表[long])。字符串需要14个位元(14个字节),指数p需要4个字节wchar_t a[] = L'Hello';
这里字符串需要14个位元
宽字元程式
char pc=”Hello!”;
len=strlen(pc);
这时len==6
wchar_t pw=”Hello!”;
len=strlen(pw);
这时len==1 ????
因为strlen()应该接受char类型的指标,但是却接受unsigned short类型,我们来看看为什么是1
0x0048 0x0065 0x006c 0x006c 0x006d 0x0021
48 00 64 00 6c 00 6c 00 6f 00 21 00
当strlen()遇见0,则表示字符结束。那么怎么办。这时候就出现了wcslen(宽字节长度)。
strlen()函数定义size_t __cdecl strlen(const char *);
wcslen()函数定义size_t __cdecl wcslen(const wchar_t *);
如果这时len=wcslen(pw)
这时len==6
扩展
strlen wcslen
printf wprintf
char TCHAR
L问题
如果定义了_UNICODE识别字,那么一个称作_T的巨集就定义如下
#define __T(x) L##x
_TEXT(“Hello!”)==L”Hello!”
如果没有定义_UNICODE
_TEXT(“Hello!”)==8字节
Windows函数呼叫
MessageBox的两个变形
MessageBoxA
MessageBoxW
上述而MessageBox也可以
Windows字符串函式
Windows定义的一组字符串函数式
printfint printf (const char * szFormat, ...) ;
sprintf()int sprintf (char * szBuffer, const char * szFormat, ...) ;
视窗和讯息
创建一个自己的视窗
呼叫CreateWindow,先要注册一个视窗类别。
上面函数至少呼叫了 18 个 Windows 函式。下面以它们在 HELLOWIN 中出现 的次序列出这些函式以及各自的简明描述:
来源:《Windows程序设计》(第五版)