Я пытаюсь написать плагин для Total Commander с помощью QT. Плагин — это dll, которая обязана реализовать следующую простую функцию:
HWND __stdcall ListLoad(HWND parentWin, char* fileToLoad, int ShowFlags);
Т.е. мне нужно показать QWidget, который будет потомком (в смысле Windows) для parentWin. parentWin, естественнно, к QT отношения не имеет. Я безуспешно пробовал следующий подход:
class ListerWidget :
public QWidget
{
public:
ListerWidget(HWND listerWin) {
// нужно сохранить и восстановить WindProc, т.к. QT ее затрет,
// у окна листера она и так уже есть и QT WindProc ему не к чему
LONG oldWinProc = GetWindowLong(listerWin, GWL_WNDPROC);
create(listerWin, false, false);
SetWindowLong(listerWin, GWL_WNDPROC, oldWinProc);
}
};
Далее где-то внутри ListLoad:
ListerWidget *lister = new ListerWidget(parentWin);
MyWidget *w = new MyWidget(lister);
w->show();
Все зашибись работает, кроме того, что MyWidget не показывается в листере. Что не так? Можно ли поступить как-нибудь по-другому?