Windows 程序设计1、2章

简介:    windows.h 中包含了 许多其他的头文件   主要是 WINUSER.H     使用者界面               WINBASE.H      kernel函数                WINDEF.
 

 windows.h 中包含了 许多其他的头文件  

主要是 WINUSER.H     使用者界面

              WINBASE.H      kernel函数 

              WINDEF.H       一些类型的define 

               WINNT.H      支持 UNICODE形态定义 

               WINGDI.H    包含图形界面函数   

       应用程序的入口函数 

        int     WINAPI      WinMain     //WINAPI       #define   WINAPI   _stdcall  标准调用约定 很多语言都是用的这种调用约定

        (HINSTANCE hInstance,   //实例的句柄 用于唯一标示应用程序

        HINSTANCE hPrevInstance,  //先前实例的句柄在win 32 下为 0已经被摒弃

        LPSTR lpCmdLine,   //command line 

         int nShowCmd );     /窗体的显示方式

     UNICODE 是为了解决ASCII不能表示所有语言的问题  

    wchar_t        原型   typedef  wchar_t  unsigned  short  ;    //占2个字节也就是 16位   宽字   32位下

    wchar_t * p=L"DSAFAFD" ;     //L是long  告诉编译器使用每一个字符占2个字节  

 wchar_t c=L'p';                          //定义宽字节 字符 即使不加L那么编译器也默认将她设置为2个字节 

 wcslen    求宽字节字符串的长度 不包括 '\0' 

wprintf    是printf的宽字原版

对应就有wscanf   这个是再   WCHAR.H中定义的   

 

 

但是  有时候 我们 的程序需要 单字节 也需要双字节 那么 wchar_t和char 的  混合就混乱了 由于处理的函数 不用我们希望有一个可以同时处理他们的 类型

TCAR        如果定义了 _UNICODE 识别字那么就是   typedef  wchar_t   TCHAR    如果没定义的 typedef  char TCHAR       

具体看 TCHAR.H源文件       

#define _T(x)       __T(x)
#define _TEXT(x)    __T(x)  

在TCHAR.H中这样定义了  就是 说我们可以用   _T  __T  _TEXT中的任意一种  。  

对应求字符个数的函数 就是   _tcslen ()    

如果定义了 _UNICODE   那么就是   #define   _tcslen    wcslen      否则  #define  _tcslen  strlen     

如果要使用_UNICODE 识别那么 就在 Project  ->Setting->c/c++ Language -> Preprocessor Definition中加上 _UNICODE 那么 系统的 就会默认使用_UNICODE 识别类型

 

在 WINNT.H 中增加了新的 类型定义   CTYPE.H 中定义了 wchar_t   为unsigned int 

typedef  char  CHAR   ;

typedef  wchar_t  WCHAR   ;  

 

 

实际上 MessageBox这个函数 并不是真正的 消息框原型   

在WINUSER.H中我们找不到 MessageBox的函数定义  也就是说没有 MessageBox的函数进入点 但是 我们发现

有 MessageBoxA 和  MessageBoxW 这两个 函数 一个表示单字节 一个表示宽字     我们在使用时直观调用  MessageBox就行了 因为

#ifdef UNICODE
#define MessageBox  MessageBoxW   //如果定义了UNICODE 那么 就是用MessageBoxW  
#else
#define MessageBox  MessageBoxA
#endif // !UNICODE    非UNICODE  的时候调用的是MessageBoxA 

这样的好处是一旦定义了 UNICODE 那么全都是UNICODE 表示 MessageBoxW否则就是   MessageBoxA

 

 

还有 windows定义了一组与 C语言字符串处理函数相当的函数

ILength = lstrlen (pString) ;

pString = lstrcpy (pString1, pString2) ;

pString = lstrcpyn (pString1, pString2, iCount) ;

pString = lstrcat (pString1, pString2) ;

iComp = lstrcmp (pString1, pString2) ;

iComp = lstrcmpi (pString1, pString2) ;    

这些函数 其实和  TCHAR  一样的用法 如果定义了UNICODE  就是 那么这些函式将接受宽字串,否则只接受常规字串。 

 

windows中不可以使用  printf 但是可以使用sprintf进行格式化文本

int sprintf (char * szBuffer, const char * szFormat, ...)

{int iReturn ;va_list pArgs ;

va_start (pArgs, szFormat) ;

iReturn = vsprintf (szBuffer, szFormat, pArgs) ;

va_end (pArgs) ;

return iReturn ;

}

 

标准版 sprintf swprintf _stprintf
  我们可以对宽字 单字节的字符进行格式化 

 

 

 

 

目录
相关文章
|
1月前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
2月前
|
Windows
实现Windows程序的数据更新
实现Windows程序的数据更新
13 0
|
2月前
|
Windows
构建布局良好的Windows程序
构建布局良好的Windows程序
11 0
|
2月前
|
C# Windows
初识Windows程序
初识Windows程序
11 0
|
3月前
|
Java Linux Windows
windows实现自动部署jar包运行程序
windows实现自动部署jar包运行程序
50 0
|
1月前
|
编译器 C语言 C++
|
4天前
|
存储 安全 搜索推荐
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
|
9天前
|
Windows
Windows 程序自启动实现方法详解
Windows 程序自启动实现方法详解
25 0
|
5月前
|
移动开发
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
|
4月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
114 1

热门文章

最新文章