小编Ily*_*tov的帖子

Typedef函数,它有用吗?

我正在深入研究语言,因此我可以了解代码中正在发生的事情,而不必打印一些东西并观察并观察发生的情况。

最近,在寻找对类函数表的更好实现时,我发现自己偶然发现了这种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)。它甚至不存在于拆卸中!

此语言功能有什么作用?除了简化函数指针之外,它还能用于什么?

c typedef function-pointers function

1
推荐指数
1
解决办法
145
查看次数

如何通过 WM_INPUT 设置获得绝对鼠标位置?

我正在研究 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 消息吗?

我一直在寻找一种流行的游戏引擎输入解决方案,但没有找到任何特定的解决方案。

附加信息

windows directx winapi mouseevent c++14

0
推荐指数
1
解决办法
2499
查看次数