TASM + OpenGL помогите найти ошибку

Тема в разделе "WASM.OpenGL", создана пользователем SerafimR, 20 мар 2009.

  1. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Добавил в обработчик WM_CREATE
    Код (Text):
    1. create :
    2.     mov eax,_hWnd
    3.     mov hWndMain,eax
    и все заработало и не надо ни каких там DefWindowProc.
    По ходу CreateWindowExA не возращает управление пока не отработает WM_CREATE, следовательно hWndMain=0.
    В WM_PAINT убери BeginPaint и EndPaint без них все прекрасно работает.

    Во вложеном файле исходник, правда переделал по MASM.
     
  2. SerafimR

    SerafimR New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    24
    Да, похоже действительно CreateWindowExA не возвращает значение пока не будет обработано сообщение WM_CREATE. Попробовал вставить инициализацию OpenGL после
    Код (Text):
    1.     mov  hWndMain, eax;
    2.         call ShowWindow, hWndMain, SW_SHOWNORMAL;
    3.         call UpdateWindow, hWndMain;
    и перед циклом обработки сообщений - результат тот же - программа не закрашивает окно белым цветом.
    Сделал как al79 показал - добавил в начале обработки WM_CREATE
    Код (Text):
    1. create :
    2.     mov eax,_hWnd
    3.     mov hWndMain,eax
    и всё заработало! С BeginPaint и EndPaint тоже всё хорошо работает, просто без них иногда мерцание появляется.
    Спасибо вам всем, один бы я тут несколько недель плутал. Выложу то, что получилось, чтобы тем, кто так же захочет начать писать OpenGL программы на TASM, MASM, да и вообще на ассемблере, было легче сделать первые шаги.
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SerafimR
    Всё же так не принято делать, ибо некрасиво из процедуры менять глобальную переменную. Хендл окна возвращается CreateWindow, внутри же процедуры окна пользуйся её первым параметром.