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

Ваш аккаунт

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

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

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

GetDC возвращает некорректный результат

22K
15 марта 2010 года
FloyDos
81 / / 14.08.2009
создаю оконное приложение, надеясь в дальнейшем присобачить OpenGL.
для этого, как я понимаю, необходимо получить HDC и собственно HGLRC.
Регистрирую класс главного окна, создаю окно, затем вызываю GetDC:

Код:
WNDCLASS Wnd1;
    hInst = GetModuleHandle(NULL);
    hInstance=hInst;
    Wnd1.cbClsExtra=0;
    Wnd1.cbWndExtra=0;
    Wnd1.hbrBackground=(HBRUSH) GetStockObject(WHITE_BRUSH);
    Wnd1.hCursor=LoadCursor(NULL,IDI_APPLICATION);
    Wnd1.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    Wnd1.hInstance=hInstance;
    Wnd1.lpfnWndProc=WndProc1;
    Wnd1.lpszClassName="OkNo";
    Wnd1.lpszMenuName="NULL";
    Wnd1.style=CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
        RegisterClass(&Wnd1);
    hWnd=CreateWindow(
        Wnd1.lpszClassName,
        "AAA",
        WS_OVERLAPPEDWINDOW,
        0,0,
        500,500,
        NULL,NULL,
        hInstance,
        NULL);
    hDC = GetDC(hWnd);

при просмотре значений hWnd через раз равно нулю(:confused:)
а главная проблема - (при любом значении hWnd) смотрим значение hDC:

unused CXX0030: Error: expression cannot be evaluated
:confused:
почему не NULL, ведь по идее если GetDC не может получить дескриптор устройства, должна возвращать NULL?
8.2K
15 марта 2010 года
bagie2
299 / / 26.10.2008
это при отладке скорее всего показывает такое и это не реальное значение hDC. такое бывает, например, при включенной оптимизации, например когда hDC дальше по коду нигде не используется...
22K
15 марта 2010 года
FloyDos
81 / / 14.08.2009
спасибо, но вообще-то не очень понятно, почему так..
кроме того, далее hdc используется:

 
Код:
hRC = wglCreateContext( hDC );
    wglMakeCurrent( hDC, hRC );
    ShowWindow(hWnd,nCmdShow);
    ResizeGLSzene(500,500);
    InitGL();
    while(GetMessage(&msg,NULL,NULL,NULL)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
     return (int) msg.wParam;
7
15 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Точно не знаю,в чём может быть проблема,но пару комментариев по коду могу дать
Цитата: FloyDos
 
Код:
Wnd1.hCursor=LoadCursor(NULL,IDI_APPLICATION);

А не IDC_APPLICATION?Курсор,всё-таки

Цитата: FloyDos
Wnd1.lpszMenuName="NULL";[/CODE]

Может,NULL без кавычек?Я так понимаю,меню нету,а тут ерунда получается

P.S.На самом деле,если hWnd==0,то GetDC всё равно получит дескриптор.Нет,естественно,не того окна,которое вы не смогли создать:),а рабочего стола.Так-то

8.2K
15 марта 2010 года
bagie2
299 / / 26.10.2008
ну если до кода докапываться то LoadCursor и LoadIcon вообще deprecated =)
Цитата:
Note This function has been superseded by the LoadImage function.

9.0K
16 марта 2010 года
grag63
71 / / 23.01.2006
используй WNDCLASSEX и глюки исчезнут...
22K
16 марта 2010 года
FloyDos
81 / / 14.08.2009
Цитата: @pixo $oft
Может,NULL без кавычек?Я так понимаю,меню нету,а тут ерунда получается


да, он и был без кавычек, ибо его не должно быть по идее.
дело в том, что опять там был гал при просмотре значений поля меню структуры WNDCLASS при отладке, я поэтому попробовала просто имя меню поставить и все. Я так понимаю, тут та же проблема была, типа среда не отображает настоящее значение; это же не значит, что оно неверное...

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