如何使用C ++捕获窗口关闭/重新启动消息

时间:2012-06-25 17:01:22

标签: c++ qt winapi

如果用户关闭/重启/注销计算机,我想以编程方式检查我的应用程序。 我试图实现下面的代码,它给出了编译错误

error: invalid conversion from 'bool (*)(DWORD)' to 'BOOL (*)(DWORD)'
error: initializing argument 1 of 'BOOL SetConsoleCtrlHandler(BOOL (*)(DWORD), BOOL)'

void TestApp:: OnQuit()
{
    SetConsoleCtrlHandler(HandlerRoutine, TRUE);
}

//Windows Call Back function implementation
bool WINAPI HandlerRoutine(DWORD dwCtrlType)
{
   bool ret = false;    
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit

   return ret;
}

我的开发环境是QT Creator QT SDK和C ++。

1 个答案:

答案 0 :(得分:1)

正如其他人所说,BOOLint,而不是boolbool的名义值为truefalse10BOOL使用FALSE == 0TRUE == !FALSE。大多数情况下,无论如何,因为它们基本上以相同的方式工作。

BOOL没有内置C类型时,bool来自WinAPI的旧遗产。

因此,您真正需要做的就是在处理程序中将bool更改为BOOL

BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
^^^^
{
   BOOL ret = false;    
   ^^^^
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit

   return ret;
}