Воспитание формы .NET для HWND - PullRequest
4 голосов
/ 21 мая 2009

Я разрабатываю плагин (C ++ / CLI DLL), который запускается внутри определенных приложений, о которых я знаю только HWND. Мой плагин показывает различные формы .NET, которые я хотел бы вести как дочерние элементы основного приложения (например, по центру главного окна и т. Д.). Вот что я попробовал:

// MyDialog.h
public ref class MyDialog : public System::Windows::Forms::Form {
    public:
        MyDialog(const int parentHWND);

    private:
        IntPtr parent_;
};

// MyDialog.cpp
// Attempt1: Use SetParent and CenterParent
MyDialog::MyDialog(const int parentHWND) : parent_(parentHWND) {
    SetParent(reinterpret_cast<HWND>(this->Handle.ToPointer()), reinterpret_cast<HWND>(parent_.ToPointer()));

    this->StartPosition = FormStartPosition::CenterParent;
}

Похоже, что MyDialog действует как ребенок (то есть вы не можете переместить его за пределы основного приложения и т. Д.), Но вызов CenterParent не дает желаемых результатов.

Я нашел в сети несколько идей (включая SO ), которые предлагают создать NativeWindow из HWND и передать его в Show ():

// in MyDialog.h
void Show() new;

// MyDialog.cpp
// ...
void MyDialog::Show() {
    NativeWindow^ nw = gcnew NativeWindow();
    nw->AssignHandle(parent_);
    this->Show(nw);
}

Однако, во всех случаях, которые я могу протестировать, происходит сбой основного приложения (интересно, после показа моего диалога). Я обновлю сообщение информацией о сбое, если смогу ее получить.

Я ищу предложения о том, как последовательно добиться желаемого поведения. Все, что мне нужно, это иметь возможность центрировать немодальный диалог в главном окне и заставить его действовать как ребенок.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 21 декабря 2010

У меня была похожая проблема ... Если вы переопределяете Form.OnLoad и не вызываете MyBase.OnLoad, то StartPosition.CenterParent не действует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...