Russian Qt Forum
Ноябрь 24, 2024, 15:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с HWND окна в WinXP  (Прочитано 7003 раз)
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?
Записан
J. Bond
Гость
« Ответ #1 : Май 17, 2007, 14:56 »

HWND tmp=(HWND)GLWidget->winId(); ?

ну и кроме того есть еще непосредственно QGLWidget :: getDC().
Записан
cipher
Гость
« Ответ #2 : Май 17, 2007, 15:21 »

Приведение типов не спасет 8(( - HWND tmp=(HWND)GLWidget->winId()
Результат тот же. Блин как выковырять этот HWND из недр Widget'а?
Записан
J. Bond
Гость
« Ответ #3 : Май 17, 2007, 15:30 »

Т.е. в дебаге так же вопросики?
Странно, у меня нормально вытащилось.
а вот hdc не берется.
Записан
cipher
Гость
« Ответ #4 : Май 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. Может здесь грабли?
Записан
J. Bond
Гость
« Ответ #5 : Май 17, 2007, 15:43 »

А зачем это?
не проще ли реализовать граббинг glwidget через QT?
Записан
cipher
Гость
« Ответ #6 : Май 17, 2007, 15:53 »

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

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

 так же как и контекст устройства должен быть, иначе как всё это рисуется
Записан
Вячеслав
Гость
« Ответ #7 : Май 17, 2007, 18:44 »

Гы Подмигивающий А тупой вопрос - чего спай ++ кажет ?

Код:

        dmy_pdc = GetDC(dmy.winId());

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

Кста - а как с помощью WinApi выдрать содержимое GL окна ? или gl/gl.h считаем тож до кучи winapi ?
Записан
Tonal
Гость
« Ответ #8 : Май 17, 2007, 20:13 »

Сдаётся мне, что для GL там всё сильно сложнее.
А почему не сграбить виджет средствами Qt, а потом пикселы перекинуть в HBITMAP?

Там довольно простое и разумное Api...
Записан
Вячеслав
Гость
« Ответ #9 : Май 17, 2007, 21:46 »

Таки я к этому и вел Подмигивающий Насколько я помню тама (в окне) вообще нифига нет, а рисуеться оверлей сверху..... Хотя я могу и ошибаться 4 года прошло ....
Записан
cipher
Гость
« Ответ #10 : Май 21, 2007, 11:09 »

Всё решил используя ещё один API - QuickTime SDK. Всем спасибо за ответы
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 21.