2017-05-25 56 views
0

當我開始我的應用程序,顯示第一和唯一的形式是在模式登錄表單:如何使顯示桌面後模式窗體未減少(或Windows + d)

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

有代碼發生在ShowModal之後,它打開應用程序的主窗體(不是模態)。

當我按下顯示桌面或做窗+ d我依然模式窗體的登錄,我無法在任務欄上點擊時,你得到登錄回來。

1.有沒有辦法在'顯示桌面'後取消最小化模式登錄?另外,如果我打開我的應用程序並且登錄出現,當在任務欄>'關閉窗口'中右鍵單擊它時,似乎無法關閉該應用程序。有沒有辦法通過任務欄關閉它? (它的登錄表單的角落使用紅色的「X」時,雖然完全關閉)

我使用C++ Builder的10.1柏林

+1

這些問題與登錄表單默認情況下沒有自己的任務欄按鈕有關。只有'TApplication'或'Application.MainForm'窗口有一個任務欄按鈕,具體取決於Application.MainFormOnTaskbar屬性。你可以重寫Login Form的'CreateParams()'方法來強制它獲得它自己的任務欄按鈕。 –

回答

0

由於@Remy勒博的建議,我來到了解決方案通過重寫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++ builder程序員。