如何判斷應用程式是否為最上層 |
尚未結案
|
deal
一般會員 發表:6 回覆:33 積分:22 註冊:2003-04-07 發送簡訊給我 |
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
當使用者在其TrayIcon上觸發mouse click動作後,若此程式處於所謂的Iconic的狀態,則還原此程式並帶到最上層。
這是 TrayIcon 原有的功能所以不做任何動作
但若不是在Iconic的狀態下,則要先判斷此程式的Form(不管是不是MainForm)是否位於最上層
可以用 if (GetForegroundWindow() == Handle) 來得知目前是否位於最上層
若是,則將其最小化
WindowState = wsMinimized;
但若不是,則是要帶到最上層
SetForegroundWindow(Handle); Jesse Chan
------
Jesse Chan |
deal
一般會員 發表:6 回覆:33 積分:22 註冊:2003-04-07 發送簡訊給我 |
引言: 但若不是在Iconic的狀態下,則要先判斷此程式的Form(不管是不是MainForm)是否位於最上層 可以用 if (GetForegroundWindow() == Handle) 來得知目前是否位於最上層 若是,則將其最小化 WindowState = wsMinimized; 但若不是,則是要帶到最上層 SetForegroundWindow(Handle); Jesse ChanHi: 你的方法我試過,但是if (GetForegroundWindow() == Handle)不知為何永遠都是false,>此外,這個方法有個問題,因為我的應用程式不只一個 |
johnny_1121
一般會員 發表:12 回覆:58 積分:24 註冊:2002-04-15 發送簡訊給我 |
void __fastcall TMainForm::ShowOrHideFormPopupMenuClick(TObject *Sender) { if(!bFormShowed){ ShowWindow(Application->Handle,SW_SHOW); SendMessage(Application->Handle,WM_SYSCOMMAND,(WPARAM)SC_RESTORE,0); bFormShowed = true; } else{ SendMessage(Application->Handle,WM_SYSCOMMAND,(WPARAM)SC_MINIMIZE,0); ShowWindow(Application->Handle,SW_HIDE); bFormShowed = false; } }提供給你參考! |
deal
一般會員 發表:6 回覆:33 積分:22 註冊:2003-04-07 發送簡訊給我 |
引言:void __fastcall TMainForm::ShowOrHideFormPopupMenuClick(TObject *Sender) { if(!bFormShowed){ ShowWindow(Application->Handle,SW_SHOW); SendMessage(Application->Handle,WM_SYSCOMMAND,(WPARAM)SC_RESTORE,0); bFormShowed = true; } else{ SendMessage(Application->Handle,WM_SYSCOMMAND,(WPARAM)SC_MINIMIZE,0); ShowWindow(Application->Handle,SW_HIDE); bFormShowed = false; } }提供給你參考! >>< face="Verdana, Arial, Helvetica"> 先謝謝1121的回答,但用flag的方式我也試過,有個問題是當原本我的應用程式是在最上層時,照說此flag應是true,但當使用者按下別的應用程式視窗後,此時我的應用程式就會被蓋過去,但flag還是沒變啊!!!除非有什麼方法可以知道我的應用程式被蓋住 我有個想法是我想試,但一直不知如何下手,提供大家想想是否此法是可行,若是的話那要怎麼做呢?其實我要的功能就像是使用者在下方工作列我的應用程式所佔的區域(我不知道那要叫什麼東東)按下滑鼠左鍵的功能。比如我開了 >) |
johnny_1121
一般會員 發表:12 回覆:58 積分:24 註冊:2002-04-15 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
以下是一個解法,但假設前題是「最上層的視窗」應該會是 Active 的視窗。
只要這個條件成立,那以下的程式碼應該可以解決您的問題。
//----------------------------------------------------------------------------// __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->this->FormActivate; Application->this->FormDeactivate; } //----------------------------------------------------------------------------// void __fastcall TForm1::FormActivate(TObject *Sender) { ListBox1->Items->Add(Now().FormatString("hhnnss") "我是 Active 應該在最上層"); } //----------------------------------------------------------------------------// void __fastcall TForm1::FormDeactivate(TObject *Sender) { ListBox1->Items->Add(Now().FormatString("hhnnss") "我已 Deactive 應該不在最上層"); } //----------------------------------------------------------------------------//沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
對了,您必需另外加入旗標,就可以判斷目前是否在最上層了。
另外,這段程式並沒有判斷多個 form 或 TrayIcon click 時顯示 form 的狀況上,只是一個可能的解法。
當然也可能不是 <>沒空更新的網頁...
href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
|
deal
一般會員 發表:6 回覆:33 積分:22 註冊:2003-04-07 發送簡訊給我 |
哇!謝謝各位的回應,我想我知道問題的徵結點了,但我不知如何解決,可否請大家想想辦法。
根據GetForegroundWindow()的說明,其實此函式是得到「作用中」的HWND,而不是最上層的HWND,所以當我在TrayIcon上mouse click時用GetForegroundWindow()所捉到的應該是TrayIcon的HWND才是(謝謝1121的提醒),因此對於dllee的解法我想應該是無法達到了(我試過的確不行),所以我想請問有沒有什麼API是真的可以捉到最上層視窗,或是可以知道視窗的z-order值,或許就可以做到我要的功能了!!
|
johnny_1121
一般會員 發表:12 回覆:58 積分:24 註冊:2002-04-15 發送簡訊給我 |
引言: 根據GetForegroundWindow()的說明,其實此函式是得到「作用中」的HWND,而不是最上層的HWND,所以當我在TrayIcon上mouse click時用GetForegroundWindow()所捉到的應該是TrayIcon的HWND才是(謝謝1121的提醒),因此對於dllee的解法我想應該是無法達到了(我試過的確不行),所以我想請問有沒有什麼API是真的可以捉到最上層視窗,或是可以知道視窗的z-order值,或許就可以做到我要的功能了!!TScreen的ActiveForm,再取得Caption比對…怎樣? |
deal
一般會員 發表:6 回覆:33 積分:22 註冊:2003-04-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |