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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: добавление MFC контролов на Qt виджет  (Прочитано 4303 раз)
korel
Гость
« : Ноябрь 11, 2010, 11:43 »

Для использования MFC контролов в Qt виджете использую QWinMigrate библиотеку.
Код:
 QWidget* p_test_widget = p_ui->m_left_widget;
 HostWindow host(p_test_widget);// наследник qwinhost
 CButton myButton;
 CWnd cwnd;
 
 HDC host_dc = host.getDC();
 HWND host_hwnd = WindowFromDC(host_dc);
 
 if(cwnd.Attach(host_hwnd))
  myButton.Create(0, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                  CRect(10,10,100,30), &cwnd, 1001);

На этапе запуска приложения появляется ошибка:
http://img638.imageshack.us/i/errorxx.jpg/

я выявил, что ее провоцирует код по созданию кнопки:
Код:
 myButton.Create(0, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                  CRect(10,10,100,30), &cwnd, 1001);

Подскажите, как побороть это. Заранее благодарен.
Записан
SASA
Гость
« Ответ #1 : Ноябрь 11, 2010, 12:09 »

Нажми "Retry", и посмотри точную строчку на которой вылетает ассерт. Мне кажется беда с cwnd.
Записан
korel
Гость
« Ответ #2 : Ноябрь 11, 2010, 12:17 »

Собственно здесь и вылетает:

Код:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);// - место вылета
return afxCurrentInstanceHandle; }
Записан
korel
Гость
« Ответ #3 : Ноябрь 11, 2010, 12:24 »

при создании CWnd:
Код:
CWnd::CreateEx(...) 
{
...
cs.hInstance = AfxGetInstanceHandle();
...
}

AfxGetInstanceHandle() - вызывает ошибку.
Код:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);// - место вылета
return afxCurrentInstanceHandle; }

Значит, таки на этапе создания CWnd!!! Что с этим можно сделать?Непонимающий
Записан
RedDog
Гость
« Ответ #4 : Ноябрь 11, 2010, 15:18 »

Код:
 CWnd cwnd;
 
 HDC host_dc = host.getDC();
 HWND host_hwnd = WindowFromDC(host_dc);
 
 if(cwnd.Attach(host_hwnd))
  myButton.Create(0, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                  CRect(10,10,100,30), &cwnd, 1001);
где здесь инициализируется cwnd ?
Записан
korel
Гость
« Ответ #5 : Ноябрь 11, 2010, 15:53 »

cwnd.Attach(host.window());
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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