【问题标题】:will this OO win32API example work with multiple windows?这个 OO win32API 示例是否适用于多个窗口?
【发布时间】:2011-05-05 10:12:30
【问题描述】:

我主要关注这个示例如何使用 wndproc 作为朋友...我有点困惑它是如何工作的,我只是想弄清楚它是否以及如何在多个窗口中工作

http://www.uta.fi/~jl/pguibook/api2oo.html

【问题讨论】:

标签: oop winapi api friend wndproc


【解决方案1】:

是的,它可以与多个窗口一起使用,因为它存储了指向具有相应 HWND 的 C++ 对象的指针:

Window *wPtr;
...
SetWindowLongPtr(hWnd, 0, (LONG_PTR) wPtr);

然后全局 WndProc 检索该指针并通过它调用对象的方法:

wPtr = (Window*) ::GetWindowLongPtr(hWnd, 0);
wPtr->WndProc(message, wParam, lParam);

(请注意,原始代码使用SetWindowLong,因此无法在 64 位程序中运行 - 我已将上面的代码更改为使用 SetWindowLongPtr。)

【讨论】:

  • 请更改为 SetWindowLongPtr - 它适用于 32 位和 64 位应用程序。 SetWindowLong 文档会告诉你改变。
  • @Boofhead:我逐字引用@gizmo 指出的代码。不过你是对的,StackOverflow 上的代码应该是正确的,所以我改了。
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多