1、按键操作
WM_KEYDOWN: 按键按下 判断按下的是哪个按键
按键按下消息 响应主键值
按键的值->虚拟键值 存放wParam
虚拟键值,在ASCII码表中有的值就不再额外设定虚拟键值,依照ASCII码表,不存在的才有虚拟键值
虚拟键值开头VK
WM_KEYUP: 按键抬起
case WM_KEYDOWN://不响应上档键,只响应大写
switch (wParam)
{
case VK_LEFT://判断是否按下左键,是的则弹出对话框
MessageBox(0, _T("左键"), 0, 0);
break;
case VK_RIGHT:://判断是否按下右键,是的则弹出对话框
MessageBox(0, _T("右键"), 0, 0);
break;
case VK_SPACE:://判断是否按下空格键,是的则弹出对话框
MessageBox(0, _T("空格"), 0, 0);
break;
case VK_CONTROL:://判断是否按下CTRL键,是的则弹出对话框
MessageBox(0, _T("CTRL"), 0, 0);
break;
case VK_SHIFT:://判断是否按下SHIFT键,是的则弹出对话框
MessageBox(0, _T("SHIFT"), 0, 0);
break;
}
break;
case WM_KEYUP://判断按键是否抬起这里只是作为一个判断条件
break;
WM_CHAR 字符消息 可以响应大小字母及上档键 字符消息的字符内容同样放在wParam里面
case WM_CHAR:
switch (wParam)
{
case 'a'://按下A键会弹出一个对话框中显示a
MessageBox(0, _T("a"), 0, 0);
break;
case 'B'://按下B键会弹出一个对话框中显示b
MessageBox(0, _T("B"), 0, 0);
break;
case '*'://按下'*'上档键(shift+8)会弹出对话框显示*
MessageBox(0, _T("*"), 0, 0);
break;
}
break;
WM_SYSKEYDOWN WM_SYSKEYUP 系统按键
(1)、alt或f10叫系统按键
(2)、alt+其他键组合键
switch (wParam)
{
case VK_MENU:/按下ALT按键
MessageBox(0, _T("alt"), 0, 0);
break;
case VK_F10://按下F10按键
MessageBox(0, _T("f10"), 0, 0);
break;
case 'S'://按下ALT+S(但是由于弹出的是对话框需不可和前面的 case VK_MENU同时使用)
MessageBox(0, _T("alt + S"), 0, 0);
break;
}
break;
case WM_SYSKEYUP:
break;
2、鼠标操作
WM_LBUTTONDOWN 除了关注用户操作了鼠标,还关注用户操作鼠标的位置
//case WM_LBUTTONDOWN://点击鼠标会在窗口上显示点击鼠标的坐标
//{
//鼠标的坐标信息都保存在lparam
//int x = LOWORD(lParam);
//int y = HIWORD(lParam);
//TCHAR arr[128] = {};
//_stprintf_s(arr,127,_T("x = %d,y = %d"),x,y);
//hdc = GetDC(hWnd);
//TextOut(hdc, 0, 0, arr, _tcslen(arr));
//ReleaseDC(hWnd, hdc);
//}
///break;
case WM_LBUTTONDOWN://实现在窗口上画图的功能,同时可动态的显示鼠标在窗口上的坐标
beginX = LOWORD(lParam);//自定义的int变量
beginY = HIWORD(lParam);//自定义的int变量
isDown = true;//自定义的bool变量
//三个自定义变量定义场景放到API函数外面
break;
case WM_LBUTTONUP://判断鼠标左键是否抬起
isDown = false;
break;
case WM_MOUSEMOVE://控制鼠标移动
{
if (isDown)
{
int x = LOWORD(lParam);
int y = HIWORD(lParam);
hdc = GetDC(hWnd);
MoveToEx(hdc, beginX, beginY, nullptr);//画线的时候把起点移到某个位置
LineTo(hdc, x, y);//画线到某位置
ReleaseDC(hWnd, hdc);
beginX = x;
beginY = y;
}
int x = LOWORD(lParam);
int y = HIWORD(lParam);
TCHAR arr[128] = {};
_stprintf_s(arr,127,_T("x = %d,y = %d"),x,y);
hdc = GetDC(hWnd);
TextOut(hdc, 0, 0, arr, _tcslen(arr));
ReleaseDC(hWnd, hdc);
}
break;
WM_CREATE WM_TIMER 鼠标计时器消息
switch (message)
{
case WM_CREATE:
SetTimer(hWnd,//哪个窗口需要计时器
1001,//计时器id
1000,//计时器的时长
nullptr);//计时器的回调函数指针,如果为null响应wm_timer消息,如果非空将不响应wm_timer消息,将直接调用该函数
SetTimer(hWnd, 1002, 2000, nullptr);
SetTimer(hWnd, 1003, 3000, (TIMERPROC)aaa);
break;
//计时器消息
case WM_TIMER:
//窗口默认不带计时器,需要主动的设置
{
switch (wParam)
{
case 1003:
{
static int j = 0;
hdc = GetDC(hWnd);
TextOut(hdc, 600, j, _T("timer_4"), 7);
ReleaseDC(hWnd, hdc);
j += 20;
}
break;
case 1001:
{
static int j = 0;
hdc = GetDC(hWnd);
TextOut(hdc, 0, j, _T("timer_1"), 7);
ReleaseDC(hWnd, hdc);
j += 20;
}
break;
case 1002:
{
static int j = 0;
hdc = GetDC(hWnd);
TextOut(hdc, 200, j, _T("timer_2"), 7);
ReleaseDC(hWnd, hdc);
j += 20;
}
break;
}
}