您的位置:首页 > 其它

《Windows程序设计》读书笔记一 起步

2016-06-05 22:31 183 查看
最近因为工作的关系,要开始在windows上开发桌面应用。虽然只是一些UI程序,但是不深刻了解windows的各种API在开发应用的过程中会遇到不少阻碍。

于是决定重拾windows API,由于MFC框架太老。除了进行旧代码维护以外已经很少使用了。所以暂时不考虑使用MFC,而是使用纯win32 API来进行开发。可能开发UI上效率会低于MFC,但是重点是为了搞清楚win32 api的应用。对于在windows上开发的程序员来说,学习经典的windows编程非常重要,就算你使用C#,QT甚至Java语言来开发windows程序。因为学些这些API不仅仅是能让你编写代码, 更重要的事能够让你了解windows操作系统的机制。

由于win32 api大多数使用c语言编写,所以与api接口部分将使用标准的C语法。应用框架使用C++面向对象来编写。使用的环境是Visual Studio Community 2015 + visual assistX

1.1 Windows环境

1.2 Windows编程选项

书中使用的是10多年前的VC++6.0 由于版本年代久远,所以使用了最新的Visual Studio Community 2015来进行编译。

1.3 你的第一个Windows程序

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, TEXT("Hello, Windows 7 x64 Service Pack 1"), TEXT("HelloMsg"), 0);
return 0;
}


1.3.3 头文件

windows.h中包含了其他若干非常重要的头文件

windef.h 基本数据类型定义

winnt.h 支持unicode的类型定义

winbase.h 内核函数

winuser.h 用户界面函数

wingdi.h 图形设备接口函数

WinMain() 是所有windows程序的入口申明与winbase.h

原形如下 windows

int
WINAPI
WinMain (
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd
);


在windef.h中有WINAPI的定义
#define WINAPI __stdcall

规定了一种函数调用约定,表明如何在生成的堆栈中放置函数调用参数的机器代码。绝大多数windows api调用都定义成WINAPI

在32位windows中,hPrevInstance总是定义为NULL

第三个参数表明程序的命令行参数。

第四个参数表明程序最初如何显示,正常,最大化或者最小化在任务栏等。

1.3.5 MessageBox函数

第一个暂略,第二个参数是显示的消息,第三个参数是消息框的标题栏。 TEXT宏是为了兼容unicode应用

第四个参数是一系列MB_ 打头的参数用来表示消息框显示哪种按钮,定义在winuser.h中

#define MB_OK 0x00000000L

#define MB_OKCANCEL 0x00000001L

#define MB_ABORTRETRYIGNORE 0x00000002L

#define MB_YESNOCANCEL 0x00000003L

#define MB_YESNO 0x00000004L

#define MB_RETRYCANCEL 0x00000005L

在该案例中MessageBox 返回ID_OK 1 也可能返回其他值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: