2009-05-21 64 views
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); 
} 

然而,這似乎是,在所有的情況下,我可以測試,碰撞主要應用程序(有趣地顯示我的對話框後)。如果我能得到它,我會用崩潰信息更新這篇文章。

我在尋找關於如何始終如一地實現所需行爲的建議。我需要的是能夠在主窗口中居中放置一個無模式的對話框,並讓它充當孩子。

任何幫助,將不勝感激。

+0

你有沒有想出解決辦法? – Weeble 2010-07-08 17:43:36

回答

0

我有一個類似的問題。如果你在此改變Form.OnLoad不叫MyBase.OnLoad然後StartPosition.CenterParent沒有效果

相關問題