• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0

            ==============================================第二章===================================================

            1.標(biāo)記菜單的設(shè)計(jì),如何初始化一個(gè)菜單,標(biāo)記它是否選中。。
            范例中,初始化某個(gè)菜單項(xiàng),并在它的前面打鉤。

            實(shí)現(xiàn)方法:
            在CMainFrame中的OnCreate()函數(shù)中return 0前面添加代碼:
            /*
            GetMenu()是獲得當(dāng)前窗口的菜單,而GetSubMenu則是獲得子菜單,其中參數(shù)為0表示的是第一個(gè)的,下面的CheckMenuItem則是標(biāo)記或者取消
            彈出的菜單,注意的是函數(shù)的第一個(gè)參數(shù)還是項(xiàng)數(shù),后面的那個(gè)MF_BYPOSITION|MF_CHECKED則表示如何標(biāo)記以及如何表示
            */
             GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION|MF_CHECKED); //初始化的時(shí)候?qū)?duì)應(yīng)的菜單項(xiàng)打勾
            其中,各個(gè)子函數(shù)的意義需要理解,后面可能會(huì)用到。


            2.默認(rèn)菜單中的字體粗體顯示。如何實(shí)現(xiàn)粗體顯示一個(gè)菜單中的項(xiàng),這個(gè)作用當(dāng)然是讓用戶知道默認(rèn)的選擇項(xiàng)是什么了。

            實(shí)現(xiàn)方法:
            在CMainFrame中的OnCreate函數(shù)中添加代碼:

             GetMenu()->GetSubMenu(0)->SetDefaultItem(2,TRUE);
             GetMenu()->GetSubMenu(2)->SetDefaultItem(ID_VIEW_STATUS_BAR,FALSE);
            其中關(guān)鍵就是函數(shù)>SetDefaultItem的使用,它有兩個(gè)參數(shù),第一個(gè)和第二個(gè)的是由聯(lián)系的。
            當(dāng)?shù)诙€(gè)參數(shù)是FALSE的時(shí)候,第一個(gè)項(xiàng)表示對(duì)應(yīng)的索引值(注意索引值是從0開始的)
            當(dāng)?shù)诙€(gè)參數(shù)是TRUE的時(shí)候,第一個(gè)項(xiàng)表示的是對(duì)應(yīng)的ID表示。


            3.圖形標(biāo)記菜單,如何實(shí)現(xiàn)菜單中由圖形的顯示方式。
            實(shí)現(xiàn)方式:
             m_bitmap1.LoadBitmap(IDB_BITMAP1);
             GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap1,&m_bitmap1);
             m_bitmap2.LoadBitmap(IDB_BITMAP2);
             GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(1,MF_BYPOSITION,&m_bitmap2,&m_bitmap2);
            其中,變量m_bitmap1,m_bitmap2是自己在CMainFrame中添加的成員變量CBitmap類型的。然后在資源文件中添加了兩個(gè)Bitmap資源。
            最后,在使用函數(shù)SetMenuItemBitmaps來導(dǎo)入到菜單中。。
            介紹函數(shù)SetMenuItemBitmaps的使用方法:
            BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked );
            nPosition

            Specifies the menu item to be changed. The nFlags parameter can be used to interpret nPosition in the following ways:

            nFlags

            Specifies how nPosition is interpreted.

            pBmpUnchecked

            Specifies the bitmap to use for menu items that are not checked.

            pBmpChecked

            Specifies the bitmap to use for menu items that are checked.
            注意:在設(shè)計(jì)位圖的時(shí)候,需要將大小設(shè)計(jì)為13 X 13像素的,否則顯示會(huì)出現(xiàn)問題。


            4.如何使得菜單項(xiàng)不可用,屏蔽某些菜單,使得點(diǎn)擊的時(shí)候沒有相應(yīng)的函數(shù)和操作可用。
            實(shí)現(xiàn)代碼:
             m_bAutoMenuEnable = FALSE; //在CMainFrame的構(gòu)造函數(shù)中設(shè)置,必須,否則無效
            在OnCreate函數(shù)的代碼體中加入:
             GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED); //使得對(duì)應(yīng)的菜單項(xiàng)無效。

             

            5.如何使得菜單消失?通過函數(shù)SetMenu(NULL)實(shí)現(xiàn)。
            添加一個(gè)菜單,然后建立想要的消息函數(shù),在函數(shù)體內(nèi)加入代碼,如下:
            void CMainFrame::OnDis()
            {
             // TODO: Add your command handler code here
             SetMenu(NULL);
            }
            注意,關(guān)于此類操作的函數(shù),都是由CMainFrame作為主類的,函數(shù)都是在這個(gè)下面的操作。前面的基于菜單的操作也是,因?yàn)椴藛蔚牟僮饕彩强傮w上

            都是整體的一個(gè)操作。所以需要注意類屬關(guān)系。


            6.使得單個(gè)菜單項(xiàng)失效或者生效。通過添加ID對(duì)應(yīng)的消息,使得菜單生效和失效。
            看代碼:
            void CMainFrame::OnUpdateFileOpen(CCmdUI* pCmdUI)
            {
             // TODO: Add your command update UI handler code here
             if(ID_FILE_OPEN == pCmdUI->m_nID)
              pCmdUI->Enable(FALSE); //失效
            }

            void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI)
            {
             // TODO: Add your command update UI handler code here
            // if(ID_EDIT_CUT == pCmdUI->m_nID)
            //  pCmdUI->Enable(TRUE); //生效
            }

            void CMainFrame::OnUpdateFileMruFile1(CCmdUI* pCmdUI)
            {
             // TODO: Add your command update UI handler code here
             
             if(ID_FILE_MRU_FILE1 == pCmdUI->m_nID)
              pCmdUI->Enable(TRUE); //生效
            }
            對(duì)于某個(gè)具體的菜單項(xiàng),在ClassWizard中CMainFrame中,找到ID對(duì)應(yīng)的消息,然后添加函數(shù),注意是
            CN_UPDATE_COMMAND_UI消息,然后在函數(shù)中,使用上面的通用方法判斷。
            if( ID == pCmdUI->m_nID)
             設(shè)置為生效或者失效。

            從而,可以實(shí)現(xiàn)單個(gè)菜單項(xiàng)的生效或者失效。注意,前面的屏蔽菜單和這個(gè)的作用是相似的。不過函數(shù)不同,前面的那個(gè)是EnableMenuItem選項(xiàng)。

             

            posted on 2010-02-10 16:18 deercoder 閱讀(734) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            欧美大香线蕉线伊人久久| 欧美黑人又粗又大久久久| 日本加勒比久久精品| 久久综合一区二区无码| 久久91精品国产91久| 精品久久久久久国产潘金莲 | 夜夜亚洲天天久久| 久久久久久久国产免费看| 男女久久久国产一区二区三区| 精品久久久久久无码人妻热| 亚洲va国产va天堂va久久| 精品免费久久久久国产一区| 久久影院综合精品| 亚洲欧美国产精品专区久久| 精品久久香蕉国产线看观看亚洲| 一本大道久久香蕉成人网| 久久久久久久尹人综合网亚洲| 午夜精品久久久久久| 一本一道久久a久久精品综合| 91久久精品视频| 精品久久久久久亚洲精品 | 69SEX久久精品国产麻豆| 一本久久知道综合久久| 亚洲一区精品伊人久久伊人| 国产精品免费看久久久香蕉| 93精91精品国产综合久久香蕉| 日日噜噜夜夜狠狠久久丁香五月| 伊人久久无码精品中文字幕| 久久久久久A亚洲欧洲AV冫| 久久香蕉国产线看观看乱码| 2022年国产精品久久久久 | 国产婷婷成人久久Av免费高清| 久久精品国产99国产精品亚洲| 2021国产精品久久精品| 久久伊人五月天论坛| 亚洲欧洲中文日韩久久AV乱码| 久久性生大片免费观看性| 无码8090精品久久一区| 中文精品99久久国产 | 久久精品国产99久久久| 精品久久久久久综合日本|