Чтобы встроить ваше внешнее приложение, сначала удалите стили из окна, и только после этого перефразируйте его:
void CWinSystemTools::reparentWindow(HWND hWindow, QWidget *widget)
{
if (hWindow == 0)
return;
DWORD style = GetWindowLong(hWindow, GWL_STYLE);
style = style & ~(WS_POPUP);
style = style & ~(WS_OVERLAPPEDWINDOW);
style = style | WS_CHILD;
SetWindowLong(hWindow, GWL_STYLE, style);
SetParent(hWindow, widget->winId());
}
Теперь, чтобы правильно сохранить изменение размера, реализуйте событие resize:
void TrVisApp::resizeEvent(QResizeEvent *event)
{
resizeClients();
}
и далее:
void TrVisApp::resizeClients()
{
if (hWndGvim != 0)
CWinSystemTools::resizeWindowToWidget(hWndGvim, ui.wdgGvim->geometry());
}
где:
void CWinSystemTools::resizeWindowToWidget(HWND hWnd, QRect geometry, bool moveToTopLeftCorner = true)
{
int x = geometry.left();
int y = geometry.top();
if (moveToTopLeftCorner)
{
x = 0;
y = 0;
}
int width = geometry.width();
int height = geometry.height();
SetWindowPos(hWnd, HWND_TOP, x, y, width, height, SWP_NOACTIVATE);
}
Прекрасно работает для меня:)