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月前
|
安全 Ubuntu iOS开发
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
131 3
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
|
3月前
|
Ubuntu Linux Windows
如何在Ubuntu系统中安装Wine,借此来运行Windows程序
熟悉的登录画面出现,在Ubuntu系统中扫描登录微信程序。
|
3月前
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
177 0
|
4月前
|
Windows
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
141 2
|
5月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
187 4
|
6月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
145 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
9月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
162 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
8月前
|
Windows
Windows程序的数字签名证书怎么申请
Windows程序的数字签名证书申请流程包括:准备企业资料(营业执照、税务登记证等),提交申请表及企业资料。经过初审、实名认证和二审后,等待1-5个工作日审核结果。审核通过后,CA机构颁发证书并通过邮件或邮寄方式发送。收到证书后按指南安装并使用签名工具对程序进行数字签名,确保软件完整性和可信度。注意证书有效期、管理和兼容性问题。
|
8月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
557 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称