【问题标题】:Problems with a window event callback function C++窗口事件回调函数 C++ 的问题
【发布时间】:2014-04-28 20:49:39
【问题描述】:

我目前在尝试编译包含此 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” 错误:未在此范围内声明“味精” 错误:未在此范围内声明“UNIT”

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    在函数声明中

    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;
    

    【讨论】:

    • 感谢我更改了我的代码并且它起作用了,不仅如此,现在我已经意识到我做错了什么。
    【解决方案2】:

    尝试使用回调调用约定而不是 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 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 );
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-11
        • 1970-01-01
        • 2023-02-23
        • 2018-10-13
        • 2011-01-27
        • 2021-12-05
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        相关资源
        最近更新 更多