將視窗彈出到最上層 的問題 |
答題得分者是:RaynorPao
|
builder78
初階會員 發表:36 回覆:100 積分:47 註冊:2003-02-03 發送簡訊給我 |
我想寫一個提醒視窗~ 當事件發生時~ 彈跳出一個視窗在最上層~
(若原本最小化要秀出視窗並彈到最上層~ 沒最小化也要跳到最上層)~
此時使用者可以選擇將這視窗最小化 或 把焦點移到別的視窗~ 我用一個Timer模擬事件的發生
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來
SetForegroundWindow(Handle); //設定焦點
}
可是我發現當視窗彈出後只能最小化一次~ 當它又彈出來時
想要第二次最小化時~ 卻發現按最小化鈕無作用??? 怎會如此
我是用Windows XP作業系統的 又換了下面的程式後~ 但若按最小化就彈不出視窗了??~~
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (IsIconic(Handle)) //檢查是否最小化
ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來
else
BringWindowToTop(Handle); //帶到最上層 SetForegroundWindow(Handle); //設焦點
} 各位大人~ 有辦法解決嗎?~~
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我想寫一個提醒視窗~ 當事件發生時~ 彈跳出一個視窗在最上層~ (若原本最小化要秀出視窗並彈到最上層~ 沒最小化也要跳到最上層)~ 此時使用者可以選擇將這視窗最小化 或 把焦點移到別的視窗~ 我用一個Timer模擬事件的發生 void __fastcall TForm1::Timer1Timer(TObject *Sender) { ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 SetForegroundWindow(Handle); //設定焦點 } 可是我發現當視窗彈出後只能最小化一次~ 當它又彈出來時 想要第二次最小化時~ 卻發現按最小化鈕無作用??? 怎會如此 我是用Windows XP作業系統的 又換了下面的程式後~ 但若按最小化就彈不出視窗了??~~ void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (IsIconic(Handle)) //檢查是否最小化 ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 else BringWindowToTop(Handle); //帶到最上層 SetForegroundWindow(Handle); //設焦點 } 各位大人~ 有辦法解決嗎?~~builder78 你好: 請參考以下的做法
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
builder78
初階會員 發表:36 回覆:100 積分:47 註冊:2003-02-03 發送簡訊給我 |
看了文章 試了 四種方法~ 都無用耶~~ (1)保持最上層~ 但不是我要到~ 最小化後時間到也不會彈跳出來
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); (2)時間到會有焦點 但一樣 最小化後時間到也不會彈跳出來
BringWindowToTop(Handle);
SetForegroundWindow(Handle);
SetActiveWindow(Handle);
keybd_event(VK_RETURN, (BYTE)MapVirtualKey(VK_RETURN, 0), 0, 0); //模擬按下Enter鍵
keybd_event(VK_RETURN, (BYTE)MapVirtualKey(VK_RETURN, 0), KEYEVENTF_KEYUP, 0); //模擬放開Enter鍵 (3)時間到 工作列上的視窗有被壓下的形狀 但一樣彈跳不出來
DWORD Th1 = GetCurrentThreadId();
DWORD Th2 = GetWindowThreadProcessId(GetForegroundWindow,NULL);
AttachThreadInput(Th2, Th1, true);
try
{
SetForegroundWindow(Application->Handle);
}
__finally
{
AttachThreadInput(Th2, Th1, false);
} (4)時間到會有焦點~ 有時會閃~ 但一樣 最小化後時間到也不會彈跳出來
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE);
SetForegroundWindow(Application->MainForm->Handle); 看來..... 算了~ 先研究別的好了~... -___-||
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 看了文章 試了 四種方法~ 都無用耶~~ 看來..... 算了~ 先研究別的好了~... -___-||builder78 你好: 試試看以下的做法 < class="code"> if(IsIconic(Application->Handle)) { ShowWindow(Application->Handle, SW_RESTORE); } else { SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE); SetForegroundWindow(Application->MainForm->Handle); } -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
builder78
初階會員 發表:36 回覆:100 積分:47 註冊:2003-02-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |