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

最近因为工作的关系,要开始在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 也可能返回其他值

你可能感兴趣的:(C++,Win32,UI,windows,C语言)