Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: korel от Ноябрь 11, 2010, 11:43



Название: добавление MFC контролов на Qt виджет
Отправлено: 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/ (http://img638.imageshack.us/i/errorxx.jpg/)

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

Подскажите, как побороть это. Заранее благодарен.


Название: Re: добавление MFC контролов на Qt виджет
Отправлено: SASA от Ноябрь 11, 2010, 12:09
Нажми "Retry", и посмотри точную строчку на которой вылетает ассерт. Мне кажется беда с cwnd.


Название: Re: добавление MFC контролов на Qt виджет
Отправлено: korel от Ноябрь 11, 2010, 12:17
Собственно здесь и вылетает:

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


Название: Re: добавление MFC контролов на Qt виджет
Отправлено: korel от Ноябрь 11, 2010, 12:24
при создании CWnd:
Код:
CWnd::CreateEx(...) 
{
...
cs.hInstance = AfxGetInstanceHandle();
...
}

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

Значит, таки на этапе создания CWnd!!! Что с этим можно сделать????


Название: Re: добавление MFC контролов на Qt виджет
Отправлено: RedDog от Ноябрь 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 ?


Название: Re: добавление MFC контролов на Qt виджет
Отправлено: korel от Ноябрь 11, 2010, 15:53
cwnd.Attach(host.window());