• <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
            開始學習MFC,各位高手不要見笑啊。

            其實之前一直都在陸續的學習中,不過看書和動手相差太遠了,所以一直沒有長進,今天動手寫了小的程序,就出現了很多狀況,于是不得不好好的思考和查找資料,也收獲了不少。

            這個是第一個成功的程序。第一個就是一個小的對話框,點擊上面的add按鈕,就會出現一個Test的按鈕,然后再次點擊的時候,就會消失,此時就會出現循環的出現和消失的情況,而如果不點擊的時候,就會保持那種狀態。
            先上了一張圖:



            (高手們暗笑吧)那個按鈕就是動態生成的,而那個MessageBox則是點擊動態生成的按鈕出現的。
            問題和解答:
            1)如何實現顯示和不顯示呢?
            添加類的成員變量。這里是一個dlg,對話框的類,因此切換到類的層次結構圖中,然后點擊右邊,添加member variable,添加兩個變量,一個是BOOL類型的,一個是CButton類型的,其中后者,就是那個要創建的按鈕的名稱。
            如何實現呢?很簡單,添加方法。在拖住一個button控件后,雙擊,生成一個響應函數,那么在里面添加的話就直接響應了add按鈕了。
            然后,里面的就是填充函數體了,來一個if判斷,如果剛才的那個BOOL類型的變量為true或者是false,就響應的創建或者銷毀,注意完成之后,需要重新設置,使得下次點擊的時候可以再次起作用。
            至此,就完成了前面的那部分功能。

            2)如何實現響應動態生成的按鈕呢?
            動態生成的按鈕,如何得到ID,然后響應呢?
            (參加blog:http://www.shnenglu.com/deercoder/articles/107132.html
            那么我具體說說我做的吧。(本來書上在Create的最后一個參數是123,也就是一個整數,對它來說沒有作用,所以直接整數)
            但是對于我來說,由于要繼續實現響應這個按鈕的動作,于是不得不得到具體的這個ID,那么,我就要用一個宏來定義了。
            在resources.h里面添加#define    IDC_1 123,然后替換,就OK了。
            然后剩下的問題是響應,通過查資料,知道了基本步驟是:
            CButton *p_Button = new CButton();
            p_Button
            ->Create( "Good", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, ID_MYBUT1 ); 
            然后添加:
            afx_msg 
            void OnMybut1()
            ON_BN_CLICKED(ID_MYBUT1, OnMybut1)
            最后
            void CTextEditorView::OnMybut1()
            {
            MessageBox( 
            "哈!你單擊了動態按鈕。" );
            }

            我知道這樣可以動態創建一個按鈕并添加消息響應函數,但其消息響應函數還是手動
            添加,我想問一下有沒有一種方法,可以動態創建一個按鈕后再動態創建其消息響應函數?

             這個是網上摘錄的。但是添加后明顯就知道有錯誤。如何實現呢?看看剛剛那篇blog吧,
            afx_msg void OnMybut1()和ON_BN_CLICKED(ID_MYBUT1, OnMybut1)放在一起肯定是不行的,而以前看過的《深入淺出MFC》則在這個上面講了很多,特別是消息映射和消息的響應。于是了解到:
            ON_BN_CLICKED(ID_MYBUT1, OnMybut1)-----------------將相應的ID_MYBUT1關聯到函數OnMybut1   (放在實現中,有其他的類似的東西,那些paint等等函數也都是這樣映射到ID的,實現方法的。因此放在.cpp文件中)

            代碼如下:
            BEGIN_MESSAGE_MAP(CTeswDlg, CDialog)
             //{{AFX_MSG_MAP(CTeswDlg)
             ON_WM_PAINT()
             ON_WM_QUERYDRAGICON()
             ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
             ON_BN_CLICKED(IDC_1, OnMybut1)
             //}}AFX_MSG_MAP
            END_MESSAGE_MAP()



            afx_msg void OnMybut1()---------------------------------------(Generated message map functions)消息映射函數(放在類定義中,其中注釋的那個部分說明了這個的具體位置,有很多函數,比如,OnInitDialog , Onpaint等等函數。因此也是類的成員函數)代碼部分如下
            (由于是聲明,放在.h文件中):
            protected:
             HICON m_hIcon;

             // Generated message map functions
             //{{AFX_MSG(CTeswDlg)
             virtual BOOL OnInitDialog();
             afx_msg void OnPaint();
             afx_msg HCURSOR OnQueryDragIcon();
             afx_msg void OnButton1();
             afx_msg void OnMybut1();
             //}}AFX_MSG
             DECLARE_MESSAGE_MAP()
            };



            將這兩者完成后,實際上就完成了大部分工作,不過還是不夠啊。

            下面的,具體實現那個方法,即void OnMybut1();到底是哪個類的成員函數呢?我如何定義呢?

            前面的問題其實就解決了。如何,在.h文件中,我既然用到了消息映射的函數,而且在class中,那么自然是這個class的子函數,于是就是用到這個類的,前面的Demo小例子,用的是TextEdit,這里是一個DLG,要具體的分析,于是改正之后,就變成了下面的的這個。
            void CTeswDlg::OnMybut1()
            {
             MessageBox( "哈!你單擊了動態按鈕。" );
            }

            這樣,就OK了。

            看到結果就會發現,其實處理的函數都沒有變,只是添加了一個新的消息映射和button,由他們來自動處理,與我們原來的那個add按鈕的函數是沒有任何關系的。兩者獨立。

            于是程序就完了。結果很簡單,入門不容易。。。。



            源代碼我上傳到程序員聯合開發網,下載地址為:http://www.pudn.com/downloads225/sourcecode/windows/control/button/detail1058419.html
            ok,完了。繼續學習中………………(寒假閉關修煉,哈哈!!)

            posted on 2010-02-03 23:17 deercoder 閱讀(3420) 評論(0)  編輯 收藏 引用
            久久久久亚洲爆乳少妇无 | 亚洲国产精品久久久久久| 欧美熟妇另类久久久久久不卡 | 久久婷婷五月综合97色直播| 久久男人中文字幕资源站| 2020久久精品亚洲热综合一本| 色婷婷综合久久久久中文一区二区| 久久久久亚洲精品天堂| 久久精品国产精品亚洲下载| 亚洲狠狠婷婷综合久久蜜芽| 欧美日韩精品久久久免费观看| 欧美熟妇另类久久久久久不卡 | 色青青草原桃花久久综合| 国产精品久久久久久久久免费 | 国内精品久久久久久久coent| 中文字幕精品无码久久久久久3D日动漫| 久久棈精品久久久久久噜噜| 久久久国产精品| 91久久成人免费| 国产精品欧美久久久天天影视| 囯产极品美女高潮无套久久久| 人人狠狠综合久久亚洲高清| 国产成人综合久久综合| 日韩人妻无码精品久久久不卡| 一本色综合久久| 亚洲国产成人久久一区久久| 国产精品免费久久久久电影网| 69国产成人综合久久精品| 亚洲中文字幕久久精品无码APP| 久久综合给合综合久久| 久久精品成人欧美大片| 久久成人永久免费播放| 精品999久久久久久中文字幕| AV狠狠色丁香婷婷综合久久| 亚洲精品无码久久久久| 久久综合给合久久狠狠狠97色| 亚洲精品无码久久久久久| 久久婷婷五月综合色奶水99啪| 欧美牲交A欧牲交aⅴ久久| 国产精品对白刺激久久久| 欧美精品一区二区精品久久|