windows编程21-获取鼠标键盘消息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意如果要使用双击事件,需要在注册类中使用CS_DBLCLKS。下面是一个例子。

#include <windows.h>

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

int(*Pmyf)(int a, int b);

LRESULT CALLBACK  MywinPorc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
	wchar_t szName[] = L"Ty";
	WNDCLASS wnclass;
	wnclass.cbClsExtra = NULL;
	wnclass.cbWndExtra = NULL;
	wnclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wnclass.hCursor = LoadCursor(hInstance, IDC_ARROW);
	wnclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
	wnclass.hInstance = hInstance;
	wnclass.lpszClassName = szName;
	wnclass.lpszMenuName = NULL;
	//注意:如果需要窗口接收双击事件,一定要使用CS_DBLCLKS
	wnclass.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
	wnclass.lpfnWndProc = MywinPorc;

	//1.注册窗口
	RegisterClass(&wnclass);
	//2.创建窗口
	HWND hwnd = CreateWindow(szName, L"Ty", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 600, 400, NULL, NULL, hInstance, 0);
	//3.显示窗口
	ShowWindow(hwnd, SW_SHOW);
	//4.更新窗口
	UpdateWindow(hwnd);

	//5.消息循环
	MSG msg;
	while (GetMessage(&msg,NULL,0,0))
	{
		//6.翻译消息
		TranslateMessage(&msg);
		//7.分发消息
		DispatchMessage(&msg);
	}

	return 1;

}

LRESULT CALLBACK  MywinPorc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{

	switch (message)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_LBUTTONDOWN:
	{
		int x = LOWORD(lparam);
		int y = HIWORD(lparam);

		wchar_t str[24];
		wsprintf(str, L"(%d,%d)\n", x, y);
		OutputDebugString(str);
	}
		break;
	case WM_LBUTTONDBLCLK:
	{
		OutputDebugString(L"双击了鼠标【左】键\n");
		return 0;
	}
	case WM_RBUTTONDBLCLK:
	{
		OutputDebugString(L"双击了鼠标【右】键\n");
		return 0;
	}
	default:
		break;
	}
	
	return DefWindowProc(hwnd, message, wparam, lparam);
}

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述下面是一个测试,部分代码如下:

case WM_KEYDOWN:
	{
		wchar_t str[24] = { 0 };
		wsprintf(str, L"键盘按下:%X,%c\n", wparam, wparam);
		OutputDebugString(str);
		return 0;
	}
		break;
	case WM_CHAR:
	{
		wchar_t str[24] = { 0 };
		wsprintf(str, L"字符信息:%X,%c\n", wparam, wparam);
		OutputDebugString(str);
		return 0;
	}
		break;
	case WM_KEYUP:
	{

		wchar_t str[24] = { 0 };
		wsprintf(str, L"键盘弹起:%X,%c\n", wparam, wparam);
		OutputDebugString(str);
		return 0;
	}

结果:
CapsLock没有打开的情况:
在这里插入图片描述
CapsLock打开的情况:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发如雪-ty

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

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

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

打赏作者

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

抵扣说明:

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

余额充值