Windows编程学习

1、基础

Windows 运作机制的核心是动态链接的概念,Windows提供应用程序丰富的可呼叫函数,这些函数采用Dynamic Linking LibraryDLL)的方式撰写,是具有.dll.exe为扩展名的文件。

早期的Windows主要部分仅通过三个动态链接库实现,分别为KernelUserGDI,大多数windows程序产生的函数呼叫仍可对应到这三个模块。Kernel处理传统上认为操作系统的核心任务,包括内存管理、文件I/O和多任务管理;User指使用者接口,实现所有窗口的运作机制;GDI(Graphics Device Interface)指图像设备接口,允许程序在屏幕和打印机上显示文字和图形。

APIApplication Programming Interface,应用程序编程接口)是一些预先定义的函数,API函数包含在位于系统目录下的DLL文件中。

 

2、表头文件

WINDOWS.H是主要的包含文件,最基本的是:

WINDEF.H 基本型态定义

WINNT.H 支持Unicode的型态定义

WINBASE.H kernel函数

WINUSER.H 使用者接口函数

WINGDI.H 图形设备接口函数

 

3、程序进入点

   Windows 程序的进入点是WinMain,定义为:

      Int WINAPI WinMainHINSTABCE hInstance,HINSTABCE  hPreInstance, PSTR szCmdLine , int iCmdshow

其中,前缀i 表示intsz表示「以零结束的字符串」,WinMain返回一个int值,WINAPI标识符在WINDEF.H中定义,内容如下:

#define WINAPI _stdcall

该语句指定了一个呼叫约定,包括如何生产机械码以在堆栈中放置函数呼叫的参数。此外,cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。

HINSTABCE 表示应用程序的句柄,hWnd,是指窗口句柄,通过该句柄可以操作窗口资源。

 

 

4Unicode字符集

Unicode是统一的16位系统,可以表示65,536个字符,在Unicode中,没有单单使用8位数值的意义存在。而在双字节字符集中可处理8位数值,而某些字节则需要和另一个字节共同定义一个字符。

C中的宽字符基于wchar_t数据型态,在表头文件WCHAR.H中定义如下:

Typedef unsigned short wchar_t;

1)定义指向宽字符串的指针: wchar_t *p=L”Hello!”;

其中,第一个引号前面的大写字母L(代表「long」)。将告诉编译器该字符串按宽字符保存-即每个字符占用2个字节。通常,指针变量p要占用4个字节,而字符串变量需要14个字节-每个字符需要2个字节,末尾的0还需要2个字节。

2)也可以定义: wchar_t c = L'A' ;

在此情况中,通常L是不必要的,C编译器会对该字符进行扩充,使它成为宽字符。

TCHAR.H定义了一个新的数据型态TCHAR

  #ifdef  _UNICODE

       typedef wchar_t TCHAR;  

#else  

        typedef char  TCHAR

    #endif

_T()会根据编译条件的设置,选择不同的编码格式。

_T("")是一个宏,定义于tchar.h下。

    #define _T(x) _ _T(x)

    #ifdef  _UNICODE

       #define _ _T(x) L ## x  (分析:  ##把两个符号连起来,用来连接两个前后两个参数,把它们变成一个字符串 ,x前添加字符L) 

 

 

#else  

       #define _ _T(x)      x

    #endif

 

其他相关定义:

LPSTR 指向CHAR 型字符串的指针 char* ANSI

LPCSTR 指向CHAR 型字符串常量的指针 const char* ANSI

LPWSTR 指向WCHAR 型字符串的指针 wchar_t* UNICODE

LPCWSTR  指向WCHAR 型字符串常量的指针 const wchat_t* UNICODE

LPTSTR UNICODE 环境下==LPWSTR, UNICODE 环境下==LPSTR

LPCTSTR UNICODE 环境下==LPCWSTR, UNICODE 环境下==LPCSTR

相关宏定义

#ifdef UNICODE

typedef LPWSTR LPTSTR ;

typedef LPCWSTR LPCTSTR ;

#else

typedef LPSTR LPTSTR ;

typedef LPCSTR LPCTSTR ;

#endif

类型名称定义说明

L: long 为与之前16 位系统兼容,32 位系统中无意义

P: 即指针

C: const

STR: 即字符串

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值