Form要如何同時存在icon及不存在右上角的system menu |
尚未結案
|
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 我想請問一下 當我將Form當中的屬性BorderIcons裡的biSystemMenu設為false之後 我的icon就會不見, 有沒有什麼方法可以讓icon仍然存在,但是biSystemMenu仍然設為false?markov你好< >: 有種感覺,你的問題都不太好回答< >! 你的意思應該是要icon存在而右邊的那3顆鍵不見,如下圖我實作的結果,不曉得可不可以: 嗯,如果可以的話,那麼有些細節要分析一下的: 方法 右邊的3個鍵加icon共有4個東東,我覺得這4個東東應該分別可以控制它們的show或不show,可是我找了一下找不到怎麼實作,找到懶得找了,不論是BCB way或SDK way… 所以我用我最會的"快快樂樂自已繪"這招,即還是把biSystemMenu設為false,再把一同消失的icon繪回上去! 範例碼 In Unitl.h ~~~ class TForm1 : public TForm { __published: // IDE-managed Components TPopupMenu *PopupMenu1; TMenuItem *N1; TMenuItem *N2; TMenuItem *N3; void __fastcall N1Click(TObject *Sender); void __fastcall N3Click(TObject *Sender); void __fastcall N2Click(TObject *Sender); void __fastcall FormCreate(TObject *Sender); private: // User declarations void __fastcall FormWndProc(TMessage&); TWndMethod OldFormWndProc; public: // User declarations __fastcall TForm1(TComponent* Owner); }; In Unit.cpp ~~~ TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { OldFormWndProc=Form1->WindowProc; Form1->WindowProc=FormWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormWndProc(TMessage& Message) { if (Message.Msg==WM_NCLBUTTONDOWN) { POINTS point; point=MAKEPOINTS(Message.LParam); TPoint p; p.x=point.x; p.y=point.y; TPoint pnt=Form1->ScreenToClient(p); if (pnt.x>=0 && pnt.x<=15) Form1->PopupMenu1->Popup(Form1->Left+1,Form1->Top+22); } OldFormWndProc(Message); if (Message.Msg==WM_NCPAINT || Message.Msg==WM_SETFOCUS || Message.Msg==WM_KILLFOCUS) { HDC dc; dc=GetWindowDC(Handle); HANDLE Hicon; Hicon=CopyImage(Application->Icon->Handle,IMAGE_ICON,0,0,LR_COPYRETURNORG); TIcon* myicon=Application->Icon; //值是自已目測抓的,因為懶得去求實際的大小 DrawIconEx(dc,5,5,myicon->Handle,16,16,NULL,NULL,DI_NORMAL); } } //--------------------------------------------------------------------------- void __fastcall TForm1::N1Click(TObject *Sender) { Application->Minimize(); } //--------------------------------------------------------------------------- void __fastcall TForm1::N3Click(TObject *Sender) { Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { ShowWindow(Handle,SW_MAXIMIZE); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->Caption=" "+Form1->Caption; }問題 發現icon雖繪上了,但是之前按下icon會出現的menu選單沒有了(正常)! 解決之道 開始想把原來那個icon的menu選單存成一個menu物件,給我們自已繪上去的那個假icon click 時用,可是try了一下沒try出,又懶得try了,直接自已做一個menu選單應該比較快,如下圖(程式碼已經在上面了): 如何?我覺得還ok啦!這樣做的重點是自已來比較快,省得找它的 >! 發表人 - |
markov
中階會員 發表:55 回覆:135 積分:53 註冊:2003-12-01 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |