如何在显示桌面(或Windows + D)后使模态窗体取消最小化

时间:2017-05-25 15:22:32

标签: c++builder-xe5

当我启动我的应用程序时,显示的第一个也是唯一一个表单是模态的登录表单:

frmLogin = new TfrmLogin(Application);
frmLogin->Init();
if(frmLogin->ShowModal() == mrCancel)
{
  //this will exit the application because user cancel the login
  return -1;
}

在ShowModal之后发生了代码,它打开了应用程序的主窗体(不是模态)。

当我按显示桌面或执行 windows + D 并且我仍然在模式表单上登录时,我无法获得单击任务栏时返回。

1。有没有办法在“显示桌面”之后取消最小化模式登录?

2。此外,如果我打开我的应用程序并显示登录信息,我似乎无法在任务栏中右键单击它时将其关闭>关闭窗口'。有没有办法通过任务栏关闭它? (虽然在登录表单的角落使用了红色的' x'但它完全关闭)

我正在使用c ++ Builder 10.1 Berlin

1 个答案:

答案 0 :(得分:0)

正如@Remy Lebeau所说,我通过覆盖CreateParams()函数来解决问题。

在我的Login.h中

protected:
    virtual void __fastcall CreateParams(TCreateParams &Params);

在我的Login.cpp

void __fastcall TfrmLogin::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params);
    Params.ExStyle = WS_EX_APPWINDOW;
    Params.WndParent = GetDesktopWindow();
}

我的代码基于此处的Delphi示例: https://forums.embarcadero.com/thread.jspa?threadID=244599

现在,我的登录表单可以在ctrl + D后取消最小化! 希望这有助于其他c ++构建器程序员。