Windows 程序设计学习笔记1
2011-11-29 11:41
381 查看
/*------------------------------------------------------------------ HelloMsg.c -- Displays "Hello, Windows 98!" in a message box (c) Charles Petzold, 1998 --------------------------------------------------------------------*/ #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0); return 0 ; }
几乎每一个使用C/C++编写的Windows程序在开头都会使用include引入"windows.h"头文件,WINDOWS.H是主要的含入文件,
它包含了其它Windows表头文件,这些表头文件的某些也包含了其它表头文件.这些表头文件中最重要的和最基本的是:
WINDEF.H 基本型态定义。
WINNT.H 支持Unicode的型态定义。
WINBASE.H Kernel函数。
WINUSER.H 使用者接口函数。
WINGDI.H 图形设备接口函数。
这些表头文件定义了Windows的所有数据型态、函数呼叫、数据结构和常数标识符,它们是Windows文件中的一个重要部分.
每一个C/C++程序都有一个程序入口(main函数),Windows程序的也有进入点:WinMain,该函数总是像这样出现:
int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)
WinMain在WINBASE.H中有如下声明:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd );
其中第三个参数在WINBASE.H中定义为LPSTR,示例中为PSTR.这两种数据型态都定义在WINNT.H中,作为指向字符串的指针.LP前缀代表「长指针」,这是16位Windows下的写法.
WinMain函数声明为返回一个int值.WINAPI标识符在WINDEF.H定义,语句如下:
#define WINAPI __stdcall
该语句指定了一个呼叫约定,包括如何生产机械码以在堆栈中放置函数呼叫的参数.许多Windows函数呼叫声明为WINAPI.
WinMain的第1个参数被称作「执行实体句柄」.在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字.在这种情况下,该句柄唯一地标识该程序,还需要它在其它Windows函数呼叫中作为参数.
在Windows的早期版本中,当同时运行同一程序多次时,便创建了该程序的「多个执行实体(multiple instances)」.同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源).程序通过检查hPrevInstance参数就能够确定自身的其它执行实体是否正在运行,然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域,在32位Windows版本中,该概念已被抛弃,故传给WinMain的第2个参数总是NULL(定义为0).
WinMain的第3个参数是用于执行程序的命令列,如某些Windows应用程序利用它在程序启动时将文件加载内存.
WinMain的第4个参数指出程序最初显示的方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中.
MessageBox函数用于显示短信息,虽然,MessageBox显示的小窗口不具有什么功能,实际上被认为是一个对话框.
MessageBox的第1个参数通常是窗口句柄.
第2个参数是在消息框主体中显示的字符串.
第3个参数是出现在消息框标题列上的字符串,在示例程序中,这些文字字符串的每一个都被封装在一个TEXT宏中.
MessageBox的第4个参数用于在对话框中显示按钮,它可以是在WINUSER.H中定义的一组以前缀MB_开始的常数的组合,有以下内容:
#define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L
如果在示例程序中将第4个参数设置为0,则仅显示「OK」按钮.可以使用OR(|)操作符号将上面显示的一个常数与代表内定按钮的常数组合:
#define MB_DEFBUTTON1 0x00000000L #define MB_DEFBUTTON2 0x00000100L #define MB_DEFBUTTON3 0x00000200L #define MB_DEFBUTTON4 0x00000300L
还可以使用一个常数指出消息框中图示的外观:
#define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L
这些图示中的某些有替代名称:
#define MB_ICONWARNING MB_ICONEXCLAMATION #define MB_ICONERROR MB_ICONHAND #define MB_ICONINFORMATION MB_ICONASTERISK #define MB_ICONSTOP MB_ICONHAND在示例程序中,MessageBox返回数值1,但更严格地说它返回IDOK,IDOK在WINUSER.H中定义,等于1。根据在消息框中显示的其它按钮,MessageBox函数还可返回IDYES、IDNO、IDCANCEL、IDABORT、
IDRETRY或IDIGNORE。
相关文章推荐
- windows程序设计学习笔记--动态链接库
- Windows程序设计学习笔记一——第一个windows窗口
- [学习笔记]Windows程序设计:第一章 起步
- Windows程序设计学习笔记--第一个Windows程序以及宽字符集(了解)
- Windows程序设计_Chap03_窗口与消息_学习笔记
- windows程序设计学习笔记-设备无关位图
- windows程序设计第二章学习笔记
- 《windows 程序设计》中的翻译错误----学习笔记
- windows程序设计学习笔记-多文档界面
- Windows 程序设计学习笔记(三):第一个窗口
- windows程序设计第一章学习笔记
- C# Windows 程序设计 学习笔记2 Paint事件
- windows程序设计学习笔记-设备相关位图
- Windows 程序设计学习笔记(一)
- 函数参数Windows程序设计_Chap01_起步_学习笔记
- Windows程序设计学习笔记一:第一个窗口
- windows程序设计学习笔记-图元文件
- Windows程序设计_Chap02_Unicode_学习笔记
- windows程序设计学习笔记-Unicode,绘图基础
- Windows环境下32位汇编语言程序设计第三版学习笔记之一