2009-05-21 66 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没有效果

相关问题