欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC如何定制對話(huà)框系統菜單
本文例子是一個(gè)典型的C++/MFC對話(huà)框程序,設置了 EX_WM_TOOLWINDOW 擴展式樣,因此在標題欄左上角看不到系統菜單圖標,但通過(guò) Ctrl+Space 或者在標題欄單擊鼠標右鍵可以調出系統菜單。例子程序對系統菜單進(jìn)行了定制,在原有菜單基礎上添加了兩個(gè)菜單命令:一個(gè)是顯示“關(guān)于”對話(huà)框;另一個(gè)是“退出”。之所以要加一個(gè)“退出”菜單命令,是因為例子程序改寫(xiě)了對話(huà)框原來(lái)默認的“關(guān)閉”菜單命令行為(Alt-F4),用來(lái)隱藏對話(huà)框。因此必須加一個(gè)程序的“退出”出口。此外,例子程序利用一個(gè)第三方的系統托盤(pán)處理類(lèi),利用系統托盤(pán)圖標可以顯示/隱藏對話(huà)框。 下面我們就來(lái)看看用 C++/MFC 實(shí)現的細節。 


     添加菜單 

     首先在資源定義文件 resource.h 中定義菜單項標示,也可以在標準頭文件中定義。菜單項標示必須具有唯一性。其次,Windows 對系統菜單的處理與常規菜單的處理方法是不同的,不管是缺省的菜單還是定制的菜單,它們都沒(méi)有象常規菜單命令那樣的消息處理例程。假設我們要添加兩個(gè)定制的系統單:

#define IDM_ABOUT 16
#define IDM_EXIT 17
IDM_的意思是該定義為菜單項ID。添加菜單命令是在對話(huà)框的初始化例程以及窗口創(chuàng )建函數(OnInitDialog(), OnCreate())中進(jìn)行的。如: BOOL CBabelOnDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 在系統菜單中添加 "關(guān)于..." 和 "退出" 菜單項


// 解決 Windows 95 中的 bug
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

// 命令 IDs 必須在預定義的系統菜單之后
ASSERT(IDM_ABOUTBOX < 0xF000);

// 解決 Windows 95 中的 bug
ASSERT((IDM_EXIT & 0xFFF0) == IDM_EXIT);

// 命令 IDs 必須在預定義的系統菜單之后
ASSERT(IDM_EXIT < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
pSysMenu->AppendMenu(MF_STRING,IDM_EXIT,"退出(&x)");
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, "關(guān)于(&A)...");
......
}

......

//other initialization
}
  這里在添加每個(gè)菜單前都有兩個(gè) ASSERT 語(yǔ)句,第一個(gè) ASSERT 的目的是修復 Windows 95 中存在的 Bug,第二個(gè) ASSERT 保證定制的命令 IDs 是在預定義的系統菜單之后,以免發(fā)生沖突。查一下 MSDN 庫的 MFC 文檔關(guān)于系統菜單的描述,你會(huì )發(fā)現下面的內容: “......所有預定義的控制菜單項(也就是系統菜單)的ID號必須大于 0xF000。如果某個(gè)應用程序要添加系統菜單,
其系統菜單的 ID 號必須小于F000。”
接下來(lái),用 GetSystemMenu 函數獲取系統菜單指針。調用時(shí)使用參數 FALSE 獲取指針。如果用 TRUE 作為參數,那么該函數會(huì )將菜單重置回缺省狀態(tài)。
如果得到的指針有效,接著(zhù)調用菜單添加命令在系統菜單后面添加菜單項,傳遞菜單IDs以及菜單顯示時(shí)所用的字符串。 

     處理定制的菜單命令 

     為了讓這些系統菜單命令工作起來(lái),我們不能依賴(lài)常規的菜單消息處理機制----即便菜單項相同。通常系統菜單通過(guò) WM_SYSCOMMAND 消息處理: void CBabelOnDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
