用C++ Builder來定製系統選單(轉)

ba發表於2007-08-15
用C++ Builder來定製系統選單(轉)[@more@]通常在應用程式的主窗體中,利用滑鼠左鍵點選左上角的圖示,會彈出一個選單,稱之為“系統選單”。在窗體中並沒有系統選單對應的元件,所以有時我們需要定製系統選單時就比較麻煩。具體可以能過下面的步驟實現:

在系統選單上新增所需的選單項。

為新新增的選單項定義OnClick事件的處理過程。

下面的例程中,在系統選單中新增了一個“前端顯示(A)”選單項,透過該選單項,可以使窗體始終顯示在最前端或為普通窗體模式。具體實現過程如下:

1)透過選單File|New Application建立一個新的工程。

2)新增窗體Form1的OnClick事件的處理過程如下:

void _fastcall TForm1::FormCreate(Tobject *Sender)

{

//設定系統選單

AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");

AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端顯示(&A)");

}

3)在檔案Unit1.h標頭檔案中增加如下語句:

...

#include

...

4)在TForm1的型別定義中,新增系統選單中新建選單項的OnClick事件的處理過程的宣告:

...

public://User declarations

__fastcall TForm1(TComponent *Owner);

MESSAGE void __fastcall SystemMenuCommand(TWMMenuSelect &Msg);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_SYSCOMMAND,TWMMenuSelect,SysteMenuCommand);

END_MESSAGE_MAP(TForm);

};

5)手工新增系統選單中新建選單項的OnClick事件的處理過程如下:

void __fastcall TForm1::SystemMenuCommand(TWMMenuSelect &Msg)

{

TForm::Dispatch(&Msg);

if(Msg.IDItem==200)

{

if(Form1->FormStyle==fsNormal)

{

//將窗體設定為總在前端顯示

Form1->FormStyle=fsStayOnTop;

//重新設定系統選單

AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");

AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端顯示(&A)");

//在新新增的選單項前增加一個選中標誌

ModifyMenu(GetSystemMenu(Handle,false),200,MF_CHECKED,200,"前端顯示(&A)");

}

}

else

{

//將窗體設定為普通模式

Form1->FormStyle=fsNormal;

重新設定系統選單

AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");

AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端顯示(&A)");

{

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-957399/,如需轉載,請註明出處,否則將追究法律責任。

相關文章