будет ли этот пример OO win32API работать с несколькими окнами?

#oop #winapi #api #friend #wndproc

#ооп #winapi #API #друг #wndproc

Вопрос:

я в основном сосредоточен на том, как в этом примере используется wndproc в качестве друга… я немного запутался, как это работает, и я просто пытаюсь выяснить, будет ли это работать с несколькими окнами и как это будет работать

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

Комментарии:

1. Пожалуйста, прочитайте tinyurl.com/so-hints

2. Версия Microsoft: msdn.microsoft.com/en-us/library/windows/desktop/ff485838.aspx

Ответ №1:

Да, он будет работать с несколькими окнами, потому что он хранит указатель на объект C с соответствующим HWND:

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

и затем global WndProc извлекает этот указатель и вызывает методы объекта через него:

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

(Обратите внимание, что исходный код использует SetWindowLong и, следовательно, не будет работать в 64-разрядной программе — я изменил приведенный выше код для использования SetWindowLongPtr .)

Комментарии:

1. Пожалуйста, измените на SetWindowLongPtr — он работает для 32-и 64-разрядных приложений. Документы SetWindowLong подскажут вам, что нужно изменить.

2. @Boofhead: Я дословно цитировал код, на который указал @gizmo. Но вы правы, код здесь, в StackOverflow, должен быть правильным, поэтому я изменил его.