Создание окна CreateWindow возвращает 0
От: titeha  
Дата: 12.05.10 07:50
Оценка:
Доброго дня, уважаемые!

До сих пор кодил в Delphi и asm. Тут возникла потребность написать программу на VC++, создаю для начала пустое

приложение (пустой проект Win32), на которое после буду добавлять функциональность. Итак, для начала нужно создать

окошко. Вспомнив, как это делал в ASM, и просмотрев некоторые книги/учебники, статьи в сети, а также код,

генерируемый волшебником от студии, написал строк 50 кода, который должен был мне просто показать пустое окно

приложения. Но не тут-то было! Функция CreateWindowEx возвращает 0, вызов функции GetLastError возвращает 1407

(Cannot find window class).

собственно сам код:

#include "MyProject.h"

HINSTANCE hInst;
HWND MyProjectWnd;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                       LPTSTR lpCmdLine, int nCmdShow)
{
 ATOM MyProjectWndClass;
 WNDCLASSEX wc;
 MSG msg;

 hInst = hInstance;

 wc.cbSize = sizeof(WNDCLASSEX);
 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = WndProc;
 wc.cbClsExtra = 0;
 wc.cbWndExtra = 0;
 wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY_ICON));
 wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
 wc.hbrBackground = (HBRUSH)1;
 wc.lpszMenuName = NULL;
 wc.lpszClassName = static_cast<LPCWSTR> (_TEXT("MyProjectWndClass"));
 wc.hIconSm = wc.hIcon;

 if (!(MyProjectWndClass = RegisterClassEx(&wc)))
  MessageBox(NULL, static_cast<LPCWSTR> (_TEXT("Ошибка запуска программы!")), 
             static_cast<LPCWSTR> (_TEXT("Ошибка")), MB_OK | MB_ICONERROR);

 MyProjectWnd = CreateWindowEx(0, (LPCWSTR)MAKELONG(MyProjectWndClass, 0),
                              static_cast<LPCWSTR> (_TEXT("Этот проект")),
                              WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 
                              CW_USEDEFAULT, CW_USEDEFAULT,    CW_USEDEFAULT, 
                              NULL, NULL, hInstance, NULL);
 if (!MyProjectWnd)// return EXIT_FAILURE;
  {
  DWORD T = GetLastError();
  return EXIT_FAILURE;
  }

 ShowWindow(MyProjectWnd, SW_SHOWNORMAL);

 while (GetMessage(&msg, NULL, 0, 0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch    (message)
 {
  case WM_CLOSE:
  {
   DestroyWindow(hWnd);
   break;
  }
  case WM_DESTROY:
  {
   PostQuitMessage(EXIT_SUCCESS);
   break;
  }
  /*default:
   return DefWindowProc(hWnd, message, wParam, lParam);
   break;*/
 }

 return DefWindowProc(hWnd, message, wParam, lParam);
}


Что я делал, чтобы попытаться устранить эту проблему:
1) Все static_cast менчл на преобразования типов в стиле С.
2) При вызове CreateWindowEx менял второй параметр с ATOM на строку имени класса окна.

3) Пробовал использовать функции без префиксов Ex в разных комбинациях.

Пока ничего не помогло. Скажите пожалуйста, где может быть проблема?

Спасибо заранее.
createwindow getlasterror = 1407
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.