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