//trap our own system menu messages
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
} else if ((nID & 0xFFF0)==SC_CLOSE){
OnClose();
} else if ((nID & 0xFFF0)==IDM_EXIT) {
::PostQuitMessage(0);
}
else {
CDialog::OnSysCommand(nID, lParam);
}
}
  通過(guò)比較傳入的菜單ID進(jìn)行相應的處理。注意代碼中又有兩個(gè)“nID & 0xFFF0”,這主要也是解決 Windows 95 的 bug。如果選擇“退出”,那么會(huì )向應用程序發(fā)送退出消息:::PostQuitMessage(0)。
注意第二個(gè)條件檢查:SC_CLOSE 是個(gè)預定義的菜單常量。一般它是由 Windows 處理的,因為在例子程序中我們對它進(jìn)行了定制,所以必須要自己處理它。本來(lái) SC_CLOSE 是退出程序,但例子程序我們把它的行為改寫(xiě)成隱藏對話(huà)框,也就是將應用變成一個(gè)托盤(pán)小圖標,處理例程見(jiàn) OnClose() 函數。如果傳入的菜單ID不等于任何定制的菜單項,那么就讓 Windows 對它進(jìn)行默認處理: CDialog::OnSysCommand(nID, lParam);
下面是幾個(gè)最常用的系統菜單命令:
 
菜單 說(shuō)明

SC_CLOSE 關(guān)閉 CWnd 對象
SC_MAXIMIZE 或者 SC_ZOOM 最大化 CWnd 對象
SC_MINIMIZE 或者 SC_ICON 最小化 CWnd 對象
SC_MOVE 移動(dòng) CWnd 對象
SC_RESTORE 恢復窗口的正常位置和大小
SC_SIZE 改變 CWnd 對象大小 

     其它的幾個(gè)系統菜單命令一般都是在特殊情況下才使用,有關(guān)細節請參考有關(guān) WM_SYSCOMMAND 的文檔。

修改現有的菜單命令 

     我們已經(jīng)看到,系統菜單本身默認的處理行為是可以改變的,除此之外,系統菜單項的描述文本也是可以改變的,甚至還可以刪除它們。為了修改才單命令的描述文本,我們可以用 pSysMenu 指針調用 ModifyMenu() 函數。例如,如果想要把“關(guān)閉”菜單項改成“隱藏”,可以象下面這么做: 

     pSysMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND,IDM_HIDE, "隱藏(&H)");
MF_BYCOMMAND 參數告訴該函數將 SC_CLOSE 解釋為命令 ID。IDM_HIDE 是新的菜單 ID。最后一個(gè)參數是菜單項的說(shuō)明文本。還有一種調用 ModifyMenu() 的方法是使用 菜單項索引作為參數:

 pSysMenu->ModifyMenu(0,MF_BYPOSITION,IDM_HIDE,"隱藏(&H)");
第一個(gè)參數 0 表示菜單項的索引,指第一個(gè)菜單。 

刪除菜單命令 

     例子程序擬將去掉系統菜單中的窗口“關(guān)閉”命令,暫且不說(shuō)這樣做是否合適,但是我能做到這一點(diǎn):

 pSysMenu->RemoveMenu(SC_CLOSE,MF_BYCOMMMAND);
pSysMenu->RemoveMenu(0,MF_BYPOSITION);

第一行代碼刪除了與 SC_CLOSE 關(guān)聯(lián)的菜單命令。而第二行代碼表示刪除系統菜單命令中的第一項。 

     用這種方式修改系統菜單盡管限定了應用程序的某些行為,但對于小型應用和實(shí)用程序來(lái)說(shuō)有時(shí)是很有用的,尤其是當你想要從任務(wù)欄存取菜單命令時(shí)----也就是程序在后臺運行或者以最小化方式運行,右鍵單擊任務(wù)欄圖標將彈出系統菜單

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WM_COMMAND & WM_SYSCOMMAND
WIN10關(guān)機時(shí)間長(cháng)如何破!
【W(wǎng)indows XP系統收藏夾的另類(lèi)使用方法】
第1章 MATLAB操作基礎
菜單及其它資源
系統小技巧:另辟蹊徑 啟動(dòng)“服務(wù)管理”
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久