• <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  評論-173  文章-70  trackbacks-0

            8.動態添加一個菜單。即:資源文件中沒有該菜單,但是可以在代碼中進行動態的添加,使得運行的時候出現一個菜單。
            在CMainFrame的OnCreate函數中,添加如下代碼:
             CMenu menu;
             menu.CreatePopupMenu();
             GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"顯示");
             menu.AppendMenu(MF_STRING,001,"顯示1");
             menu.AppendMenu(MF_STRING,002,"顯示2");
             menu.AppendMenu(MF_STRING,003,"顯示3");
             menu.Detach();
            此函數就是實現了初始化菜單的功能。特別注意的是,需要最后的一個Detach函數,因為此函數實現了將句柄和局部變量分離的目的。
            這個是因為menu是局部變量,所以需要如此進行操作,在函數結束之后,menu會自動銷毀,所以需要。如果將menu作為該類的成員,那么就不需要進

            行這個操作

             

            9.動態添加菜單和菜單項。即:插入菜單項,某個列的菜單,或者插入某個菜單的項目到某列中。
            同樣是CMainFrame菜單中的OnCreate函數,添加如下代碼:
             CMenu menu;
             menu.CreatePopupMenu();
             GetMenu()->InsertMenu(3,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,"顯示");
             menu.AppendMenu(MF_STRING,001,"顯示1");
             menu.AppendMenu(MF_STRING,002,"顯示2");
             menu.AppendMenu(MF_STRING,003,"顯示3");
             menu.Detach();
             GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,004,"顯示4");
             GetMenu()->GetSubMenu(1)->InsertMenu(ID_EDIT_CUT,MF_BYCOMMAND|MF_STRING,005,"顯示5");

            此部分的代碼功能是:首先插入一個菜單,為“顯示”,然后在“顯示”下面插入菜單項“顯示1”,“顯示2”,“顯示3”
            然后,再在某些菜單下面添加菜單項“顯示4”和“顯示5”。

            具體講解AppendMenu和InsertMenu的使用:
            1.AppendMenu的使用。
            原型如下:
            BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
            功能:將一個新的條目插入到菜單的尾部。
            參數說明:nFlags表示的是新菜單項的信息(MF_STRING,MF_OWNERREAW,MF_SEPARATOR)
            nIDNewItem表示的是新菜單項的ID號。
            lpszNewItem表示的是新菜單項的內容。
            關鍵:插入到尾部。。(Append)

            2.InsertMenu的使用。
            原型如下:
            BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
            功能:插入一個菜單項或者菜單。第一個就是插入一個菜單:GetMenu()->InsertMenu(3,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,"顯示");
            然后在這個菜單下面添加菜單項。
            第二個是插入一個菜單項目,即“顯示5”。
            GetMenu()->GetSubMenu(1)->InsertMenu(ID_EDIT_CUT,MF_BYCOMMAND|MF_STRING,005,"顯示5");
            參數說明:
            nPosition:新插入菜單的位置。(在XX之前)
            nFlags:描述菜單的位置。BYCOMMAND是用ID號表示,BYPOSITION則是用索引表示。
            nIDNewItem:新菜單項的ID號。
            lpszNewItem:新菜單項的內容。


            10.動態添加菜單的響應消息。
            前面的代碼講解了如何動態的添加菜單,下面來說說如何響應這個菜單對應的函數。如果僅僅添加一個菜單而沒有響應的函數,那么就可能沒有效果

            。所以,需要將進行消息映射,如何?
            前面,在創建一個菜單的時候,都用到了ID,只是,具體的指定了一個值,于是,下面,我們需要將這個具體的值,產生對應的函數。
            首先,在資源文件中用 #define ID IDNum的形式來創建這個ID的值,因為只有這樣,才可以更加直觀的為我們的菜單添加函數,而且,也為后面的消

            息映射添加方便。
            其次,需要對這個ID對應的消息來響應。可是打開Classwizard后,卻發現沒有那個新加入的ID,因為不是由編譯器添加的,所以會有這個問題。
            沒關系,我們自己添加,如何呢?
            打開MainFrame.h中,在其中加入類的成員聲明:afx_msg void OnTest();
            其次,在對應的MainFrame.cpp中,加入消息映射:ON_COMMAND(ID,OnTest)   這個就實現了一個ID對應的相應函數的。
            最后,編寫實際的函數,也是在MainFrame.cpp中,加入實現的函數。

            實際上,此步驟,也即使編輯器為我們做的,我們平時在添加空間,消息中進行的一個個自動操作,編輯器都為我們自動生成了想要的代碼,完成了

            這種映射,只是,有時候我們無法完成撤銷操作,也是由于添加的代碼太過龐大繁雜罷了。

            posted on 2010-02-11 16:44 deercoder 閱讀(880) 評論(0)  編輯 收藏 引用
            91久久九九无码成人网站| 国产偷久久久精品专区| 久久狠狠色狠狠色综合| 国产成人无码精品久久久久免费| 青青草国产精品久久| 老司机午夜网站国内精品久久久久久久久 | 伊人久久大香线蕉精品不卡| 狠狠色丁香久久婷婷综合| 99久久精品日本一区二区免费| 精品久久久久久久中文字幕| 久久综合狠狠综合久久综合88| 久久香蕉国产线看观看乱码| 亚洲欧美成人久久综合中文网 | 亚洲国产精品无码成人片久久| 欧美亚洲另类久久综合| 婷婷综合久久中文字幕蜜桃三电影| 999久久久免费国产精品播放| 久久精品国产久精国产果冻传媒| 久久电影网2021| 精品国产乱码久久久久久郑州公司 | 99久久精品免费看国产一区二区三区 | 久久se精品一区二区影院| 久久久久久夜精品精品免费啦| 久久午夜福利电影| 国产福利电影一区二区三区,免费久久久久久久精 | 精品久久久无码中文字幕天天| 久久精品国产亚洲AV电影| 色天使久久综合网天天| 色婷婷综合久久久久中文字幕| 色综合久久精品中文字幕首页| 久久久久人妻精品一区| 一本色道久久综合亚洲精品| 久久精品人人做人人爽电影| 欧美激情精品久久久久久久九九九 | 狠狠色噜噜狠狠狠狠狠色综合久久| 久久香综合精品久久伊人| 伊人久久大香线蕉成人| 97久久香蕉国产线看观看| 囯产精品久久久久久久久蜜桃| 中文成人无码精品久久久不卡| 久久免费视频6|