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()
返回的错误代码来获取更可读的错误消息。