static LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
GraphicsWindowWin32* window = new GraphicsWindowWin32();
return window->handleNativeWindowingEvent(hwnd, uMsg, wParam, lParam);
}
.....................
.....................
LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch (uMsg)
{
case WM_PAINT   :

PAINTSTRUCT paint;
::BeginPaint(hwnd, &paint);
::EndPaint(hwnd, &paint);
requestRedraw();
break; case WM_SYSCOMMAND:
{
switch (wParam)
{
case SC_SCREENSAVE:
case SC_MONITORPOWER:
return 0;
}
break;
}
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}

case WM_SIZE:
{
                        .....................
.....................
return 0;
}
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
以上是我设置的回调函数,创建窗口前设置了回调函数,如下:void GraphicsWindowWin32::createWindow()
{
WNDCLASS wc;
DWORD dwExStyle;
DWORD dwStyle;
RECT WindowRect;
WindowRect.left=(long)_traits->x;
WindowRect.right=(long)_traits->width;
WindowRect.top=(long)_traits->y;
WindowRect.bottom=(long)_traits->height;
_hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC) WindowProc; // WndProc处理消息
...............
...............
if (!RegisterClass(&wc)) // 尝试注册窗口类
{
 MessageBox(NULL,_T("注册窗口失败"),_T("错误"),MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
................
................
_hwnd=CreateWindowEx( dwExStyle, // 扩展窗体风格
_T("OpenG"), // 类名字
"title", // 窗口标题
WS_CLIPSIBLINGS | // 必须的窗体风格属性
WS_CLIPCHILDREN | // 必须的窗体风格属性
dwStyle, // 选择的窗体属性
0, 0, // 窗口位置
WindowRect.right-WindowRect.left, // 计算调整好的窗口宽度
WindowRect.bottom-WindowRect.top, // 计算调整好的窗口高度
NULL, // 无父窗口
NULL, // 无菜单
_hInstance, // 实例
NULL);
................
................
ShowWindow(_hwnd,SW_SHOW); // 显示窗口
................
}窗口的创建,消息的翻译传递..是在外部调用,最终编译没有错误,运行程序报错如下:
经过调试貌似是在ShowWindow(_hwnd,SW_SHOW);这里出了问题 这里进入回调函数之后出不来了...?????????? 也可能是其他的问题 就各路大神解释啊啊啊啊!!!!!!C++win32回调函数WindowProc

解决方案 »

  1.   

    用工程新建一个win32工程,自己对比看看
      

  2.   

    基本都是一样的 就是我现在把win32创建窗口的过程封装到一个类中,然后回调函数设置为静态的static 之后静态的回调函数再调用对象里面的一个方法 就会出现上面的问题 所以比较纠结!!!!
      

  3.   

    那是你缺少缺少消息转发// 主消息循环:
    while (GetMessage(&msg, NULL, 0, 0))
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }