窗口事件回调函数C ++的问题

时间:2014-03-21 13:02:11

标签: c++ windows winapi

我在尝试编译包含此WinProc函数的代码时遇到问题,该函数用于处理来自我们程序的消息。例如,如果通过Windows接收到WM_DESTROY消息,我希望它调用PostQuitMessage(0)来通知Windows该应用程序已发出退出请求。这将导致WM_QUIT消息导致WinMain退出。

我几周只学习了C ++,并没有经验或知识来解决这个问题,并希望得到任何帮助。我环顾四周,但到目前为止我找不到任何解决方案。我对此很陌生,所以我可能错过了一些非常明显的东西。

LRESULT WINAPI WinProc (hWnd, msg, UNIT msg, WPARAM wParam, LPARAM lParam )
{
      switch( msg )
        {
                  case WM_DESTROY;
                  // Tell windows to kill the program
                  PostQuitMessage(0);
                  return 0;

        }
        return DefWindowProc (hWnd, msg, wParam, lParam );

}

以下是我遇到的代码所遇到的错误。

错误:' LRESULT WinProc'重新宣布为不同类型的符号 错误:先前声明了' LRESULT WinProc(HWND __ *,UINT,WPARAM,LPARAM)' 错误:' hWnd'在这方面没有申明 错误:' msg'在这方面没有申明 错误:' UNIT'未在此范围内声明

非常感谢任何帮助。

谢谢

3 个答案:

答案 0 :(得分:3)

在函数声明中

LRESULT WINAPI WinProc (hWnd, msg, UNIT msg, WPARAM wParam, LPARAM lParam )

您忘记为前两个参数hWnd和msg

设置类型说明符

必须有

LRESULT WINAPI WinProc ( HWND hWnd, UNIT msg, WPARAM wParam, LPARAM lParam )

在放置分号

时,标签后面还必须跟冒号
case WM_DESTROY;

答案 1 :(得分:0)

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) 

这应该是函数声明。你的案子有一个&#34 ;;"分号而不是":"结肠。

除此之外,我没有看到任何问题。试试这个:

LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam  ) 
{
      switch( msg )
      {
              case WM_DESTROY:
              // Tell windows to kill the program
              PostQuitMessage(0);
              return 0;

       }
       return DefWindowProc (hWnd, msg, wParam, lParam );

}

答案 2 :(得分:0)

尝试使用回调调用约定而不是winapi

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633570(v=vs.85).aspx

还要注意在switch语句中使用“:”而不是“;”,还要在句柄和消息参数之前指定一个类型

LRESULT CALLBACK WinProc (HWND hWnd, UINT msg,  WPARAM wParam, LPARAM lParam)    
{
      switch( msg )
        {
                  case WM_DESTROY:
                  // Tell windows to kill the program
                  PostQuitMessage(0);
                  return 0;

        }
        return DefWindowProc (hWnd, msg, wParam, lParam );

}