gpt4 book ai didi

c++ - TForm 隐藏在主窗口后面

转载 作者:行者123 更新时间:2023-11-28 02:40:25 25 4
gpt4 key购买 nike

我有一个用 OwlNext 创建的主窗体,它调用一个在 vcl 中创建的对话框。

MyOtherFormClass Form2=new Form2();
void MyMainForm::ShowForm2(void) {
Form2->ShowDialog(this);
}
class MyOtherFormClass {
[...]
TForm *myForm;

void ShowDialog(TWindow* parent){

TForm* tf = new TForm((HWND)NULL);
tf->ParentWindow=parent->Handle;

myForm= new TForm(tf);
myForm->Parent=tf->Parent;
myForm->Caption = "Form2";
myForm->Height = 950;
myForm->Width = 1350;
myForm->BorderIcons << biMinimize << biMaximize << biSystemMenu;
myForm->BorderStyle = bsSizeable;
myForm->Show();
}
}

现在我的两个窗口都有一个新的任务栏条目。
当我点击那里的 Main-WIndow 时,它会出现在 Form2 的前面。
但是当我点击 Form2 时,它停留在 Main 后面。
此外,当 Form2 发出警报时,关闭警报将聚焦 Main 而不是 Form2。

MessageBox(NULL, "An Alert!", "!", MB_OKCANCEL)

你能告诉我我做错了什么吗?

最佳答案

为什么要创建 2 个 TForm 对象?你只需要 1 个。

tf->Parent 为 NULL,因为使用了 tf->ParentWindow(顺便说一句,您可以将 parent->Handle 传递给 TForm(HWND) 构造函数),因此 myForm 没有分配父窗口,只是一个您没有跟踪的所有者。 Owner 和 Parent 是两个不同的东西。您可能希望 MainForm 成为 Form2 窗口的父级。

至于您的 MessageBox() 调用,您没有给它一个所有者窗口。您需要这样做,以便它知道要留在哪个窗口前面,更重要的是当它关闭时要关注哪个窗口。

试试这个:

MyOtherFormClass *Form2 = new MyOtherFormClass();

void MyMainForm::ShowForm2(void) {
Form2->ShowDialog(this);
}

class MyOtherFormClass {
//...
TForm *myForm;

void ShowDialog(TWindow* parent) {
myForm = new TForm(parent->Handle);
myForm->Caption = "Form2";
myForm->Height = 950;
myForm->Width = 1350;
myForm->BorderIcons = TBorderIcons() << biMinimize << biMaximize << biSystemMenu;
myForm->BorderStyle = bsSizeable;
myForm->Show();
}
};

MessageBox(myForm->Handle, "An Alert!", "!", MB_OKCANCEL);

关于c++ - TForm 隐藏在主窗口后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166808/

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