首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TForm躲在主窗口后面

TForm躲在主窗口后面
EN

Stack Overflow用户
提问于 2014-10-02 18:06:16
回答 1查看 305关注 0票数 0

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
MessageBox(NULL, "An Alert!", "!", MB_OKCANCEL)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 20:45:33

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

tf->Parent是空的,因为使用了tf->ParentWindow (BTW,您可以将parent->Handle传递给TForm(HWND)构造函数),所以myForm没有分配父窗口,只是一个没有跟踪的所有者。主人和家长是两件不同的事情。您可能希望MainForm是Form2窗口的父窗口。

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

试一试:

代码语言:javascript
复制
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();
    }
};

代码语言:javascript
复制
MessageBox(myForm->Handle, "An Alert!", "!", MB_OKCANCEL);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26166808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档