天天看點

GetSystemMenu(FALSE)

GetSystemMenu

參數為False時傳回目前視窗系統菜單(視窗标題欄右鍵彈出的移動、大小、最大化等)的句柄。

        系統菜單是指我們點選窗體左上角的小圖示時所彈出的菜單,其中好象有“恢複”.“移動”.“最大化”.“最小化”.“關閉”這麼幾個按鈕.這個菜單用普通的方法是不能編輯與改變的,但是我們可以通過api函數getsystemmenu來得到它的句柄,然後通過菜單相關的api函數就能改變它了。

         如果括号中參數為FALSE,GetSystemMenu傳回目前使用視窗菜單的拷貝的句柄。該拷貝初始時與視窗菜單相同,但可以被修改。

         如果此參數為TRUE,GetSystemMenu重置視窗菜單到預設狀态。如果存在先前的視窗菜單,将被銷毀。

         任何沒有用函數GetSystemMenu來生成自己的視窗菜單拷貝的視窗将接受标準視窗菜單。

         視窗菜單上的菜單項發送WM_SYSCOMMAND消息.

在一個對話框工程中:

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

   CString strAboutMenu;

   strAboutMenu.LoadString(IDS_ABOUTBOX);

   if (!strAboutMenu.IsEmpty())

   {

    pSysMenu->AppendMenu(MF_SEPARATOR);//添加一條水準線

    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);//IDM_ABOUTBOX表示要執行的動作,因為在點選這個菜單項時,将會發送消息,消息中nID就是這個ID,通過比對ID産生相應的動作

   }

}

void CADO_TestDlg::OnSysCommand(UINT nID, LPARAM lParam)

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

   CAboutDlg dlgAbout;

   dlgAbout.DoModal();

else

   CDialog::OnSysCommand(nID, lParam);

      隻有在主視窗是對話框的MFC應用程式中才會出現這個消息IDM_ABOUTBOX。

       IDM_ABOUTBOX是MFC架構在“InitDialog”函數中加入的“系統菜單”消息,用來彈出“IDD_ABOUTBOX”指定的對話框。

       關于((nID & 0xFFF0) == IDM_ABOUTBOX):

       在MSDN中SysCommand的幫助中,有這樣一段:

       In WM_SYSCOMMAND messages, the four low-order bits of the nID parameter are used internally by Windows. When an application tests the value of nID, it must combine the value 0xFFF0 with the nID value by using the bitwise-AND operator to obtain the correct result.  

       即nID的低四位是Windows内部用的,應用程式在檢測這個ID時,必須用 0xFFF0與nID相與,屏蔽低四位,根據相與的結果來産生相應的動作

繼續閱讀