4
我正在開發一個在特定應用程序內部運行的插件(C++/CLI DLL),關於這個插件我只知道HWND。我的插件顯示了我希望作爲主應用程序的子節點運行的各種.NET窗體(例如,以主窗口爲中心等)。以下是我已經試過:將.NET窗體添加到HWND中
// 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)是建議創建從HWND一個NativeWindow並將其傳遞到顯示():
// in MyDialog.h
void Show() new;
// MyDialog.cpp
// ...
void MyDialog::Show() {
NativeWindow^ nw = gcnew NativeWindow();
nw->AssignHandle(parent_);
this->Show(nw);
}
然而,這似乎是,在所有的情況下,我可以測試,碰撞主要應用程序(有趣地顯示我的對話框後)。如果我能得到它,我會用崩潰信息更新這篇文章。
我在尋找關於如何始終如一地實現所需行爲的建議。我需要的是能夠在主窗口中居中放置一個無模式的對話框,並讓它充當孩子。
任何幫助,將不勝感激。
你有沒有想出解決辦法? – Weeble 2010-07-08 17:43:36