Windows------常用消息及消息附加参数

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//消息分为入队消息,不入队列消息
//不进队列消息,不进入getmessage
//wparam:按键的状态值
//lparam:鼠标状态
//return 0 系统都会给你处理一遍
//return 1 告诉系统,哥已经处理完了,滚蛋吧
	switch (uMsg)
	{
	case WM_PAINT://画图
	{
		//开启绘图
		PAINTSTRUCT paint;
		HDC hdc = BeginPaint(hwnd, &paint);
		//绘图
		Rectangle(hdc, 20, 20, 80, 80);
		wchar_t wz[255] = {L"你好,大帅比"};
		TextOut(hdc,100,100,wz,wcslen(wz));
		break;
	}
	case WM_CHAR:
	{
		/*wchar_t zfc[255] = { 0 };
		wsprintf(zfc, L"字符:%c",(char)wParam);
		SetWindowText(hwnd,zfc);
		break;*/
	}
	case WM_SYSKEYDOWN://系统按键
	{
		//switch (wParam)
		//{
		//case VK_SHIFT:
		//	MessageBox(hwnd,L"SHIFT",L"TIP",MB_OK);
		//	break;
		//default:
		//	break;
		//}
	}
	case WM_KEYDOWN://案件按下
	{
		//switch (wParam)
		//{
		//case VK_RETURN:
		//	MessageBox(hwnd,L"回车键",L"tips",MB_OK);
		//	break;
		//case VK_CONTROL:
		//	MessageBox(hwnd, L"ctrl键", L"tips", MB_OK);
		//	break;
		//default:
		//	break;
		//}
		//break;
 
	}
	case WM_MOUSEMOVE://鼠标移动实时显示
	{
		/*wchar_t text[100] = L"你好,大帅比";
		wchar_t text1[100] = { 0 };
		int x = LOWORD(lParam);
		int y = HIWORD(lParam);
		wsprintf(text1, L"x的坐标: %d\t y的坐标: %d", x, y);
		if ((wParam & MK_CONTROL))
		{
			wcscat(text, L"你按下了ctrl键");
		}
		if ((wParam & MK_SHIFT))
		{
			wcscat(text, L"你按下了shift键");
		}
		if ((wParam & MK_LBUTTON))
		{
			wcscat(text, L"你按下了鼠标左键");
		}
		if ((wParam & MK_RBUTTON))
		{
			wcscat(text, L"你按下了鼠标右键");
		}
		SetWindowText(hwnd, text1);*/
		//MessageBox();
		break;
	}
	case WM_LBUTTONDOWN: //鼠标左键按下
	{

		//wchar_t text[100] = L"你好,大帅比";
		//wchar_t text1[100] = {0};
		//int x = LOWORD(lParam);
		//int y = HIWORD(lParam);
		//wsprintf(text1, L"x的坐标: %d\t y的坐标: %d", x, y);
		//if ((wParam & MK_CONTROL))
		//{
		//	wcscat(text,L"你按下了ctrl键");
		//}
		//if ((wParam & MK_SHIFT))
		//{
		//	wcscat(text, L"你按下了shift键");
		//}
		//if ((wParam & MK_LBUTTON))
		//{
		//	wcscat(text, L"你按下了鼠标左键");
		//}
		//if ((wParam & MK_RBUTTON))
		//{
		//	wcscat(text, L"你按下了鼠标右键");
		//}
		//SetWindowText(hwnd,text1);
	 //     //MessageBox();
		//break;
	}
	case WM_CREATE: //窗口客户区创建消息,窗口已经创建好了,只不过还没有显示出来
		//MessageBox(hwnd,L"要创建窗口了昂",L"SWEET TIPS",MB_OK);
		//SetWindowText(hwnd,L"我是大帅比");
        SetTimer(hwnd,TIME_ID,1000,NULL);
		break;
	case WM_CLOSE://关闭程序
	{
		if (IDYES == MessageBox(NULL, L"点了关闭按钮", L"提示", MB_OK))
		{
			DestroyWindow(hwnd);//销毁窗口
			break;
		}
		else
		{
			DestroyWindow(hwnd);
			break;
			//ShowWindow(hwnd, SW_MINIMIZE);
			//return 0;//告诉系统,哥已经整过了,你不用在处理了
		}
		break;
	}
    //在create里开启一个定时器
    case WM_TIMER:
	{
		int timeid = wparam;
		switch (timeid)
		{
		case TIME_ID:
			time_t tt;
			time(&tt);
			tm* t;
			t = localtime(&tt);
			wchar_t timesz[256];
			wsprintf(timesz, L"当前时间:%d年%d月%d日%d时%d分%d秒", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
			SetWindowText(hwnd,timesz);
	break;
		default:
			break;
		}
		break;

	}
		
	case WM_DESTROY://窗口销毁消息
		PostQuitMessage(0);//发出退出消息 任务管理器进程也没了,不然会一直在
		break;
	}
	return  DefWindowProc(hwnd,uMsg,wParam,lParam);//操作系统默认处理消息的函数
}

自定义消息:自定义的消息,要在wm_user 以后的编号,这样才是属于用户自定义的消息。

那么如何触发呢?好问题!当然是用sendmessage 和postmessage 来触发啦!

SendMessage(hwnd,WM_TEXT,10,10);

下面是系统定义的消息

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值