Конференция "Игры" » Наследник TPanel, OpenGL и Handle [D7, WinXP]
 
  • imp (24.09.10 09:41) [0]
    Создаю компонент, наследник TPanel, на котором должно быть окно
    OpenGL.


    constructor TClassName.Create(AOwner:TWinControl);
    begin
     inherited Create(AOwner);
     DC := GetDC(Handle);
     SetDCPixelFormat;
     hrc := wglCreateContext(DC);
     wglMakeCurrent(DC, hrc);
     wglUseFontBitmaps (DC, 0, 255, GLF_START_LIST);
     glSelectBuffer(sizeof(selectBuffer), @selectBuffer);
     glClearColor (0.0, 0.0, 0.0, 1.0); // цвет фона
    end;



    ОДНАКО, Handle = 0 !!!!!!!!!!!!!!!!!!!!

    Вопрос: КАК ЭТО ИСПРАВИТЬ.

    PS. Подскажите где можно прочитать о механизме присвоения и создания Handle-компонентов в фОРТОЧКАХ.
  • Ega23 © (24.09.10 15:36) [1]
    DC := GetDC(Handle);


    Может
    DC := GetDC(Canvas.Handle);

    ?
  • Дрон (28.09.10 12:38) [2]
    Canvas.Handle это уже HDC, к нему неприменимо GetDC.
  • Дрон (28.09.10 12:45) [3]
    > imp   (24.09.10 09:41)

    Пока не присвоен Parent, нет никакого Handle.
  • Чайник © (03.11.10 21:54) [4]
    Все, что связано с подключением OpenGL поместить в обработчик сообщения WM_CREATE, соответственно освобождение ресурсов - WM_DESTROY.
    То есть, в секции Private должны быть созданы процедуры

       procedure WMCreate(var msg : TMessage); message WM_CREATE;
       procedure WMDestroy(var msg : TMessage); message WM_DESTROY;

    По крайней мере у меня так работает.
  • CrytoGen (04.11.10 07:51) [5]
    DC := GetDC(AOwner.Handle)
  • Чайник © (05.11.10 02:18) [6]

    > DC := GetDC(AOwner.Handle)


    В этом случае контекстом воспроизведения OpenGL станет не окно компонента, а окно владельца, соответственно весь вывод будет направлен туда.
 
Конференция "Игры" » Наследник TPanel, OpenGL и Handle [D7, WinXP]
Есть новые Нет новых   [118230   +19][b:0][p:0.001]