1 Star 0 Fork 0

JuliusCaesar/win32_mingw

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
event.c 3.42 KB
一键复制 编辑 原始数据 按行查看 历史
JuliusCaesar 提交于 2023-12-25 23:43 . multi window with dx9
//
// Created by Caesar on 2023/11/17.
//
#include "event.h"
#include "sql/sql.h"
#include "socket/socket.h"
#include "gfx/camera.h"
#include "gfx/d3d.h"
static BOOL SetKeyboardHook();
static BOOL ReleaseKeyboardHook();
static LRESULT CALLBACK OnKeyboardEvent(INT, WPARAM, LPARAM);
static CHAR *ChooseFile(HWND);
extern CHAR imagePath[MAX_PATH];
extern SOCKET udp_socket;
static HHOOK keyboardHook;
pthread_t server_socket;
VOID ShowImage(HWND hwnd) {
strcpy(imagePath, ChooseFile(hwnd));
}
BOOL SetKeyboardHook() {
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) OnKeyboardEvent, GetModuleHandle(NULL), 0);
return TRUE;
};
BOOL ReleaseKeyboardHook() {
return UnhookWindowsHookEx(keyboardHook);
};
BOOL TerminateServer() {
closesocket(udp_socket);
WSACleanup();
}
static LRESULT CALLBACK OnKeyboardEvent(_In_ INT code, _In_ WPARAM wParam, _In_ LPARAM lParam) {
if (code == HC_ACTION) {
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
switch (((PKBDLLHOOKSTRUCT) lParam)->vkCode) {
case VK_UP:
Pitch(0.01f);
break;
case VK_DOWN:
Pitch(-0.01f);
break;
case VK_LEFT:
Yaw(-0.01f);
break;
case VK_RIGHT:
Yaw(0.01f);
break;
case VK_ADD:
Roll(0.01f);
break;
case VK_SUBTRACT:
Roll(-0.01f);
break;
case 87:
Walk(1.0f);
break;
case 83:
Walk(-1.0f);
break;
case 65:
Strafe(-1.0f);
break;
case 68:
Strafe(1.0f);
break;
case 189:
Fly(1.0f);
break;
case 187:
Fly(-1.0f);
break;
}
SetViewTransform();
}
}
return CallNextHookEx(keyboardHook, code, wParam, lParam);
};
static CHAR *ChooseFile(HWND hwnd) {
static CHAR fileName[MAX_PATH] = {0};//用于接收文件名
static size_t structSize = sizeof(OPENFILENAME);
OPENFILENAME ofn = {0};
ofn.lStructSize = structSize;//结构体大小
ofn.hwndOwner = hwnd;//拥有着窗口句柄,为NULL表示对话框是非模态的,实际应用中一般都要有这个句柄
ofn.lpstrFilter = TEXT("*.*\0*.*\0\0");//设置过滤
ofn.nFilterIndex = 1;//过滤器索引
ofn.lpstrFile = (LPSTR) &fileName;//接收返回的文件名,注意第一个字符需要为NULL
ofn.nMaxFile = sizeof(fileName);//缓冲区长度
ofn.lpstrInitialDir = NULL;//初始目录为默认
ofn.lpstrTitle = TEXT("请选择图片文件");//使用系统默认标题留空即可
ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;//文件、目录必须存在,隐藏只读选项
if (GetOpenFileName(&ofn)) {
MessageBox(NULL, fileName, TEXT("选择的文件"), MB_OK);
}
return fileName;
};
BOOL SetupEventHandler() {
InitDB();
SetKeyboardHook();
pthread_create(&server_socket, NULL, udp_server_init, NULL);
}
BOOL RemoveEventHandler() {
ReleaseKeyboardHook();
TerminateServer();
CloseDB();
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/juliuscaesar/win32_mingw.git
git@gitee.com:juliuscaesar/win32_mingw.git
juliuscaesar
win32_mingw
win32_mingw
master

搜索帮助

D67c1975 1850385 1daf7b77 1850385