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

Problems with a window event callback function C++

本文关键字:问题 C++ 函数 事件 回调 窗口      更新时间:2023-10-16

我目前在编译包含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">

如有任何帮助,我们将不胜感激。

感谢

在函数声明中

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;

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