06/11/2020
键盘鼠标输入
WIN32 API 输入与输出
因为windows WIN32 API的消息回调会处理键盘鼠标的事件,所以可以直接使用。
LRESULT CALLBACK MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
// 监测这些键盘/鼠标事件
case WM_INPUT:
case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_XBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_XBUTTONUP:
case WM_MOUSEWHEEL:
case WM_MOUSEHOVER:
case WM_MOUSEMOVE: //鼠标移动事件
int x = LOWORD(lParam);//鼠标的横坐标
int y = HIWORD(lParam);//鼠标的纵坐标
return 0;
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP: //系统键位
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam); //交给操作系统自己处理
}
DirectXTK
微软进一步针对DirectX重写了Keyboard和Mouse类,但依然是通过原先的消息回调函数传递事件
void Keyboard::ProcessMessage(UINT message, WPARAM wParam, LPARAM lParam)
{
auto pImpl = Impl::s_keyboard; //Keyboard类中的私有Impl类,用来管理键盘状态识别
if (!pImpl)
return;
bool down = false;
switch (message)
{
case WM_ACTIVATEAPP:
pImpl->Reset()