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

Ваш аккаунт

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

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

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

проблема с Win API, не отображается окно

2.1K
16 августа 2009 года
Norgat
452 / / 12.08.2009
просьба сильно ногами не бить, я только учусь=)
проблема следующая, код компилируется, запускается и ничего...

висит в процессах, дебаг показал что прога ждёт отклика от GetMessage(&msg,0,0,0), как и должно быть.

вопрос, почему не отображается окошко на экране?

и в каких случаях регистрация окна (т.е. RegisterClassEx()) не происходит?(был трабл с регистрацией, но я что то поменял и он пропал, но что забыл:confused:)

п.с. среда VS2005 Professional


Код:
#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT PaintSt;
    RECT aRect;
    switch(message)
    {
    case(WM_PAINT):
        hDC = BeginPaint(hWnd,&PaintSt);
        GetClientRect(hWnd,&aRect);
        SetBkMode(hDC, TRANSPARENT);
        DrawText(hDC,L"Это ТеХт, денег не дам!",-1,&aRect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
        EndPaint(hWnd,&PaintSt);
        return 0;
    case(WM_DESTROY):
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProc(hWnd,message,wParam,lParam);      
    }
    return 0;
}



int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    WNDCLASSEX wcex;
    HWND hWnd;
    MSG msg;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WindowProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = L"WIndowClass";
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));


    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            L"Call to RegisterClassEx failed!",
            L"Win32 Guided Tour",
            NULL);

        return 1;
    }

    hWnd = CreateWindow(L"OFWin",L"My First Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        0,0,hInstance,0);
    hWnd = CreateWindow(L"xXx",L"wWw",WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInstance,0);

    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    while(GetMessage(&msg,0,0,0)== TRUE)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return static_cast<int>(msg.wParam);
}
3.7K
16 августа 2009 года
0nni
326 / / 24.06.2008
ты регистрируешь окно с классом "WIndowClass"
 
Код:
wcex.lpszClassName  = L"WIndowClass";

А создаешь окна с несуществующими классами "xxx" и "OFWin"
 
Код:
hWnd = CreateWindow(L"OFWin"...
hWnd = CreateWindow(L"xXx", ...

Можешь сделать проветку, hWnd будет равен нулю.
Кстати, ты создаешь два окна, заведи для каждого свою hWnd, а то первое окно ты "теряешь"
2.1K
16 августа 2009 года
Norgat
452 / / 12.08.2009
спасибо, с окошком разобрался, теперь оно рисуется)

хотелось бы узнать по поводу регистрации...

из-за чего мне могло такого рода ошибку выдавать?(вот исправил её как-то, но как - уже умудрился забыть, а надо же знать из-за чего она у меня могла быть)

Цитата:
first-chance exception at 0x7c910370 in win 001.exe: 0xC0000005: Access violation reading location 0xcccccccc.



выдавало её на RegisterClassEx(&wcex)

3.7K
16 августа 2009 года
0nni
326 / / 24.06.2008
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными. Скорее всего ты не обнулил lpszMenuName и он указывал на неверный участок памяти. Перед заполнением структуры вызови ZeroMemory() что бы забить все нулями, и ошибок быть не должно.
14
17 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: 0nni
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными


... а в Debug-версии проекта байтами 0xCC что и видно по тексту ошибки

53K
29 сентября 2009 года
Little Ort
6 / / 29.09.2009
Цитата: 0nni
wcex у тебя локальная, значит при инициализации у нее все поля забиы случайными данными. Скорее всего ты не обнулил lpszMenuName и он указывал на неверный участок памяти. Перед заполнением структуры вызови ZeroMemory() что бы забить все нулями, и ошибок быть не должно.



Или, чтобы не засорять код написать

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