2014-11-25 3 views
0

Должен ли я проверить вызов функции CreateWindowEx() на предмет отказа? и что я должен делать, если он терпит неудачу, я имею в виду, если я создаю группу кнопок и один из вызовов функций не удался, должен ли я закрыть приложение вместе? Я имею в виду, что отсутствие одной кнопки может сделать приложение бесполезным.Должен ли я проверить CreateWindowEx() на отказ?

+0

Да, вы должны проверить, получите действительный дескриптор, если функция возвращает NULL, что-то пошло не так, и вы можете использовать 'GetLastError()' для получения кода ошибки. Какое действие вы принимаете, зависит от того, почему функция не работает. – Cyclonecode

+0

Что делать, если я не получаю действительный дескриптор (что означает, что я не создал кнопку), должен ли я отображать сообщение об ошибке и закрывать приложение? –

+0

* отсутствие одной кнопки может сделать приложение бесполезным * есть ваш ответ -> сообщить пользователю с помощью MessageBox, что создание кнопки не удалось и закрыть приложение. Вы можете написать небольшой журнал (как файл .txt), по крайней мере, с соответствующей информацией. Таким образом, пользователь может отправить этот «отчет об ошибке», и вы будете иметь что-то в качестве руководства при отладке ... – AlwaysLearningNewStuff

ответ

2

Я думаю, вы всегда должны проверить возвращаемое значение от 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); 
} 
Смежные вопросы