Windows编程笔记(2)->窗口处理函数

窗口处理函数
//LRESULT : long
//UINT : unsigned int
//WPARAM : unsigned int
//LPARAM : long
//LPSTR : char*
//LPCWSTR : const wchar_t *
//LPCTSTR : const wchar_t * (Unicode)
//WORD : unsigned short
//DWORD : unsigned long

#include<Windows.h>
#include"resource.h"

//窗口处理函数
//第一个参数:当前窗口句柄
//第二个参数:消息类型
//第三个参数:附加信息/附加参数
//第四个参数:附加信息/附加参数

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
//创建一个窗口
//流程
//1.设计窗口类
/*
	typedef struct tagWNDCLASSW {
		UINT        style;
		WNDPROC     lpfnWndProc;
		int         cbClsExtra;
		int         cbWndExtra;
		HINSTANCE   hInstance;
		HICON       hIcon;
		HCURSOR     hCursor;
		HBRUSH      hbrBackground;
		LPCWSTR     lpszMenuName;
		LPCWSTR     lpszClassName;
	}

	WNDPROC  函数指针类型

	//WNDPROC		typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);

	*/
	//lpClassName
wchar_t szAppClassName[]=TEXT("我的windows程序");

WNDCLASS wc;
wc.style		=CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;					//窗口类的风格
wc.lpfnWndProc	=WindowProc;											//窗口回调函数/窗口处理函数 
wc.cbClsExtra	=0;														//窗口类的附加内存大小
wc.cbWndExtra	=0;														//窗口附加内存大小
wc.hInstance	=hInstance;												//当前应用程序实例句柄
wc.hIcon		=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));		//图标句柄,需要加载图标图片
wc.hCursor		=LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));	//光标句柄,需要加载光标图片
wc.hbrBackground=CreateSolidBrush(RGB(255,255,0));//红,绿,蓝 0->255	0:最暗, 255:最亮, RGB(0,0,0):黑色, RGB(255,255,255):白色
wc.lpszMenuName	=NULL;													//菜单名
wc.lpszClassName=szAppClassName;										//窗口类型名 Spy++

//2.注册窗口类
//ATOM
if(0==RegisterClass(&wc))
{
MessageBox(NULL,TEXT("此程序不能运行在windows NT平台"),TEXT("提示"),MB_OK);
return 0;
}

//3.创建窗口
//WS:Window style
HWND hWnd =CreateWindow(
        szAppClassName,															//窗口类型名
		TEXT("这是我的第一个Windows窗口程序"),									//窗口左上角标题
		WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU,	//窗口的风格
		200, 300,																//窗口左上角坐标
		800, 600,																//窗口的宽和高
		NULL,																	//父窗口句柄
		NULL,																	//菜单句柄
		hInstance,																//应用程序实例句柄
		NULL							//创建窗口的附加参数,WM_CREATE消息,lParam来接受这个参数
		);

if(hWnd==NULL)
{
MessageBox(NULL,TEXT("创建窗口失败"),TEXT("提示"),MB_OK);
return 0;
}

//4.显示窗口
//SW_SHOW:原来在什么位置,就在什么位置显示
//SW_SHOWMAXIMIZED:最大化显示
//SW_SHOWMINIMIZED:最小化显示
//SW_SHOWNORMAL:正常显示
//SW_HIDE:隐藏运行
ShowWindow(hWnd,SW_SHOW);

//5.更新窗口  //窗口显示的时候,重新绘制一下
UpdateWindow(hWnd);

//6.消息循环
/*typedef struct tagMSG {
		HWND        hwnd;			//消息发向窗口的窗口句柄
		UINT        message;		//消息编号
		WPARAM      wParam;			//附加信息
		LPARAM      lParam;			//附加信息
		DWORD       time;			//消息放入消息队列的时间
		POINT       pt;				//消息放入消息队列时鼠标坐标
	}*/ 
	//Windows程序都是通过消息机制驱动运行

	//GetMessage:什么时候返回FALSE 
	//当获取到WM_QUIT消息时,返回FALSE,退出循环,没有获取到这个消息,返回非0,不退出循环

MSG msg;
while(GetMessage(&msg,NULL,0,0))  //0
{
//将虚拟键消息转化为字符消息 
//一个按下消息+抬起消息=》字符消息,
TranslateMessage(&msg);
//将消息分发给窗口处理函数
DispatchMessage(&msg);
}
return 0;
}

//窗口处理函数
//Windows Message缩写
LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:   //窗口关闭消息
    DestroyWindow(hWnd);//销毁窗口, 干掉界面,不会发出WM_QUIT,会发出一个WM_DESTROY消息
    break;
 case WM_DESTROY:  //窗口销毁消息
     PostQuitMessage(0);  //发出WM_QUIT
     break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);  //交给操作系统默认处理
}

编写程序代码运行如图所示
编译程序如图所示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿雨落轻尘丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值