代码拉取完成,页面将自动刷新
//
// 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();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。