c++ - 如何将 CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 输入(鼠标点击、按键)传递给类
问题描述
我创建了一个回调来处理 Window 过程。例如,每次单击鼠标按钮时,我都想将此消息发送到几个类,以便哪个类可以根据自己的需要进行不同的处理。如果可能的话,我希望它是跨平台的,但也仅限于 Windows。
CGui * gui;
gui = new Gui();
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
case WM_LBUTTONDOWN:
{
// how to send that a left button was pressed to CGui class ?
// is there another way than gui->LeftButtonPressed = true;
}
return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}
回答我自己的问题:
我相信你们正在谈论的“解决方案”是:
case WM_NCCREATE:
{
CREATESTRUCT * pcs = (CREATESTRUCT*)lParam;
CGui * pCGui = (CGui*)pcs->lpCreateParams;
pCGui->m_hWnd = hwnd;
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG)pcs->lpCreateParams);
CGui * pCGui = (CGui*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
break;
}
但实际上,由于我需要升级几个(正如我提到的)类,正确的解决方案是访问 WndProc 的类:
gui->handleMessages(window->hWND, window->message, window->wpParam,
window->lpParam);
And add at the original WndProc :
message = uMsg;
wpParam = wParam;
lpParam = lpParam;
不管怎么说,还是要谢谢你。
解决方案
推荐阅读
- python - 如何用单引号包裹 CSV 列
- qt - 将 af::array 转换为 QVector
- sharepoint - 使用 Microsoft Graph API 查询具有 .aspx 扩展名的某些 Sharepoint URI
- spring-mvc - Bean 名称 xxx 的 BindingResult 和普通目标对象都不能用作请求属性
- sql - SQL中从上一年月到今年月的数字总和
- verilog - 语法错误,意外的“=”,需要 IDENTIFIER
- asp.net - 部署在 Ubuntu 上的 .NET Core 应用程序的语言环境问题
- c# - 无法注册后台任务
- sql-server - 使用 DTEXEC.EXE 命令行实用程序时如何获取 SSIS 包的实际执行时间
- python - 为什么我的循环没有在我设置的数字处停止?