請教一些欄message的問題 |
答題得分者是:syntax
|
frist
一般會員 發表:7 回覆:5 積分:2 註冊:2006-10-12 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
frist
一般會員 發表:7 回覆:5 積分:2 註冊:2006-10-12 發送簡訊給我 |
我想是我沒把問題說清楚
我舉例說明: 首先我想偵測使用者登出事件 然後ShowMessage 再登出 (在WM_QUERYENDSESSION訊息中 回傳true為登出 回傳false為不登出) 問題是 : 雖然有測得訊息但不管我回傳true或false 程式都不會登出 // 在test.h中 LRESULT __fastcall OnLogOff(TMessage &msg) ; BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage , OnLogOff) END_MESSAGE_MAP(TComponent) // 在test.cpp中 LRESULT __fastcall TForm1::OnLogOff(TMessage &msg) { ShowMessage("TEST"); rerurn true; } |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
我想你還是有地方沒說清楚
不知道你如何觸發 WM_QUERYENDSESSION 這個訊息 If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero. 只要其他程式發送 false 就會停止登出 同時我想,有時你吃掉了這個資訊,沒有讓他繼續下去,也可能是不會登出的原因 另外你對訊息,應該不是很瞭解吧 (因為你的錯誤原因是你對訊息的認知不甚正確,也許是你一時的誤認,但原因仍舊是這樣) 你 return 了什麼,你很清楚,但 你 return 給誰 ?作用是什麼? 你需要在去看一下訊息的相關文件,相信你有 看處理一個訊息時 return True 與 return False 的意義為何 而你所謂的 WM_QUERYENDSESSION 要 return True 要設定在哪裡 弄清楚後,就解決你的問題了 方便的話把你找到的答案貼上來吧 |
frist
一般會員 發表:7 回覆:5 積分:2 註冊:2006-10-12 發送簡訊給我 |
沒人回答 只好自救了 = ="
其實只差一行指令 Dispatch // 在test.h中 public: void __fastcall OnQK(TMessage &msg) ; BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,OnQK) END_MESSAGE_MAP(TObject) // 在test.cpp中 void __fastcall TForm1::OnQK(TMessage &msg) { int iReBtn = MessageDlg("要登出嗎?",mtWarning,TMsgDlgButtons() << mbYes << mbNo,0); if (iReBtn == mrYes) { msg.Result = true; } else if (iReBtn == mrNo) { msg.Result = false; } Dispatch(&msg.Result); } |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
別要說的那麼可憐麼!
自己找到答案,學到的最多 另外,這次你用的型態是 void 與先前的 LRESULT __fastcall 差異在哪嗎? 補充一下 如果使用 LRESULT __fastcall,就必需要 return True 或是 return False 這個 return 是控制下層訊息處理機制,這時就不需要再去 Dispatch(&msg.Result); 不然訊息會被處理兩次 而針對訊息的所要傳回的值,不管是數值、或是 True or False 都是設定在訊息內,也就是 msg.Result = true; or msg.Result = false; 你第一次之所以會都不成功,應該是在此產生混淆了,所以我其實已經回答你的問題,只要你有思考過 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |