• <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

            發現的一個道理是:
            不僅僅是控件可以和值相關聯,而且可以建立控件和一個類的關聯。
            具體來說就是,如果控件和一個值相關聯,比如和CString類型的值,或者int,或者float等等,那么就會相應的將控件的內容轉化成對應的類型。
            但是,如果將控件和類類型關聯,就是一種映射,此時,這個關聯的名字,就是這個控件的別名,而且,由于對應的控件,所以會有相應的類函數。比如是CEdit類型的控件,對應的就是CEdit類型的變量,此時,就會有相應的方法。而如果是對應的基本類型,比如CString,int,則不會有這個類型的函數可以提供操作。
            于是,更多的,就是使用這個別名的類型,因為對于一個類類型的變量,是可以調用相應的很多的方法的,從而利用提供的API函數,完成更多的功能。
            不懂的內容可以查MSDN,特別是對于CEdit類型,有很多提供的API可以供查詢。
            貼代碼:

            void CTest16Dlg::OnCopy() 
            {
             
            // TODO: Add your control notification handler code here
             m_edit1.SetSel(0,-1);
             m_edit1.Copy();
             m_edit2.SetSel(
            0,-1);
             m_edit2.ReplaceSel(
            "");
             m_edit2.Paste();
            }


            void CTest16Dlg::OnCut() 
            {
             
            // TODO: Add your control notification handler code here
             m_edit1.SetSel(0,-1);
             m_edit1.Copy();
             m_edit1.ReplaceSel(
            "");
             m_edit2.SetSel(
            0,-1);
             m_edit2.ReplaceSel(
            "");
             m_edit2.Paste();
            }


            void CTest16Dlg::OnExit() 
            {
             
            // TODO: Add your control notification handler code here
             CDialog::OnCancel();
            }


            void CTest16Dlg::OnClear() 
            {
             
            // TODO: Add your control notification handler code here
             m_edit1.SetSel(0,-1);
             m_edit1.ReplaceSel(
            "");
             m_edit2.SetSel(
            0,-1);
             m_edit2.ReplaceSel(
            "");
            }


            void CTest16Dlg::OnUndo() 
            {
             
            // TODO: Add your control notification handler code here
             m_edit1.Undo();
             m_edit2.Undo();
            }


            主要的幾個函數就是如上,關鍵的要理解控件的關聯。。。

            第二個就是ListBox地址控件的操作:

            void CTest18Dlg::OnAdd() 
            {
                
            // TODO: Add your control notification handler code here
                int index,test;
                UpdateData(TRUE);    
            //將控件的內容寫入變量中
                test = m_ListBox.FindStringExact(-1,m_name);    //查找是否有和m_name同名的項
                if(test != LB_ERR)    //含有同名的,返回值test為索引值,否則為LB_ERR
                    return ;    //此處返回的如果不是LB_ERR,那么就含有同名的,添加失敗,直接返回
                index = m_ListBox.AddString(m_name);
                m_ListBox.SetItemData(index,m_id);    
            //將相應的索引值和一個id綁定關聯
                UpdateData(FALSE);    //變量的內容寫入控件    
                GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);    //使刪除鍵可以用
            }


            void CTest18Dlg::OnDelete() 
            {
                
            // TODO: Add your control notification handler code here
                int index;
                index 
            = m_ListBox.GetCurSel(); //獲得當前的索引項
                m_ListBox.DeleteString(index); //刪除這個索引項
                index = m_ListBox.GetCurSel();
                
            if(index == LB_ERR)    //如果為空,則使得刪除鍵不可用
                    GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
            }


            void CTest18Dlg::OnExit() 
            {
                
            // TODO: Add your control notification handler code here
                CDialog::OnCancel();
            }
                



            void CTest18Dlg::OnSelchangeList() //響應鼠標選擇ListBox控件的動作,
                                            
            //具體來說就是當選擇了某一項的時候,在姓名和對于的對話框中顯示信息,對于的姓名和id。
            {
                
            // TODO: Add your control notification handler code here
                int nIndex = m_ListBox.GetCurSel();
                m_ListBox.GetText(nIndex,m_name);
                m_id 
            = m_ListBox.GetItemData(nIndex);
                UpdateData(FALSE);
            }

            功能就是:
            一個是使用ListBox,通過添加姓名和學號來向表項中添加姓名,同時,對于一個對應的姓名,當選擇的時候,顯示對應的ID和姓名。
            實現ListBox和右邊的編輯框的同步。

            最后一個就是IP控件的使用:
            void CTest17Dlg::OnButton1() 
            {
                
            // TODO: Add your control notification handler code here
                BYTE nField0;
                BYTE nField1;
                BYTE nField2;
                BYTE nField3;
                CString show_IP;
                
            int num;
                
            if(m_IPCtrl.IsBlank())
                    MessageBox(
            "請輸入IP地址");
                
            else{
                    num 
            = m_IPCtrl.GetAddress(nField0,nField1,nField2,nField3);
                    
            if(num == 4){
                        show_IP.Format(
            "%d.%d.%d.%d.",nField0,nField1,nField2,nField3);
                        MessageBox(show_IP);
                    }

                    
            else{
                        MessageBox(
            "請輸入完整的IP地址!");
                    }

                }

            }


            void CTest17Dlg::OnButton2() 
            {
                
            // TODO: Add your control notification handler code here
                CDialog::OnCancel();
            }

            其實控件的使用,API的查詢,很大程度上都是需要自己去摸索的,于是,很多時候不是什么記憶,而是練習才是最重要的。
            這里寫下來這些,一則是為了熟悉,二則是為了怕以后忘記而寫下點體會。雖然很淺陋,不過作為學習過程的體會,還是多多益善啊!




            閱讀MFC程序的幾點體會:

            首先,切換到類屬性圖中,看看有那些成員,此時特別要注意的就是沒有見過的成員,因為這個很可能就是用戶添加的,進入到這些函數,就可以弄清楚他們的具體作用。
            其次,看看里面有哪些成員,就是以m_開頭的成員變量,因為它們很可能就是用戶添加的標志位,或者是為控件捆綁的變量名,要么是值捆綁(value),要么是控制捆綁(control)
            此時如果相確認,就要到ClassWizard中查看。
            至于具體的函數,則可以查詢API,不要看程序很多,實際的代碼,用戶添加的代碼,不是很多的。。。。


            posted on 2010-02-06 18:18 deercoder 閱讀(720) 評論(0)  編輯 收藏 引用
            精品久久久久久综合日本| 亚洲欧美成人久久综合中文网| 久久久久亚洲av无码专区喷水 | 国产亚州精品女人久久久久久 | 久久精品水蜜桃av综合天堂| 国产精品久久久天天影视香蕉| 国产精品免费久久久久久久久| 久久久网中文字幕| 精品久久久久久国产91| 欧美久久亚洲精品| 99久久精品日本一区二区免费| 久久最近最新中文字幕大全| 亚洲AV无码1区2区久久 | 国产∨亚洲V天堂无码久久久| 国产成人精品免费久久久久| 国内精品久久久久影院一蜜桃| 99精品久久久久中文字幕| 91久久精品视频| 久久精品国产99久久久香蕉| 亚洲欧美另类日本久久国产真实乱对白| 国产伊人久久| 久久精品国产99国产精品亚洲| 色偷偷偷久久伊人大杳蕉| 狠狠色丁香久久婷婷综合五月| 狠狠色丁香久久综合五月| 久久精品成人| 久久久久久久久久久久中文字幕| 国内精品久久久久影院免费| 久久婷婷人人澡人人| 无码人妻少妇久久中文字幕蜜桃| 精品久久久久久无码专区不卡| 精品久久综合1区2区3区激情| 久久亚洲AV成人无码软件| 狠狠色丁香婷婷综合久久来| 开心久久婷婷综合中文字幕| 久久综合狠狠综合久久综合88| 国产综合成人久久大片91| 国内精品综合久久久40p| 国产呻吟久久久久久久92| 性做久久久久久久| 久久丝袜精品中文字幕|