如何把視窗"關閉"...程式卻留在工作列繼續的工作 |
答題得分者是:RedSnow
|
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
Dear 各位前輩~
小弟我正在撰寫...toush panpel 驅動程式...目前發生一個問題...請問我要如何寫一個程式就像... EX:
1‧我們都有用過MSN嗎?...現在假如它(指MSN)在DESKTOP上面執行..而我不想在DESKTOP上看到它...請注意是按"X"喔(表示USER即將結束執行)...MSN它就會把視窗放在右下角...等到使用者確定把右下角工作列的MSN關閉..它才真正的結束工作... 2‧TRAYICON的元件我已經使用過了....不過好像沒什麼效果ㄝ...>__<... goodfeel1001
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
|
haman
中階會員 發表:46 回覆:137 積分:56 註冊:2005-03-10 發送簡訊給我 |
TrayIcon的話我的做法是…
bool CloseThis = false; void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { if(CloseThis == false) //判斷是否關閉 { TrayIcon1->Minimize(); CanClose = false; } } void __fastcall TForm1::N3Click(TObject *Sender) { CloseThis = true; //離開 Form1->Close(); } void __fastcall TForm1::N13Click(TObject *Sender) { TrayIcon1->Restore();//顯示 }==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@ |
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
Dear haman~ 您的方法不錯...但是如果我要寫的是...toush screen driver...萬一有使用者是按"X"喔(表示user 將暫時結束DESKTOP Form 的執行)... PS: 1 ‧因為TOUSH SCREEN 會被使用者...可能不段地..被碰觸....TOUSH SCREEN就像是一個平面式的滑鼠....我寫的unility..會在DESKTOP的畫面佔用很大的空間...所以必須...提供一個機制....停留在右下角的工作列上....(這情形很像是雅虎奇摩即時通或者是MSN)的情況
**********************************************************************
這個動作可以透過攔截系統訊息 (WndProc 及 Application->OnMessage) 來處理,攔截對象是 WM_SYSCOMMAND 與 SC_CLOSE,攔截到之後做您想要的處理,不要將訊息交還給系統處理即可。
********************************************************************** 所以想請問各位前輩...上面RedSnow所寫的東西...可以寫得詳細點ㄇ?... GOODFEEL
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
goodfeel1001 您好: 以下範例中的 GoHide() 是一個虛擬的自定函式,請您自行代換成您要處理的動作:
// 於 .h 檔案中: private: void __fastcall WndProc(TMessage &Message); void __fastcall AppMessage(tagMSG &Msg, bool &Handled); //------------------------------------- // 於 .cpp 檔案中: void __fastcall TMainForm::FormCreate(TObject *Sender) { Application->OnMessage = AppMessage; } // 這一段可以捕捉到 Windows Taskbar 及點擊 "程式左上角圖示" 後的系統選單中 // 將程式 "最小化" 與 "關閉" 的動作 void __fastcall TMainForm::AppMessage(tagMSG &Msg, bool &Handled) { if (Msg.message == WM_SYSCOMMAND) { if (Msg.wParam == SC_MINIMIZE || Msg.wParam == SC_CLOSE) { GoHide(NULL); // 自定函式 Handled = true; } } } // 這一段可以捕捉到 System Menu (程式右上角的 "_" 與 "x" 小按鈕) 中 // 將程式 "最小化" 與 "關閉" 的動作 void __fastcall TMainForm::WndProc(Messages::TMessage& Message) { if(Message.Msg == WM_SYSCOMMAND) { if (Message.WParam == SC_MINIMIZE || Message.WParam == SC_CLOSE) { GoHide(NULL); // 自定函式 return; } } TForm::WndProc(Message); }7 天天敲鍵盤 v 時時按滑鼠 8 |
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |