我对windows编程基础的理解

 

 四月份和五月份就要学习MFC,并要按照孙鑫的视频来学习,但是在学习过程中总是对于windows编程基础不能理解。终于在7月15号重新看了遍C++基础,又在今天重新看windows编程基础,终于在下午看明白了。原来如此简单,让人情何以堪啊。

我的总结:

在创建windows应用程序时,有几个步骤

(1)窗口类的定义(对于WNDCLASS的定义通过对此结构进行赋值来实现)

相当于定义了一个窗口的模板。

(2)注册窗口类(通过RegisterClass来实现,要进行检测)

使用窗口类之前必须先注册。

(3)创建窗口(通过CreateWindow来实现)

相当于以上面步骤1定义的窗口模板来创建一个窗口

(4)显示窗口(通过ShowWindow来实现)

  (5) 更新窗口(通过UpdateWindow来实现)

(6)消息循环(通过GetMessage及DispatchMessage来实现)

这儿牵涉到windows的消息机制,我们来简单描述一下:

windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中进一步处理。

在下面程序中的窗口过程函数时WndProc。

#include "windows.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	HWND hwnd;		//窗口句柄
	MSG msg;	//消息

	WNDCLASS wndclass;	//窗口类
	/*窗口类的定义是通过给窗口类数据结构wndclass赋值完成*/
	wndclass.style = CS_HREDRAW|CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;	//	定义窗口处理函数
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hInstance = hInstance; //当前实例句柄,不能为空
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
	wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = "HELLO win";
	/*窗口类的注册,windows系统本身提供部分预定义的窗口类。窗口类必须先注册再使用*/
	if (!RegisterClass(&wndclass))
	{
		MessageBox(NULL,"窗口注册失败!","HELLO win",0);
		return 0;
	}
	/*创建一个窗口,通过CreateWindow()实现*/
	hwnd = CreateWindow("HELLO win",
		"我的窗口", 
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL
		);

	/*显示一个窗口,通过ShowWindow()实现*/
	ShowWindow(hwnd,SW_SHOWMAXIMIZED);
	UpdateWindow(hwnd); //更新窗口,包括窗口的客户区

	//进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环
	while (GetMessage(&msg,NULL,0,0))
	{
	//	TranslateMessage(&msg);	//	转换某些键盘消息
		DispatchMessage(&msg);	//将消息发送给窗口过程,这里是wndProc
	}
	return msg.wParam;
}

// 窗口过程函数的定义
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case  WM_CREATE ://窗口创建产生的消息
			return 0; 
		break;
	case WM_LBUTTONDOWN: 
		MessageBox(NULL,"你好,我的visual C++世界","问候",0);
		return 0;
		break;
	case WM_RBUTTONDOWN: 
		MessageBox(NULL,"fuck","问候",0);
		return 0;
		break;
	case WM_DESTROY: 
		PostQuitMessage(0);
		return 0;
	    break;
	}
	return DefWindowProc(hwnd,message,wParam,lParam);//执行默认的消息处理
}


 

你可能感兴趣的:(我对windows编程基础的理解)