我正在深入研究语言,因此我可以了解代码中正在发生的事情,而不必打印一些东西并观察并观察发生的情况。
最近,在寻找对类函数表的更好实现时,我发现自己偶然发现了这种C语言标准:http : //www.iso-9899.info/wiki/Typedef_Function_Type
我已经尝试过了,它似乎可以正常工作:
typedef void fnr(int x);
main()
{
fnr t;
}
Run Code Online (Sandbox Code Playgroud)
对于我来说,寻找将功能打包到我的结构中的方式似乎是光荣的一天,直到我意识到这 fnr t;没有我想要的有用。它既不能分配,也不能以我希望的正确方式使用(对于C用户而言可能是lambda)。它甚至不存在于拆卸中!
此语言功能有什么作用?除了简化函数指针之外,它还能用于什么?
我正在研究 Direct3D 游戏引擎,我从之前的项目中获得了鼠标和键盘设置,但最近遇到了问题:
问题是,我的引擎是针对射击/砍杀游戏的,因此它需要直接输入,这是在之前的项目中使用 RAWMOUSE 和 WM_INPUT 消息解析设置的。
case WM_INPUT:
if (wParam == RIM_INPUT)
{
dword dwSize = 48;
RAWINPUT raw;
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, &raw, &dwSize,
sizeof(RAWINPUTHEADER)) != dwSize)
OutputDebugString(TEXT("GetRawInputData does not return correct size !\n"));
if (raw.header.dwType == RIM_TYPEMOUSE)
{
this->mouse.TranslateMouseInput(raw.data.mouse);
}
break;
}
Run Code Online (Sandbox Code Playgroud)
问题是,该代码仅返回鼠标的相对移动,它在设置相机查找时很有用,但是当涉及到由鼠标(按钮等...)控制的菜单或基本 GUI 时,事情就会变糟:GUI 和其他控件需要相对于客户端矩形计算光标位置。
我在 WinAPI 中找到的最接近答案是GetCursorPos()与 结合使用GetWindowRect(),但是如果窗口有标题栏相对偏移量,则它不算在内,并且 (0,0) 坐标设置在标题栏的顶部,但不在客户端区域上。
如何在不丢失相对鼠标移动的情况下解决该问题?
- 我应该尝试用 WM_INPUT 解析 WM_MOUSEMOVE 消息吗?
我一直在寻找一种流行的游戏引擎输入解决方案,但没有找到任何特定的解决方案。
附加信息: