Russian Qt Forum

Qt => Общие вопросы => Тема начата: cipher от Май 17, 2007, 14:20



Название: Проблемы с HWND окна в WinXP
Отправлено: cipher от Май 17, 2007, 14:20
День добрый!
Небольшая проблема при попытке получить HWND через QGLWidget::winId(). В дебугере получается вот так вот

Код:

HWND tmp;
tmp 0x00100762 {unused=??? } HWND__ *


И в последствии не выходит получить
Код:

HDC hDC
hDC = GetDC(hWnd);


QT version 4.1.4 в паре с MSVS 2005
Если кто знает подскажите пожалуйста в чём грабли, вроде на форуме полазил всё должно работать именно так, а оно не пашет. Почему не возвращается HWND?


Название: Проблемы с HWND окна в WinXP
Отправлено: J. Bond от Май 17, 2007, 14:56
HWND tmp=(HWND)GLWidget->winId(); ?

ну и кроме того есть еще непосредственно QGLWidget :: getDC().


Название: Проблемы с HWND окна в WinXP
Отправлено: cipher от Май 17, 2007, 15:21
Приведение типов не спасет 8(( - HWND tmp=(HWND)GLWidget->winId()
Результат тот же. Блин как выковырять этот HWND из недр Widget'а?


Название: Проблемы с HWND окна в WinXP
Отправлено: J. Bond от Май 17, 2007, 15:30
Т.е. в дебаге так же вопросики?
Странно, у меня нормально вытащилось.
а вот hdc не берется.


Название: Проблемы с HWND окна в WinXP
Отправлено: cipher от Май 17, 2007, 15:41
Пардон, счас попробывал простой проект, в нём всё вытаскивается, у меня же малость по другому.  Как-то примерно вот так

Код:

class AQuick
{
public:
  killer(HWND hWnd);  //  Сюда передаём HWND
...

}

class AOpenGL : public QGLWidget
{
}

main()
{
  AQuick quick;
  AOpenGL gl;

  HWND j = (HWND)gl.winId();
  quick.killer(j);
}


Ну т.е. беру HWND ogl-окна и на его основе формирую HBITMAP внутрях другого класса

добавлено спустя 2 минуты:

 Да при этом

aopengl.h
Код:

AOpenGL(QWidget *parent = 0);


aopengl.cpp
Код:

AOpenGL::AOpenGL(QWidget *parent) : QGLWidget(parent)
{
}


Т.е. я хочу сказать что parent ему передаётся как 0. Может здесь грабли?


Название: Проблемы с HWND окна в WinXP
Отправлено: J. Bond от Май 17, 2007, 15:43
А зачем это?
не проще ли реализовать граббинг glwidget через QT?


Название: Проблемы с HWND окна в WinXP
Отправлено: cipher от Май 17, 2007, 15:53
нет у меня задача сформировать простой виндовый HBITMAP с помощью WinAPI. А там надо юзать HDC и HWND. Я пишу часть кода заточенную под винду. Поэтому мне необходимо HWND какого-нить окошка. Блин ну HWND-то у него по любому есть, значит можно найти

добавлено спустя 1 минуту:

 так же как и контекст устройства должен быть, иначе как всё это рисуется


Название: Проблемы с HWND окна в WinXP
Отправлено: Вячеслав от Май 17, 2007, 18:44
Гы ;) А тупой вопрос - чего спай ++ кажет ?

Код:

        dmy_pdc = GetDC(dmy.winId());

хде dmy QWidget - не пойдет ?

Кста - а как с помощью WinApi выдрать содержимое GL окна ? или gl/gl.h считаем тож до кучи winapi ?


Название: Проблемы с HWND окна в WinXP
Отправлено: Tonal от Май 17, 2007, 20:13
Сдаётся мне, что для GL там всё сильно сложнее.
А почему не сграбить виджет средствами Qt, а потом пикселы перекинуть в HBITMAP?

Там довольно простое и разумное Api...


Название: Проблемы с HWND окна в WinXP
Отправлено: Вячеслав от Май 17, 2007, 21:46
Таки я к этому и вел ;) Насколько я помню тама (в окне) вообще нифига нет, а рисуеться оверлей сверху..... Хотя я могу и ошибаться 4 года прошло ....


Название: Проблемы с HWND окна в WinXP
Отправлено: cipher от Май 21, 2007, 11:09
Всё решил используя ещё один API - QuickTime SDK. Всем спасибо за ответы