Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с созданием обычного оконного WinAPI приложения

3.0K
01 ноября 2008 года
Oxaid
63 / / 02.04.2006
Привет!
Люди подскажите в чем проблема. CreateWindow все время возвращает нулевой хэндл.
Код:
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    WNDCLASSEX wc;

    wc.cbClsExtra = 0;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
    wc.hInstance = hInst;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = L"My Wnd Class";
    wc.lpszMenuName = 0;
    wc.style = CS_HREDRAW | CS_VREDRAW;

    if (!RegisterClassEx(&wc)) return 0;

    g_hWnd = CreateWindow(L"My Wnd Class", L"Title",
        WS_OVERLAPPEDWINDOW,
        0, 0,
        640, 480,
        NULL,
        NULL,
        hInst,
        NULL);

    if (!g_hWnd) return 0;

    ShowWindow(g_hWnd, SW_SHOW);

    return S_OK;
}
562
01 ноября 2008 года
tarekon
175 / / 19.08.2003
Функции CreateClass в коде не обнаружено. Есть CreateWindow и RegisterClass. Вы какую имели в виду?
3.0K
01 ноября 2008 года
Oxaid
63 / / 02.04.2006
Описка.Я имел в виду CreateWindow.
562
01 ноября 2008 года
tarekon
175 / / 19.08.2003
Что возвращает GetLastError() ?
3.0K
01 ноября 2008 года
Oxaid
63 / / 02.04.2006
После RegisterClassEx выдает:
The system cannot find the file specified
После CreateWindow:
The specified module could not be found
562
01 ноября 2008 года
tarekon
175 / / 19.08.2003
Судя по всему, ваша оконная процедура состоит из одной строки
 
Код:
return 0;

а это неверно. Дело в том, что из функции CreateWindow оконная процедура вызывается и не один раз. Причем некоторые обрабатываемые ею сообщения критичны для создания окна.

В общем, вставьте в оконную процедуру вызов DefWindowProc. Если он уже был, а некоторые сообщения вы обрабатываете сами, то посмотрите внимательно на их коды возврата, возможно ошибка в них.
38K
02 ноября 2008 года
Tooth
38 / / 07.10.2008
возможно вы в ANSI проекте пытаетесь вызвать ANSI же вариант функции
RegisterClassEx() с юникодными параметрами.
проверте определен ли UNICODE в проекте.
(#define UNICODE)
3.0K
07 ноября 2008 года
Oxaid
63 / / 02.04.2006
Цитата: tarekon
Судя по всему, ваша оконная процедура состоит из одной строки
 
Код:
return 0;

а это неверно. Дело в том, что из функции CreateWindow оконная процедура вызывается и не один раз. Причем некоторые обрабатываемые ею сообщения критичны для создания окна.

В общем, вставьте в оконную процедуру вызов DefWindowProc. Если он уже был, а некоторые сообщения вы обрабатываете сами, то посмотрите внимательно на их коды возврата, возможно ошибка в них.



В этом и была причина. По глупости не заметил. Как обычно ищещ в одном месте, а ошибка совсем в другом.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог