窗口包装器类别C++;(G+;+;) 我试图学习C++中创建窗口的过程,我已经看了一篇关于创建包装类的文章,但我不太理解。到目前为止,我知道你不能有一个类方法WndProc(我不知道为什么),但老实说,这就是全部。有人能解释一下,也解释一下重新解释的演员阵容吗?这是一篇文章 LRESULT CALLBACK Window::MsgRouter(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { Window *wnd = 0; if(message == WM_NCCREATE) { // retrieve Window instance from window creation data and associate wnd = reinterpret_cast<Window *>((LPCREATESTRUCT)lparam)->lpCreateParams; ::SetWindowLong(hwnd, GWL_USERDATA, reinterpret_cast<long>(wnd)); // save window handle wnd->SetHWND(hwnd); } else // retrieve associated Window instance wnd = reinterpret_cast<Window *>(::GetWindowLong(hwnd, GWL_USERDATA)); // call the windows message handler wnd->WndProc(message, wparam, lparam); } LRESULT回调窗口::MsgRouter(HWND-HWND,UINT消息, WPARAM WPARAM,LPARAM LPARAM) { 窗口*wnd=0; 如果(消息==WM\n创建) { //从窗口创建数据中检索窗口实例并关联 wnd=重新解释强制转换((LPCREATESTRUCT)lparam)->lpCreateParams; ::SetWindowLong(hwnd、GWL_USERDATA、reinterpret_cast(wnd)); //保存窗口句柄 wnd->SetHWND(hwnd); } 其他的 //检索关联的窗口实例 wnd=重新解释强制转换(::GetWindowLong(hwnd,GWL_USERDATA)); //调用windows消息处理程序 wnd->WndProc(消息、wparam、LPRAM); }

窗口包装器类别C++;(G+;+;) 我试图学习C++中创建窗口的过程,我已经看了一篇关于创建包装类的文章,但我不太理解。到目前为止,我知道你不能有一个类方法WndProc(我不知道为什么),但老实说,这就是全部。有人能解释一下,也解释一下重新解释的演员阵容吗?这是一篇文章 LRESULT CALLBACK Window::MsgRouter(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { Window *wnd = 0; if(message == WM_NCCREATE) { // retrieve Window instance from window creation data and associate wnd = reinterpret_cast<Window *>((LPCREATESTRUCT)lparam)->lpCreateParams; ::SetWindowLong(hwnd, GWL_USERDATA, reinterpret_cast<long>(wnd)); // save window handle wnd->SetHWND(hwnd); } else // retrieve associated Window instance wnd = reinterpret_cast<Window *>(::GetWindowLong(hwnd, GWL_USERDATA)); // call the windows message handler wnd->WndProc(message, wparam, lparam); } LRESULT回调窗口::MsgRouter(HWND-HWND,UINT消息, WPARAM WPARAM,LPARAM LPARAM) { 窗口*wnd=0; 如果(消息==WM\n创建) { //从窗口创建数据中检索窗口实例并关联 wnd=重新解释强制转换((LPCREATESTRUCT)lparam)->lpCreateParams; ::SetWindowLong(hwnd、GWL_USERDATA、reinterpret_cast(wnd)); //保存窗口句柄 wnd->SetHWND(hwnd); } 其他的 //检索关联的窗口实例 wnd=重新解释强制转换(::GetWindowLong(hwnd,GWL_USERDATA)); //调用windows消息处理程序 wnd->WndProc(消息、wparam、LPRAM); },c++,class,window,wrapper,casting,C++,Class,Window,Wrapper,Casting,提前感谢,ell.过程充当Windows消息处理系统到与HWND关联的Window实例之间的代理。它将Windows消息路由到C++对象。 指向窗口实例的指针通过CreateWindow()函数的最后一个参数传递给MsgRouter()过程。当您第一次通过CreateWindow()(或CreateWindowEx())创建HWND时,会发送一些消息,其中一条是WM\u NCCREATE。当过程接收到WM_NCCREATE消息时,LPARAM参数包含指向CREATESTRUCT的指针,该指针包含

提前感谢,ell.

过程充当Windows消息处理系统到与
HWND
关联的
Window
实例之间的代理。它将Windows消息路由到C++对象。 指向
窗口
实例的指针通过
CreateWindow()
函数的最后一个参数传递给
MsgRouter()
过程。当您第一次通过
CreateWindow()
(或
CreateWindowEx()
)创建
HWND
时,会发送一些消息,其中一条是
WM\u NCCREATE
。当过程接收到
WM_NCCREATE
消息时,
LPARAM
参数包含指向
CREATESTRUCT
的指针,该指针包含传递到
CreateWindow()函数中的参数。该过程从
CREATESTRUCT
中检索
Window
实例指针,并通过将其设置为
HWND
GWL\u USERDATA
通过
SetWindowLong()
将其保存在
HWND

既然指针已经保存,那么窗口过程从现在起可以在收到消息时通过
GetWindowLong()
HWND
检索指向原始
window
实例的指针。最后,窗口过程对检索到的
window
指针调用
WndProc()
,传递确切的消息和参数,以便
window
实例可以处理消息