我有一个用OwlNext创建的主表单,它调用在vcl中创建的Dialog。
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)
你能告诉我这里做错了什么吗?
答案 0 :(得分:2)
为什么要创建2个TForm
个对象?你只需要1。
tf->Parent
为NULL,因为使用tf->ParentWindow
(BTW,您可以将parent->Handle
传递给TForm(HWND)
构造函数),因此myForm
没有分配父窗口,只是一个你没有跟踪的所有者。所有者和父母是两个不同的东西。您可能希望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);