Winapi 我是否应该检查CreateWindowEx()是否失败?

Winapi 我是否应该检查CreateWindowEx()是否失败?,winapi,Winapi,我是否应该检查CreateWindowEx()函数调用是否失败?如果失败了该怎么办?我的意思是,如果我创建了一组按钮,其中一个函数调用失败了,我应该一起关闭应用程序吗?我的意思是,缺少一个按钮可能会使应用程序变得无用。我认为您应该始终检查CreateWindowEx()的返回值。。如果返回值为NULL,则您知道出现了问题,可以对此采取一些措施。当出现错误时,您应该怎么做取决于您自己,例如,您可以显示一个带有错误描述的消息框,或者您可以将错误记录到一个文件中,等等: // Try to creat

我是否应该检查
CreateWindowEx()
函数调用是否失败?如果失败了该怎么办?我的意思是,如果我创建了一组按钮,其中一个函数调用失败了,我应该一起关闭应用程序吗?我的意思是,缺少一个按钮可能会使应用程序变得无用。

我认为您应该始终检查
CreateWindowEx()的返回值。
。如果返回值为
NULL
,则您知道出现了问题,可以对此采取一些措施。当出现错误时,您应该怎么做取决于您自己,例如,您可以显示一个带有错误描述的消息框,或者您可以将错误记录到一个文件中,等等:

// Try to create your window
HWND hwnd = CreateWindowEx(...);

// check if the handle is valid
if(hwnd == NULL) {

   // display a MessageBox() with a descriptive error message
   LPVOID lpErrorMessage;
   DWORD dwErrorCode = GetLastError();

   FormatMessage(
      FORMAT_MESSAGE_ALLOCATE_BUFFER | 
      FORMAT_MESSAGE_FROM_SYSTEM |
      FORMAT_MESSAGE_IGNORE_INSERTS,
      NULL,
      dwErrorCode,
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
      (LPTSTR) &lpErrorMessage,
      0, NULL 
  );
  MessageBox(NULL, (LPCTSTR)lpErrorMessage, TEXT("Error"), MB_OK);

  // don't forget to free the buffer allocated by FormatMessage
  LocalFree(lpErrorMessage);

  // terminate process
  ExitProcess(dwErrorCode);
}

是的,您应该检查是否获得了有效的句柄,如果函数返回NULL,则会出现错误,然后可以使用
GetLastError()
获取错误代码。您采取的操作取决于函数失败的原因。如果我没有获得有效的句柄(这意味着我认为按钮没有创建),该怎么办,我应该显示一条错误消息并关闭应用程序吗?如果没有一个按钮,应用程序将无法使用。请回答->使用
MessageBox
通知用户按钮创建失败并关闭应用程序。您至少可以编写一个包含相关信息的小日志(作为
.txt
文件)。这样,用户就可以提交这个“错误报告”,并且在调试时可以得到一些指导……我认为这仍然取决于
CreateWindowEx()
失败的原因。您可以使用
FormatMessage()
以及从
GetLastError()
返回的错误代码来获取更可读的错误消息。