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
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}