Windows程序设计(1)开始

图形化基于视窗的应用程序里,窗口就是屏幕的一块区域。每一个GUI应用程序都需要至少创建一个窗口,称为主窗口。

在使用visual studio时要记得改为多字节字符集

HWND窗口句柄(我目前理解的就是你想找的窗口对应的地址,在就对应到了该程序中去,该句柄唯一地标识该程序)

HWND hWnd=FindWindow(找窗口句柄)

SendMessage给句柄所指向的地方发送消息,例如关闭记事本消息,这个关闭并不是我们程序关闭的,而是我们向操作系统内核发送消息,操作系统调度关闭记事本。

 

int APIENTRY WinMain(HINSTANCE hInstance,//本模块的实例句柄

 HINSTANCE hPrevInstance,//Win16时代句柄

                       LPSTR lpCmdLine,//命令行参数

 int nCmdShow)//主窗口初始化的显示方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中。

 

Windows 消息驱动:创建窗口后,操作系统会不断地向应用程序发送消息,通知发生了什么事件,发送消息是通过调用程序中的一个函数,这个函数的参数可以描述Windows发送的消息。这个函数叫做窗口函数或者消息处理函数,这是一个自定义的回调函数(这个函数并不是自己主动发起的,而是操作系统内核调用的),回调函数在函数初始要记得声明。

LRESULT CALLBACK MainWndProc(HWND hWnd,//对应的是哪个窗体

  UINT message,//接收的消息,无符号的整型数,通过消息ID给窗口,例如鼠标键盘的消息

  WPARAM wparam, //消息的高字节

LPARAM lparam)//消息的低字节

 

 

显示一个窗体

  1. 注册窗口类RegisterClassEx

需要定义一个WNDCLASSEX类

SzClassName(每一个窗口除了拥有句柄,还有一个类名)

注册实例:

ATOM MyRegisterClass( HINSTANCE hInstance )

{

WNDCLASSEX wcex;//用于描述主窗口的参数填充WNDCLASSEX结构

wcex.cbSize = sizeof(wcex);//结构的大小

wcex.style = CS_HREDRAW | CS_VREDRAW;//指定如果大小改变就重画

wcex.lpfnWndProc = (WNDPROC) WndProc;//窗口函数指针

wcex.cbClsExtra = 0;//没有额外的类内存

wcex.cbWndExtra = 0;//没有额外的窗口内存

wcex.hInstance = hInstance;//实例句柄

wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );//使用预定义图标

wcex.hCursor = LoadCursor( NULL, IDC_ARROW );//使用预定义的光标

wcex.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );//使用白色画刷

wcex.lpszMenuName = NULL;//不指定菜单

wcex.lpszClassName = "My Class";//窗口类的名称

wcex.hIconSm = LoadIcon( NULL, IDI_WINLOGO );//没有类的小图标

return RegisterClassEx( &wcex );//注册这个窗口类

}

  1. 创建窗口

hWnd=CreatWindowEx()

  1. 在桌面显示窗口

ShowWindow(hWnd, nCmdShow);//显示该窗口,nCmdShow同上主函数表述

UpdateWindow(hWnd)//更新消息

  1. 进入无限的消息循环

如果是WM_QUIT消息,getmessage返回FALSE,整个的消息停止

回调函数,参数hWnd,对应到创建窗口的hWnd,窗口的类名和注册的窗口类中的数据联系在一起联系在了一起(wcex.lpfnWndProc),最终主函数更够和回调函数的hWnd唯一联系起来

回调函数中不处理的消息一定要记得交给操作系统做默认处理

你可能感兴趣的:(windows程序设计)