1.4WinMain函数

WinMain函数是Windows程序的入口函数,与main函数一样,当WinMain函数结束返回时,Windows应用程序结束。

Win32程序实现创建一个窗口,过程:
1、WinMain函数的定义
2、创建一个窗口
3、进行消息循环
4、编写窗口过程函数

1.4.1WinMain函数的定义

int WINAPI WinMain(
  HINSTANCE hInstance,  //程序当前运行的实例的句柄,一个应用程序可       以有多个实例。
  HINSTANCE hPrevInstance,  // 当前实例前一个实例的句柄
  LPSTR lpCmdLine,      // 指定传递给应用程序的命令行参数
  int nCmdShow          // 窗口如何显示。最大化,最小化还是隐藏
);

1.4.2窗口的创建

创建一个完整的窗口的过程:
1、设计一个窗口类
2、注册窗口类
3、创建窗口
4、显示和更新窗口

设计一个窗口类:
窗口的特征主要由WNDCLASS结构体来定义的,只需要将要填充的部分填充完整就可以了。
typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;

第一个成员变量style指定这一类型窗口的样式。
CS_HREDRAW:当窗口水平方向宽度变化时,将重绘窗口。
CS_VREDRAW:当窗口垂直方向宽度变化时,将重绘窗口。
CS_NOCLOSE:窗口没有关闭按钮。
CS_DBLCLKS:窗口双击鼠标时,向窗口过程发送鼠标双击消息
若style=CS_HREDRAW|CS_VREDRAW,组合使用,在水平或垂直方向变化时重绘

lpfnWndProc:指向窗口过程函数
cbClsExtra:窗口类的附加内存,由窗口类所有窗口共享,一般为0
cbWndExtra:窗口附加内存,一般为0
hInstance:窗口过程的程序的实例句柄

hIcon:指定窗口类的图标句柄
资源通过标识符(ID)来标识的。菜单资源(IDM_XXX)、图标资源(IDI_XXX)、按钮资源(IDB_XXX)。
hCursor:指定窗口类的光标句柄
hbrBackground:指定窗口背景画刷句柄

lpszMenuName:菜单资源名,若设为NULL,表示没有菜单。
lpszClassName:窗口类的名字。

注册窗口类:
ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
参数为上面设计的窗口类WNDCLASS的对象。

创建窗口:

HWND CreateWindow(
  LPCTSTR lpClassName,  // WNDCLASS中的窗口类的名字
  LPCTSTR lpWindowName, // 窗口的名字
  DWORD dwStyle,        
  int x,                // 
  int y,                // 相对于窗口左上角的坐标
  int nWidth,           // 
  int nHeight,          // 相对于窗口左上角的宽度
  HWND hWndParent,      // 创建窗口父窗口句柄,子窗口必须具有        WS_CHILD样式
  HMENU hMenu,          //窗口菜单的句柄
  HANDLE hInstance,     // 窗口应用程序实例句柄(WinMain中)
  LPVOID lpParam        // 传入数据指针
);

dwStyle:创建窗口的样式,我们可以指定WS_OVERLAPPEDDWINDOW这一类型
#define WS_OVERLAPPEDDWINDOW(
WS_OVERLAPPED| //产生一个重叠的窗口
WS_CAPTION| //创建一个标题栏窗口
WS_SYSMENU| //创建一个在标题栏上带有系统菜单的窗口
WS_THICKFRAME| //创建一个可调边框的窗口
WS_MINIMIZEBOX| //创建一个具有最小化的窗口
WS_MAXIMIZEBOX //创建一个具有最小化的窗口)

显示和更新窗口
BOOL ShowWindow(
HWND hWnd, // 创建的窗口的句柄(CreateWindow)
int nCmdShow
);
第二个窗口指定窗口显示的状态:
SW_HIDE:隐藏窗口,激活其他窗口
SW_SHOW:还原窗口之前的尺寸和激活窗口
SW_SHOEMAXIMIZED:最大化显示
SW_SHOEMINIMIZED:最小化显示
SW_SHOENORMAL:显示初次窗口显示的窗口

BOOL UpdateWindow(
  HWND hWnd   // 创建的窗口的句柄(CreateWindow)
);
UpdateWindow函数将WM_PAINT消息直接发送给窗口过程函数进行处理,没有发送给消息队列。

发布了47 篇原创文章 · 获赞 3 · 访问量 872

猜你喜欢

转载自blog.csdn.net/qq_42148307/article/details/105173350
1.4
今日推荐