首页 文章

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

提问于
浏览
0

我正在尝试编译包含此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

    尝试使用回调调用约定而不是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 );
    
    }
    
  • 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;
    
  • 0
    LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM )
    

    这应该是函数声明 . 你的案子有一个“;”分号而不是“:”冒号 .

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

    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 );
    
    }
    

相关问题