我有一个用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();
}
}现在两个窗口都有一个新的任务栏入口。
当我点击主窗口时,它就会出现在Form2前面。
但是,当我单击Form2时,它将保留在主目录后面。
另外,当Form2发出警报时,关闭警报将聚焦Main而不是Form2。
MessageBox(NULL, "An Alert!", "!", MB_OKCANCEL)你能告诉我我在这里做错了什么吗?
发布于 2014-10-02 20:45:33
为什么要创建2个TForm对象?你只需要一个。
tf->Parent是空的,因为使用了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);https://stackoverflow.com/questions/26166808
复制相似问题