gpt4 book ai didi

.net - 将 .NET 表单设置为 HWND 的父级

转载 作者:行者123 更新时间:2023-12-01 19:48:02 24 4
gpt4 key购买 nike

我正在开发一个在某个应用程序内部运行的插件(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 ),建议从 HWND 创建 NativeWindow 并将其传递给 Show():

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

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

但是,在我可以测试的所有情况下,这似乎都会导致主应用程序崩溃(有趣的是,在显示我的对话框之后)。如果我能获得崩溃信息,我将更新该帖子。

我正在寻找有关如何始终如一地实现所需行为的建议。我所需要的只是能够将无模式对话框置于主窗口的中心,并让它充当子窗口。

如有任何帮助,我们将不胜感激。

最佳答案

我遇到了类似的问题...如果您覆盖 Form.OnLoad 并且不调用 MyBase.OnLoad 则 StartPosition.CenterParent 无效

关于.net - 将 .NET 表单设置为 HWND 的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/892512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com