3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC 最详细入门教程

發布時間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC 最详细入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

From:https://blog.csdn.net/wang18323834864/article/details/78621633/

Visual Studio 2019:https://visualstudio.microsoft.com/zh-hans/

?

雞啄米?-----?VS2010/MFC編程入門教程之目錄和總結:http://www.jizhuomi.com/software/257.html

??????一、VS2010/MFC編程入門教程之目錄

???????第一部分:VS2010/MFC開發環境

???????VS2010/MFC編程入門之前言
???????VS2010/MFC編程入門之一(VS2010與MSDN安裝過程圖解)

???????第二部分:VS2010/MFC應用程序框架

???????VS2010/MFC編程入門之二(利用MFC向導生成單文檔應用程序框架)
???????VS2010/MFC編程入門之三(VS2010應用程序工程中文件的組成結構)
???????VS2010/MFC編程入門之四(MFC應用程序框架分析)
???????VS2010/MFC編程入門之五(MFC消息映射機制概述)

???????第三部分:對話框

???????VS2010/MFC編程入門之六(對話框:創建對話框模板和修改對話框屬性)
????? ?VS2010/MFC編程入門之七(對話框:為對話框添加控件)
???????VS2010/MFC編程入門之八(對話框:創建對話框類和添加控件變量)
???????VS2010/MFC編程入門之九(對話框:為控件添加消息處理函數)
???????VS2010/MFC編程入門之十(對話框:設置對話框控件的Tab順序)
???????VS2010/MFC編程入門之十一(對話框:模態對話框及其彈出過程)
???????VS2010/MFC編程入門之十二(對話框:非模態對話框的創建及顯示)
???????VS2010/MFC編程入門之十三(對話框:屬性頁對話框及相關類的介紹)
???????VS2010/MFC編程入門之十四(對話框:向導對話框的創建及顯示)
???????VS2010/MFC編程入門之十五(對話框:一般屬性頁對話框的創建及顯示)
???????VS2010/MFC編程入門之十六(對話框:消息對話框)
???????VS2010/MFC編程入門之十七(對話框:文件對話框)
???????VS2010/MFC編程入門之十八(對話框:字體對話框)
???????VS2010/MFC編程入門之十九(對話框:顏色對話框)

???????第四部分:常用控件

???????VS2010/MFC編程入門之二十(常用控件:靜態文本框)
???????VS2010/MFC編程入門之二十一(常用控件:編輯框Edit Control)
???????VS2010/MFC編程入門之二十二(常用控件:按鈕控件Button、Radio Button和Check Box)
???????VS2010/MFC編程入門之二十三(常用控件:按鈕控件的編程實例)
???????VS2010/MFC編程入門之二十四(常用控件:列表框控件ListBox)
???????VS2010/MFC編程入門之二十五(常用控件:組合框控件Combo Box)
???????VS2010/MFC編程入門之二十六(常用控件:滾動條控件Scroll Bar)
???????VS2010/MFC編程入門之二十七(常用控件:圖片控件Picture Control)
???????VS2010/MFC編程入門之二十八(常用控件:列表視圖控件List Control 上)
???????VS2010/MFC編程入門之二十九(常用控件:列表視圖控件List Control 下)
???????VS2010/MFC編程入門之三十(常用控件:樹形控件Tree Control 上)
???????VS2010/MFC編程入門之三十一(常用控件:樹形控件Tree Control 下)
???????VS2010/MFC編程入門之三十二(常用控件:標簽控件Tab Control 上)
???????VS2010/MFC編程入門之三十三(常用控件:標簽控件Tab Control 下)

???????第五部分:菜單、工具欄與狀態欄

???????VS2010/MFC編程入門之三十四(菜單:VS2010菜單資源詳解)
???????VS2010/MFC編程入門之三十五(菜單:菜單及CMenu類的使用)
???????VS2010/MFC編程入門之三十六(工具欄:工具欄資源及CToolBar類)
???????VS2010/MFC編程入門之三十七(工具欄:工具欄的創建、停靠與使用)
???????VS2010/MFC編程入門之三十八(狀態欄的使用詳解)

???????第六部分:文檔、視圖和框架

???????VS2010/MFC編程入門之三十九(文檔、視圖和框架:概述)
???????VS2010/MFC編程入門之四十(文檔、視圖和框架:各對象之間的關系)
???????VS2010/MFC編程入門之四十一(文檔、視圖和框架:分割窗口)

???????第七部分:MFC常用類

???????VS2010/MFC編程入門之四十二(MFC常用類:CString類)
???????VS2010/MFC編程入門之四十三(MFC常用類:CTime類和CTimeSpan類)
???????VS2010/MFC編程入門之四十四(MFC常用類:定時器Timer)
???????VS2010/MFC編程入門之四十五(MFC常用類:CFile文件操作類)
???????VS2010/MFC編程入門之四十六(MFC常用類:MFC異常處理)

???????第八部分:字體和文本輸出

???????VS2010/MFC編程入門之四十七(字體和文本輸出:CFont字體類)
???????VS2010/MFC編程入門之四十八(字體和文本輸出:文本輸出)

???????第九部分:圖形圖像

???????VS2010/MFC編程入門之四十九(圖形圖像:CDC類及其屏幕繪圖函數)
???????VS2010/MFC編程入門之五十(圖形圖像:GDI對象之畫筆CPen)
???????VS2010/MFC編程入門之五十一(圖形圖像:GDI對象之畫刷CBrush)

???????第十部分:Ribbon界面開發

???????VS2010/MFC編程入門之五十二(Ribbon界面開發:創建Ribbon樣式的應用程序框架)
???????VS2010/MFC編程入門之五十三(Ribbon界面開發:為Ribbon Bar添加控件)
???????VS2010/MFC編程入門之五十四(Ribbon界面開發:使用更多控件并為控件添加消息處理函數)

?

?

文中截圖都是基于VS2019?

?

?

1. 新建?MFC?項目

?

  • 1. 選擇菜單項? 文件->新建->項目,彈出 “新項目” 對話框。
  • 2. 選擇 MFC,點擊下一步,然后鍵入工程名稱,本例取名“Addition”,在設置工程的保存路徑。點“創建”。
  • 3.?在應用程序類型下拉框選擇?基于對話框,其他使用默認設置,點 “完成”。

解決方案視圖 中看到,此工程的文件要比單文檔應用程序少的多,在 Class View 中主要有三個類:CAboutDlgCAdditionAppCAdditionDlg?

  • CAboutDlg 是應用程序的 “關于” 對話框類,
  • CAdditionApp 是由 CWinApp 派生的類,
  • CAdditionDlg?是主對話框類,主對話框也就是此應用程序運行后顯示的主要界面。
  • ?

    打開資源視圖

    在Resource View視圖中可以看到工程 Addition 的資源樹,展開Addition.rc,下面有四個子項:Dialog(對話框)、Icon(圖標)、String Table(字符串表)和Version(版本)。然后展開Dialog項,下面有兩個對話框模板,其ID分別為:IDD_ABOUTBOX和IDD_ADDITION_DIALOG,前者是“關于”對話框的模板,后者是主對話框的模板。ID是資源的唯一標識,本質上是一個無符號整數,一般ID代表的整數值由系統定義,我們無需干涉。

    可見對于主對話框來說,創建對話框第一步中的創建新的對話框模板已經由系統自動完成了。如果需要再添加創建新的對話框模板時,需要在Resource View 的“Dialog”節點上點右鍵,在右鍵菜單中選擇“Insert Dialog”,就會生成新的對話框模板,并且會自動分配ID。如圖:

    在Addition對話框模板上點右鍵,然后在右鍵菜單中選擇Properties,則在右側面板中會顯示對話框的屬性列表。如下圖:

    說明:

    • 1. ID? ? ? ? ?:對話框ID,唯一標識對話框資源,可以修改。此處為IDD_ADDITION_DIALOG,我們不修改它。
    • 2. Caption:對話框標題。此處默認為?空,我們將其修改為 “加法計算器” 。
    • 3. Border? :邊框類型。有四種類型:None、Thin、Resizing和Dialog Frame。我們使用默認的Dialog Frame。
    • 4. Maximize :是否使用最大化按鈕。我們使用默認的False。
    • 5. Minimize? :是否使用最小化按鈕。同樣我們使用默認的False。
    • 6. Style? ? ? ? :對話框類型。有三種類型:Overlapped(重疊窗口)、Popup(彈出式窗口)和Child(子窗口)。彈出式窗口比較常見。我們使用默認的Popup類型。
    • 7. System Menu:是否帶有標題欄左上角的系統菜單,包括移動、關閉等菜單項。我們使用默認的True。
    • 8.Title Bar? ? :是否帶有標題欄。我們使用默認的True。
    • 9.Font(Size) :字體類型和字體大小。如果將其修改為非系統字體,則Use System自動改為False。而如果Use System原來為False,將其修改為True,則Font(Size)自動設置為系統字體。這里我們使用默認的系統字體。

    修改了標題屬性。這時我們運行此程序后的界面如下:

    ?

    1.為對話框添加一個靜態文本框(Static Text),用于顯示字符串--“被加數”。

    對于自動添加的一個標題為“TODO:Place dialog controls here.”的靜態文本框,這里將它刪掉,繼續添加新的靜態文本框。
    刪除控件時,可以使用鼠標左鍵點擊選中它,選中后控件的周圍會出現虛線框,然后按Delete鍵就可以將其刪除了。在“Addition”工程的Resource View中打開上一講中創建的對話框模板IDD_ADDITION_DIALOG,自動添加的靜態文本框就可以使用這種方法刪除。
    在添加新的靜態文本框以前,先看看Toolbox視圖是否顯示了,如果沒有顯示,在菜單欄上點擊 View->Toolbox 即可。Toolbox視圖如下圖:

    ? ? ? ? Toolbox工具箱) 中列出了一些常用控件,其中有一個是 Static Text,即是我們要添加的控件。在 Toolbox 中的 Static Text 上點下鼠標左鍵不放開,并拖到 IDD_ADDITION_DIALOG 對話框模板上,模板上會出現一個虛線框,我們找到合適的位置松開鼠標左鍵放下它。

    ?????? 用鼠標左鍵選中控件后周圍出現虛線框,然后鼠標移到虛線框上幾個黑點的位置會變成雙向箭頭的形狀,此時就可以按下鼠標左鍵并拖動來改變控件大小了。我們可以這樣改變新添加的靜態文本框控件的大小,以更好的顯示標題。當然,整個對話框模板也可以用這種方法改變大小。

    ?????? 接下來就該修改靜態文本框的文字了。鼠標右鍵點擊靜態文本框,在右鍵菜單中選擇 “Properties”,Properties 面板就會顯示出來,在面板上修改 Caption 屬性為 “被加數”,ID 修改為 IDC_SUMMAND_STATIC。此時模板如下圖:

    ?

    2.為對話框添加一個編輯框(Edit Control),用來輸入被加數。

    添加編輯框的過程與靜態文本框類似,在Toolbox中選中Edit Control控件拖到對話框模板上,并使其與之前的靜態文本框水平對齊(為了美觀),然后調整其大小使之適合被加數的輸入。
    在編輯框上點右鍵,仍然在右鍵菜單中選擇“Properties”顯示出屬性(Properties)面板,修改其ID為IDC_SUMMAND_EDIT。此時模板如下圖:

    3. 按照1的方法添加一個標題為“加數”的靜態文本框,用于顯示字符串--“加數”。并將其ID改為IDC_ADDEND_STATIC。
    4. 按照2的方法添加一個ID為IDC_ADDEND_EDIT的編輯框,用來輸入加數。
    5. 按照1的方法添加一個標題為“和”的靜態文本框,用于顯示文字--“和”。并修改其ID為IDC_SUM_STATIC。
    6. 按照2的方法添加一個ID為IDC_SUM_EDIT的編輯框,用來顯示最終的加和。
    7. 類似的添加按鈕(Button)控件到對話框模板,用于在被點擊后觸發加法計算。修改其標題為“計算”,ID為IDC_ADD_BUTTON。

    到此,對話框模板如圖:

    8.刪除?確定?按鈕。打開?取消?按鈕的屬性面板,將標題改為 “退出”,并使其與“計算”按鈕水平對齊。
    9.根據控件的布局,適當調整整個對話框模板的大小,使其相對控件布局來說大小合適,界面美觀。
    這樣在對話框模板中就把我們在本例中需要用到的控件就添加完了。最終效果如下:

    運行截圖:

    ?

    ?

    創建對話框類

    因為?程序Addition 是基于對話框的程序,所以程序自動創建了對話框模板 IDD_ADDITION_DIALOG,并自動生成了對話框類CAdditionDlg,它是從 CDialogEx 類派生的。大家用過VC++ 6.0的可能記得,我們定義的對話框類都是從CDialog類派生的,但在VS2010中,一般對話框類都是繼承自CDialogEx類。

    如果是自己新添加的對話框模板,怎樣為它創建對話框類呢?

    • 1. 在Resource View的“Dialog”節點上右鍵,然后在右鍵菜單中選擇“Insert Dialog”創建一個新的對話框模板,ID就使用默認的 IDD_DIALOG1 。
    • 2. 在中間區域會顯示新建的對話框模板,然后選中此對話框模板,點右鍵,在右鍵菜單中選擇 Add Class。

    3.選擇“Add Class”后會彈出一個對話框,在對話框中“Class name”下的編輯框中寫入自定義的類名就可以了,例如CMyDialog。
    4.最后點“Finish”完成。

    最終你就可以在Class View中看到新生成的對話框類CMyDialog了,并且在Solution Explorer中有相應的MyDialog.h頭文件和MyDialog.cpp源文件生成。CMyDialog類同樣派生于CDialogEx類。
    注意,一般類名都以C打頭,又比如,CTestDlg。

    ?

    ?

    為對話框中的控件添加變量

    ? ? ? ? 上面步驟中?為對話框添加了幾個控件,包括三個靜態文本框,三個編輯框,一個按鈕控件。程序自動生成的?取消?按鈕保留,作為退出按鈕,而?確定?按鈕刪除掉了。

    ?????? 靜態文本框只是為了說明后面緊跟的編輯框中數據的意義,是被加數、加數還是和,所以它們是不會變的,我們就不為它們添加變量了。按鈕控件是用來操作的,這里也不為它們添加變量。編輯框中的數據可能會經常變化,有必要為它們每個控件關聯一個變量。

    ?

    首先為被加數的編輯框 IDC_SUMMAND_EDIT 添加變量。

    • 1. 在編輯框上點右鍵,在右鍵菜單中選擇“Add Variable”。彈出添加成員變量的向導對話框。
    • 2 .我們想為其添加值變量而不是控件變量,所以對話框中“Category”下的組合框中選擇Value。
    • 3. “Variable type”下的組合框此時默認選中的是“CString”,CString是字符串類,顯然不能進行加法運算。我們可以選擇double、float、int等。這里我們選擇double,即編輯框關聯一個double類型的變量。
    • 4. 在“Variable name”中寫入自定義的變量名。雞啄米為其取名m_editSummand。

    5.點“Finish”完成。

    注意,類的成員變量名一般以m_打頭,以標識它是一個成員變量。

    參照此方法,再分別為加數的編輯框IDD_ADDEND_EDIT添加double型變量m_editAddend、和的編輯框IDD_SUM_EDIT添加double型變量m_editSum。

    ?

    對話框類的數據交換和檢驗

    ?????? 在程序運行界面中,用戶往往會改變控件的屬性,例如,在編輯框中輸入字符串,或者改變組合框的選中項,又或者改變復選框的選中狀態等。控件的屬性改變后MFC會相應修改控件關聯變量的值。這種同步的改變是通過MFC為對話框類自動生成的成員函數DoDataExchange()來實現的,這也叫做對話框的數據交換和檢驗機制。

    ???????我們為三個編輯框添加了變量以后,在AdditionDlg.cpp 中 CAdditionDlg 的 DoDataExchange()函數的函數體中多了三條DDX_Text調用語句。下面是函數體代碼和雞啄米添加的注釋。

    ? ? ? ?再以 Addition 程序為例簡單說下數據交換機制。如果我們在程序運行界面中輸入被加數,則通過CAddition的DoDataExchange()函數可以將輸入的值保存到 m_editSummand 變量中,反之如果程序運行中修改了變量 m_editSummand 的值,則通過 CAddition 的 DoDataExchange() 函數也可以將新的變量值顯示到被加數的編輯框中。

    ?????? 但是這種數據交換機制中,DoDataExchange() 并不是被自動調用的,而是需要我們在程序中調用 CDialogEx::UpdateData()函數,由 UpdateData() 函數再去自動調用 DoDataExchange()的。

    ?????? CDialogEx::UpdateData() 函數的原型為:BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

    ?????? 參數:bSaveAndValidate 用于指示數據傳輸的方向,TRUE 表示從 控件 傳給 變量FALSE 表示從 變量 傳給 控件默認值是 TRUE,即從 控件 傳給 變量。

    ?????? 返回值:CDialogEx::UpdateData()函數的返回值表示操作是否成功,成功則返回TRUE,否則返回FALSE。

    ?????? 在下一講中將具體演示CDialogEx::UpdateData()函數如何使用。

    ?????? 雞啄米本節主要講的是新建對話框類和添加控件變量,控件的消息處理函數將在下一講詳細介紹。

    ?

    ?

    為控件添加消息處理函數。

    ?創建對話框類和添加控件變量在上面已經講過,這一講的主要內容是如何為控件添加消息處理函數。

    ?

    ???????MFC為對話框和控件等定義了諸多消息,我們對它們操作時會觸發消息,這些消息最終由消息處理函數處理。比如我們點擊按鈕時就會產生 BN_CLICKED 消息,修改編輯框內容時會產生 EN_CHANGE消息等。一般為了讓某種操作達到效果,我們只需要實現某個消息的消息處理函數。

    ?

    一.添加消息處理函數

    ?????? 雞啄米仍以前面的加法計算器的程序為例,說明怎樣為“計算”按鈕控件添加消息處理函數。添加方法列出4種:

    ???????

    • 1. 使用 Class Wizard 添加消息處理函數

    ???????用過的VC++?6.0的朋友應該對Class Wizard很熟悉了,添加類、消息處理函數等經常會用到它,可以說是一個很核心的功能。但從VS2002開始就見不到Class Wizard了,大部分功能都集成到對話框和控件等的屬性中了,使用很方便。到VS2010,久違的Class Wizard又回來了。但雞啄米已經習慣了使用屬性中的功能了,對于從VC++ 6.0直接轉VS2010的朋友可能覺得還是使用Class Wizard比較習慣。

    ?????? 大家應該記得,“計算” 按鈕的 ID 為 IDC_ADD_BUTTON,上圖中?命令 標簽下,對象 ID 列表中有此 ID,因為我們是想實現點擊按鈕后的消息處理函數,所以在?消息 列表中選擇 BN_CLICKED 消息,然后點右上方的?添加處理程序 就可以添加BN_CLICKED 消息處理函數 OnClickedAddButton 了。當然你也可以改名,但一般用的默認的就可以。

    ?

    • 2. 通過 “Add Event Handler...” 添加消息處理函數

    ???????在 “計算” 按鈕上點右鍵,然后在右鍵菜單中選擇菜單項“Add Event Handler...”,彈出 “Event Handler Wizard” 對話框,如下圖:

    可見 “消息類型” 中默認選中的就是 BN_CLICKED 消息,函數名 所在 類 都已經自動給出,直接點 “確定” 就可以了。

    ?

    • ??3.在按鈕的 屬性視圖 中 添加 消息處理函數

    ???????上面說過,從VS2002開始就主要從 屬性視圖 添加 消息處理函數了。我們在 “計算” 按鈕上點右鍵,在右鍵菜單中選擇“Properties”,右側面板中會顯示按鈕的屬性視圖。

    ???????我們可以像上圖中那樣,點屬性視圖的 “控制事件” 按鈕(類似 閃電標志),下面列出了 “計算” 按鈕的所有消息。我們要處理的是 BN_CLICKED 消息,點其右側空白列表項,會出現一個帶下箭頭的按鈕,再點此按鈕會出現 “<Add> OnBnClickedAddButton” 選項,最后選中這個選項就會自動添加 BN_CLICKED 處理函數了。

    ?

    • ?4. 雙擊按鈕添加消息處理函數

    ?????? 最直接最簡單的方法就是,雙擊 “計算” 按鈕,MFC會自動為其在CAdditionDlg類中添加 BN_CLICKED 消息的處理函數OnBnClickedAddButton()。

    ?

    ?

    在消息處理函數中添加自定義功能

    ?????? 在我們使用任意一種方法添加了消息處理函數以后,都只能得到一個空的OnBnClickedAddButton()函數的函數體,要實現我們想要的功能,還需要在函數體中加入自定義功能代碼。

    ???????在加法計算器程序中,我們想要“計算”按鈕實現的功能是,獲取被加數和加數的數值,然后計算它們的和并顯示到和的編輯框里。那么,OnBnClickedAddButton()的函數體就應修改為:

    void CAdditionDlg::OnClickedAddButton() {// TODO: 在此添加控件通知處理程序代碼// 將各控件中的數據保存到相應的變量 UpdateData(TRUE);// 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend;// 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值 UpdateData(FALSE); }

    ? ? ? ? 上面的代碼中已經添加注釋,大家應該很容易理解了。對于UpdateData()函數的說明在上一講中已經介紹過,如果忘了可以再回上一講了解了解。接下來我們運行下此應用程序。在運行結果界面中,輸入被加數 1.1,加數 2.2?,然后點“計算”:

    簡單分析下運行過程:輸入被加數和加數,點“計算”按鈕后產生點擊消息,從而調用 OnBnClickedAddButton()函數。進入此函數后,首先由 UpdateData(TRUE)函數將被加數的值5.1和加數的值2.3分別保存到變量m_editSummand和m_editAddend,然后通過語句m_editSum?=?m_editSummand?+?m_editAddend;計算出被加數和加數的和為7.4,并把7.4賦值給m_editSum。最后調用UpdateData(FALSE) 根據被加數、加數、和的值更新三個編輯框的顯示值,就得到了上圖中的結果。

    ?????? 到此,一個具有簡單的加法運算功能的加法計算器應用程序就基本完成了。

    ?

    ?

    對話框上控件的Tab順序如何調整。

    上一講為“計算”按鈕添加了消息處理函數后,加法計算器已經能夠進行浮點數的加法運算。但是還有個遺留的小問題,就是對話框控件的Tab順序問題。

    ?????? 運行加法計算器程序,顯示對話框后不進行任何操作,直接按回車,可以看到對話框退出了。這是因為“退出”按鈕是Tab順序為1的控件,也就是第一個接受用戶輸入的控件。但是按照我們的輸入習慣,應該是被加數的編輯框首先接受用戶輸入,然后是加數編輯框,再接下來是“計算”按鈕,最后才是“退出”按鈕。

    ?????? 先直觀的看看各個控件的Tab順序:打開 “資源視圖” ,然后在資源中找到對話框 IDD_ADDITION_DIALOG,雙擊ID后中間客戶區域出現其模板視圖。在主菜單中選擇 “Format”->"Tab Order",或者按快捷鍵Ctrl+D,對話框模板上就會顯示各個控件的Tab順序數字。如下圖:

    ?????? 上圖中每個控件左上角都有一個數字,這就是它的 Tab 響應順序。對話框剛打開時輸入焦點就在Tab順序為1的“退出”按鈕上,不做任何操作按下Tab鍵,輸入焦點就會轉移到Tab順序為2的“被加數”靜態文本框上,但是因為靜態文本框不接受任何輸入,所以輸入焦點繼續自動轉移到Tab順序為3的被加數編輯框,再按Tab鍵,輸入焦點又會轉移到Tab順序為4的“加數”靜態文本框上,同樣由于它是靜態文本框,輸入焦點不停留繼續轉移到加數編輯框,后面的控件同理。

    ?????? 我們認為這個順序不合理,那怎么修改呢?很簡單,從自己認為Tab順序應該為1的控件開始依次單擊,隨著單擊的完成,各控件的Tab響應順序也按我們的想法設置好了。

    ?????? 例如,此例中我們可以依次單擊被加數編輯框、“被加數”靜態文本框、加數編輯框、“加數”靜態文本框、和編輯框、“和”靜態文本框、“計算”按鈕和“退出”按鈕。設置完后如下圖:

    最后按ESC鍵,確認設置并退出對話框模板的Tab順序設置狀態。

    ?????? 現在我們再運行程序,可以看到對話框打開后最初的輸入焦點在被加數編輯框上,然后我們按Tab鍵,輸入焦點移到加數編輯框上,繼續多次按Tab鍵時,輸入焦點會按“和編輯框--‘計算’按鈕--‘退出’按鈕--被加數編輯框--加數編輯框--和編輯框......”的順序循環轉移。這樣就達到了我們的目的。

    ?

    ?

    模態對話框 和 非模態對話框,以及模態對話框怎樣彈出。

    ?

    一 .??模態對話框非模態對話框

    ?????? Windows對話框分為兩類:模態對話框非模態對話框

  • ?模態對話框是這樣的對話框:當它彈出后,本應用程序其他窗口將不再接受用戶輸入,只有該對話框響應用戶輸入,在對它進行相應操作退出后,其他窗口才能繼續與用戶交互。
  • ?非模態對話框:非模態對話框是它彈出后,本程序其他窗口仍能響應用戶輸入。非模態對話框一般用來顯示提示信息等。
  • ?????? 大家對Windows系統很了解,相信這兩種對話框應該都遇到過。之前的加法計算器對話框其實就是模態對話框。

    ?

    二 .? 模態對話框是怎樣彈出的

    ?????? 畢竟加法計算器程序大部分都是MFC自動生成的,對話框怎么彈出來的大家可能還不是很清楚。雞啄米下面簡單說說它是在哪里彈出來的,再重新建一個新的對話框并彈出它,這樣大家實踐以后就能更靈活的使用模態對話框了。

    ?????? 大家打開 Addition.cpp 文件,可以看到 CAdditionApp 類有個 InitInstance() 函數,在?MFC應用程序框架分析?中提到過此函數,不過那是單文檔應用程序 App類 中的,函數體不太相同,但都是進行App類實例的初始化工作。

    ????? ?InitInstance() 函數的?后半部分有一段代碼就是定義對話框對象并彈出對話框的,雞啄米下面給出這段代碼并加以注釋:

    CAdditionDlg dlg; // 定義對話框類CAdditionDlg的對象dlg m_pMainWnd = &dlg; // 將dlg設為主窗口 INT_PTR nResponse = dlg.DoModal(); // 彈出對話框dlg,并將DoModal函數的返回值(退出時點擊按鈕的ID)賦值給nResponse if (nResponse == IDOK) // 判斷返回值是否為OK按鈕(其ID為IDOK,雞啄米已經將它刪除) {// TODO: 在此放置處理何時用// “確定”來關閉對話框的代碼 } else if (nResponse == IDCANCEL) // 判斷返回值是否為Cancel按鈕(其ID為IDCANCEL,雞啄米將它的Caption改為了“退出”) {// TODO: 在此放置處理何時用// “取消”來關閉對話框的代碼 } else if (nResponse == -1) {TRACE(traceAppMsg, 0, "警告: 對話框創建失敗,應用程序將意外終止。\n");TRACE(traceAppMsg, 0, "警告: 如果您在對話框上使用 MFC 控件,則無法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); }

    彈出對話框比較關鍵的一個函數,就是對話框類的 DoModal() 函數。CDialog::DoModal() 函數的原型為:

    ???????virtual INT_PTR DoModal();   

    ???????返回值:整數值,指定了傳遞給CDialog::EndDialog(該函數用于關閉對話框)的nResult參數值。如果函數不能創建對話框,則返回-1;如果出現其它錯誤,則返回IDABORT。

    ???????調用了它,對話框就會彈出,返回值是退出對話框時所點的按鈕的 ID,比如,我們點了“退出”按鈕,那么 DoModal 返回值為IDCANCEL。

    ?

    ?三 .? 添加一個新對話框并彈出它

    為加法計算器程序添加一個對話框,在計算之前詢問用戶是否要進行計算。大家可以完整的看下對話框的添加和彈出過程。

    ???????1.在 Resource View 中的 “Dialog” 上點右鍵選擇 “Insert Dialog”,創建一個新的對話框模板,修改其ID為IDD_TIP_DIALOG,Caption改為“提示”,然后參考 “為對話框添加控件” 中所講,在對話框模板上添加一個靜態文本框(static text),Caption改為“您確定要進行加法計算嗎?”,接下來修改OK按鈕的Caption為“確定”,Cancel按鈕的Caption為“取消”,最后調整各個控件的位置和對話框的大小。最終的對話框模板如下圖:

    ???????2.根據“創建對話框類和添加控件變量”中創建對話框類的方法,在對話框模板上點右鍵選擇“Add Class...”,彈出添加類的對話框,設置“Class name”為CTipDlg,點“OK”。在Solution Explorer中可以看到生成了CTipDlg類的頭文件TipDlg.h和源文件TipDlg.cpp。

    ???????3.我們要在點“計算”按鈕之后彈出此提示對話框,那么就要在“計算”按鈕的消息處理函數OnBnClickedAddButton()中訪問提示對話框類,所以為了訪問CTipDlg類,在AdditionDlg.cpp中包含CTipDlg的頭文件:#include "CTipDlg.h"。

    ???????4.修改OnBnClickedAddButton()的函數體,在所有代碼前,構造CTipDlg類的對象tipDlg,并通過語句tipDlg.DoModal();彈出對話框,最后判斷DoModal()函數的返回值是IDOK還是IDCANCEL來確定是否繼續進行計算。OnBnClickedAddButton()函數修改后如下:

    void CAdditionDlg::OnClickedAddButton() {// TODO: Add your control notification handler code here INT_PTR nRes; // 用于保存DoModal函數的返回值 CTipDlg tipDlg; // 構造對話框類CTipDlg的實例 nRes = tipDlg.DoModal(); // 彈出對話框 if (IDCANCEL == nRes) // 判斷對話框退出后返回值是否為IDCANCEL,如果是則return,否則繼續向下執行 return;// 將各控件中的數據保存到相應的變量 UpdateData(TRUE);// 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend;// 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值 UpdateData(FALSE); }

    ???????5.測試。編譯運行程序后,在對話框上輸入被加數和加數,點“計算”,彈出提示對話框詢問是否進行計算,如果選擇“確定”,則提示對話框退出,并在主對話框上顯示被加數和加數的和,而如果選擇“取消”,則提示對話框也會退出,但主對話框顯示的和不變,即沒有進行加法計算。

    ?

    ?

    非模態對話框的創建及顯示。

    ?

    總結:主要步驟是,創建新對話框后,關聯一個類,然后用一個指針指向該類;接著用該指針創建對話框和顯示對話框,最后在虛構函數中銷毀該指針,釋放資源。

    ? ? ? ? 非模態對話框顯示后,程序其他窗口仍能正常運行,可以響應用戶輸入,還可以相互切換。將上一講中創建的Tip模態對話框改為非模態對話框,讓大家看下效果。

    ???????實際上,模態對話框非模態對話框 在創建對話框資源和生成對話框類上是沒有區別的,所以上一講中創建的IDD_TIP_DIALOG對話框資源和 CTipDlg 類都不需要修改。

    ???????需要修改的是,對話框類實例的創建和顯示,也就是之前在 CAdditionDlg::OnBnClickedAddButton() 函數體中添加的對話框顯示代碼。下面是具體步驟:

    • 1. 在 AdditionDlg.h 中包含 CTipDlg 頭文件并定義 CTipDlg類型的指針成員變量。詳細操作方法是,在 AdditionDlg.cpp中刪除之前添加的 #include "CTipDlg.h",而在 AdditionDlg.h 中添加 #include "CTipDlg.h",這是因為我們需要在AdditionDlg.h 中定義 CTipDlg 類型的 指針變量,所以要先包含它的頭文件;然后在 AdditionDlg.h 中為 CAdditionDlg類添加 private 成員變量 CTipDlg? *m_pTipDlg; 。
    • 2. 在CAdditionDlg類的構造函數中初始化成員變量m_pTipDlg。如果cpp文件中函數太多,我們可以在Class View上半個視圖中找到CAdditionDlg類,再在下半個視圖中找到其構造函數雙擊,中間客戶區域即可馬上切到構造函數的實現處。在構造函數體中添加m_pTipDlg = NULL;,這是個好習慣,雞啄米在C++編程入門系列的指針的賦值和指針運算中說到過,在任何指針變量使用前都初始化,可以避免因誤訪問重要內存地址而破壞此地址的數據。
    • 3. 將上一講中添加的模態對話框顯示代碼注釋或刪除掉,添加非模態對話框的創建和顯示代碼。VC++中注釋單行代碼使用“//”,注釋多行代碼可以在需注釋的代碼開始處添加“/*”,結束處添加“*/”。修改后的CAdditionDlg::OnBnClickedAddButton()函數如下:
    void CAdditionDlg::OnClickedAddButton() {// TODO: Add your control notification handler code here /*INT_PTR nRes; // 用于保存DoModal函數的返回值CTipDlg tipDlg; // 構造對話框類CTipDlg的實例nRes = tipDlg.DoModal(); // 彈出對話框if (IDCANCEL == nRes) // 判斷對話框退出后返回值是否為IDCANCEL,如果是則return,否則繼續向下執行return;*/// 如果指針變量m_pTipDlg的值為NULL,則對話框還未創建,需要動態創建 if (NULL == m_pTipDlg){// 創建非模態對話框實例 m_pTipDlg = new CTipDlg();m_pTipDlg->Create(IDD_TIP_DIALOG, this);}// 顯示非模態對話框 m_pTipDlg->ShowWindow(SW_SHOW);// 將各控件中的數據保存到相應的變量 UpdateData(TRUE);// 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend;// 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值 UpdateData(FALSE); }

    ??這樣,非模態對話框創建和顯示的代碼就添加修改完了。讓我們運行下看看效果吧。

    ??????在加法計算器對話框上輸入被加數和加數,然后點“計算”按鈕,依然像上節一樣彈出了提示對話框,但是先不要關閉它,你可以拖動它后面的加法計算器對話框試試,我們發現加法計算器對話框竟然可以拖動了,而且“和”編輯框里已經顯示了運算結果,這表明提示對話框顯示以后還沒有關閉,OnBnClickedAddButton()?就繼續向下執行了,不僅如此,加法計算器的每個編輯框還都可以響應輸入。

    這只是一個簡單的例子,非模態對話框的用處有很多,以后大家在軟件開發中會用到。

    ?

    ?

    屬性頁對話框

    ?

    屬性頁對話框的分類

    屬性頁對話框想必大家并不陌生,XP系統中桌面右鍵點屬性,彈出的就是屬性頁對話框,它通過標簽切換各個頁面。另外,我們在創建MFC工程時使用的向導對話框也屬于屬性頁對話框,它通過點擊“Next”等按鈕來切換頁面。
    屬性頁對話框就是包含一般屬性頁對話框和向導對話框兩類。它將多個對話框集成于一身,通過標簽或按鈕來切換頁面。
    屬性頁對話框相關類

    我們使用屬性頁對話框時,用到的類主要有兩個:CPropertyPage類 和 CPropertySheet 類。

    ?

    ?1.CPropertyPage 類

    ???????CPropertyPage類繼承自CDialog類,它被用于處理某單個的屬性頁,所以要為每個屬性頁都創建一個繼承自CPropertyPage的子類。大家可以在VS2010的MSDN中查找CPropertyPage類以及它的成員的詳細說明。下面雞啄米就為大家講解MSDN中列出的CPropertyPage類的部分主要成員函數。

    (1)構造函數這里講三個CProperty類的構造函數,函數原型為:CPropertyPage( );explicit CPropertyPage(UINT nIDTemplate,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE));explicit CPropertyPage(LPCTSTR lpszTemplateName,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE));第一個是沒有任何參數的構造函數。第二個構造函數中,參數nIDTemplate是屬性頁的對話框資源ID,參數nIDCaption是屬性頁對話框選項卡的標題所用字符串資源的ID,若設為0,則選項卡標題就使用該屬性頁的對話框資源的標題。第三個構造函數中,參數lpszTemplateName為屬性頁的對話框資源的名稱字符串,不能為NULL。參數nIDCaption同上。(2)CancelToClose()函數在模態屬性頁對話框的屬性頁進行了某不可恢復的操作后,使用CancelToClose() 函數將“OK”按鈕改為“Close”按鈕,并禁用“Cancel”按鈕。函數原型為:void CancelToClose( );(3)SetModified()函數調用此函數可激活或禁用“Apply”按鈕,函數原型為:void SetModified(BOOL bChanged = TRUE);(4)可重載函數CPropertyPage類提供了一些消息處理函數,來響應屬性頁對話框的各種消息。我們重載這些消息處理函數,就可以自定義對屬性頁對話框操作的處理。可重載的消息處理函數包括:OnApply:處理屬性頁的“Apply”按鈕被單擊的消息OnCancel:處理屬性頁的“Cancel”按鈕被單擊的消息OnKillActive:處理屬性頁當前活動狀態被切換的消息,常用于數據驗證OnOK:處理屬性頁的“OK”按鈕、“Apply”按鈕或者“Close”按鈕被單擊的消息OnQueryCancel:處理屬性頁的“Cancel”按鈕被單擊前發出的消息OnReset:處理屬性頁的“Reset”按鈕被單擊的消息OnSetActive:處理屬性頁被切換為當前活動頁的消息OnWizardBack:處理屬性頁的“Back”按鈕被單擊的消息,僅在向導對話框中有效OnWizardFinish:處理屬性頁的“Finish”按鈕被單擊的消息,僅在向導對話框中有效OnWizardNext:處理屬性頁的“Next”按鈕被單擊的消息,僅在向導對話框中有效

    ?

    2.CPropertySheet類

    ???????CPropertySheet類繼承自CWnd類,它是屬性表類,負責加載、打開或刪除屬性頁,并可以在屬性頁對話框中切換屬性頁。它跟對話框類似,也有模態和非模態兩種。下面雞啄米就講解CPropertySheet類的部分成員函數。

    (1)構造函數這里依然列出CPropertySheet類的三個構造函數:CPropertySheet( );explicit CPropertySheet(UINT nIDCaption,CWnd* pParentWnd = NULL,UINT iSelectPage = 0?);explicit CPropertySheet(LPCTSTR pszCaption,CWnd* pParentWnd = NULL,UINT iSelectPage = 0?);參數 nIDCaption:標題的字符串資源的ID。參數 pParentWnd:屬性頁對話框的父窗口,若設為NULL,則父窗口為應用程序的主窗口。參數 iSelectPage:初始狀態時,活動屬性頁的索引,默認為第一個添加到屬性表的屬性頁。參數 pszCaption:標題字符串。(2)GetActiveIndex()函數獲取當前活動屬性頁的索引。函數原型為:int GetActiveIndex( ) const;返回值:當前活動屬性頁的索引。(3)GetActivePage()函數獲取當前活動屬性頁對象。函數原型為:CPropertyPage* GetActivePage( ) const;返回值:當前活動屬性頁對象的指針。(4)GetPage()函數獲取某個屬性頁對象。函數原型為:CPropertyPage* GetPage(int nPage) const;參數nPage:目標屬性頁的索引。返回值:目標屬性頁對象的指針。(5)GetPageCount()函數獲取屬性頁的數量。函數原型為:int GetPageCount( ) const;返回值:屬性頁的數量。(6)GetPageIndex()函數獲取某屬性頁在屬性頁對話框中的索引。函數原型為:int GetPageIndex(CPropertyPage* pPage);參數pPage:要獲取索引的屬性頁對象的指針。返回值:屬性頁對象在屬性頁對話框中的索引。(7)SetActivePage()函數設置某個屬性頁為活動屬性頁。函數原型為:???BOOL SetActivePage(int nPage?);BOOL SetActivePage(CPropertyPage* pPage?);參數 nPage:要設置為活動屬性頁的索引。參數 pPage:要設置為活動屬性頁的對象指針。(8)SetWizardButtons()函數在向導對話框上啟用或禁用Back、Next或Finish按鈕,應在調用DoModal之前調用此函數。函數原型為:void SetWizardButtons(DWORD dwFlags?);參數dwFlags:設置向導按鈕的外觀和功能屬性。可以是以下值的組合:PSWIZB_BACK????????????????????啟用“Back”按鈕,如果不包含此值則禁用“Back”按鈕。PSWIZB_NEXT??????????????????? 啟用“Next”按鈕,如果不包含此值則禁用“Next”按鈕。PSWIZB_FINISH????????????????? 啟用“Finish”按鈕。PSWIZB_DISABLEDFINISH?? 顯示禁用的“Finish”按鈕。(9)SetWizardMode()函數設置屬性頁對話框為向導對話框模式,應在調用DoModal之前調用此函數。函數原型為:void SetWizardMode( );(10)SetTitle()函數設置屬性對話框的標題。函數原型為:void SetTitle(LPCTSTR lpszText,UINT nStyle = 0?);參數lpszText:標題字符串。參數nStyle:指定屬性表標題的風格。應當為 0 或 PSH_PROPTITLE。如果設為PSH_PROPTITLE,則單詞“Properties”會出現在指定標題之后。例如,SetTitle("Simple",PSH_PROPTITLE)這種調用會使得屬性表標題為 “Simple Properties”。(11)AddPage()函數為屬性對話框添加新的屬性頁。函數原型為:void AddPage(CPropertyPage *pPage?);參數pPage:要添加的新的屬性頁的對象指針。(12)PressButton()函數模擬按下某指定的按鈕。函數原型為:???void PressButton(int nButton?);參數nButton:要模擬按下的按鈕,它可以是下列值之一:PSBTN_BACK?? 選擇“Back”按鈕。?PSBTN_NEXT?? 選擇“Next”按鈕。PSBTN_FINISH?? 選擇“Finish”按鈕。PSBTN_OK?? 選擇“OK”按鈕。PSBTN_APPLYNOW?? 選擇“Apply”按鈕。PSBTN_CANCEL?? 選擇“Cancel”按鈕。PSBTN_HELP?? 選擇“幫助”按鈕。(13)RemovePage()函數刪除某屬性頁。函數原型為:void RemovePage(CPropertyPage *pPage?);void RemovePage(int nPage?);參數pPage:要刪除的屬性頁的對象指針。參數nPage:要刪除的屬性頁的索引。

    ?????? 屬性對話框和相關的兩個類雞啄米就先介紹到這,主要是為后面使用屬性頁對話框做準備。

    ?

    ?

    創建向導對話框

    ?

    ?????? 仍然以前面的“加法計算器”的例子為基礎,在其中加入向導對話框,我們可以用它來說明加法計算器的使用方法,一步一步引導用戶操作,這也是比較常見的用法。

    ?????? 加法計算器使用時大概可以分為三步:輸入被加數、輸入加數、點“計算”按鈕。

    ?????? 雞啄米就詳細說明向導對話框的創建步驟:

    ?

    1. 創建屬性頁對話框資源

    ?????? 根據創建對話框模板和修改對話框屬性中所講方法,在“Resource View”的Dialog”節點上點右鍵,然后在右鍵菜單中選擇“Insert Dialog”創建第一個對話框模板,對話框的ID屬性設置為IDD_SUMMAND_PAGE,Caption屬性改為“被加數頁”,Style屬性在下拉列表中選擇“Child”,Border屬性在下拉列表中選擇“Thin”。

    ?????? 刪除“OK”和“Cancel”按鈕,再按照為對話框添加控件中所講方法,添加一個靜態文本框,并修改靜態文本框的Caption屬性為“請先輸入double型被加數”。

    ?????? 按照上述步驟,繼續添加第二個和第三個對話框資源。第二個對話框模板的ID設為IDD_ADDEND_PAGE,Caption屬性改為“加數頁”,也添加一個靜態文本框,Caption設為“請繼續輸入double型加數”,其他屬性同第一個對話框。第三個對話框模板的ID設為IDD_ADD_PAGE,Caption屬性改為“計算頁”,添加靜態文本框的Caption屬性改為“最后請按下“計算”按鈕”,其他屬性也第一個對話框一樣。

    ?

    2. 創建屬性頁類

    ?????? 按照創建對話框類和添加控件變量中的方法,在第一個對話框模板上點右鍵,在右鍵菜單中選擇“Add Class”,彈出類向導對話框,在“Class name”編輯框中輸入類名“CSummandPage”,與之前不同的是,因為屬性頁類都應繼承于CPropertyPage類,所以要修改下面“Base class”的選項,在下拉列表中選擇“CPropertyPage”。

    ?????? 因為是第一個屬性頁,所以它應該有一個“下一步”按鈕,在哪里添加呢?上一講CPropertyPage類的可重載函數中提到,OnSetActive函數用于處理屬性頁被切換為當前活動頁的消息,所以我們可以在OnSetActive函數中進行相關設置。

    ???????那怎樣重載OnSetActive函數呢?我們可以在“Class View”中找到“CSummandPage”節點,點右鍵彈出右鍵菜單,選擇“Properties”,然后VS2010右側面板上會顯示對話框的屬性列表,屬性列表的工具欄上有個tip信息為“Overrides”的按鈕,按下它,下方列表中就列出了重載函數,找到“OnSetActive”,點其右側空白列表項出現向下箭頭,再點箭頭就在下面出現了“<Add>OnSetActive”的選項,選擇它就會自動在CSummandPage類中添加函數OnSetActive。

    ?? 我們只需在OnSetActive函數體中添加相關代碼就可以實現添加“下一步”按鈕的效果了。新的函數體如下:

    BOOL CSummandPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class // 獲得父窗口,即屬性表CPropertySheet類 CPropertySheet* psheet = (CPropertySheet*) GetParent(); // 設置屬性表只有“下一步”按鈕 psheet->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive(); }

    ???????為第二個和第三個對話框也分別添加屬性頁類CAddendPage和CAddPage。但第二個對話框的屬性頁不需要重載OnSetActive函數。第三個對話框是最后一個對話框,所以不需要“下一步”按鈕,而應該換成“完成”按鈕,所以也需要重載OnSetActive函數設置“完成”按鈕。重載后的OnSetActive如下:

    BOOL CAddPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class // 獲得父窗口,即屬性表CPropertySheet類 CPropertySheet* psheet = (CPropertySheet*) GetParent(); //設置屬性表只有“完成”按鈕 psheet->SetFinishText(_T("完成")); return CPropertyPage::OnSetActive(); }

    ?????? 上面的代碼段中,字符串“完成”前加了個_T,這是因為本工程創建的時候用的默認的Unicode字符集,而如果“完成”前不加_T就是ASCII字符串。_T實際上是一個宏,工程的字符集選擇為Unicode時字符串就轉為Unicode字符串,選擇為Muli-Byte時就轉為ASCII字符串。我們可以在Solution Explorer的Addition根節點上點右鍵,在右鍵菜單上選擇“Properties”,彈出工程的屬性對話框,Configuration Properties->General右側列表中的Character Set就顯示選擇的字符集。

    ???????那點了第三個屬性頁上的“完成”按鈕我們想進行某些處理的話,就重載OnWizardFinish函數,方法同OnSetActive函數。重載后的OnWizardFinish函數如下:

    BOOL CAddPage::OnWizardFinish() { // TODO: Add your specialized code here and/or call the base class // 提示向導完成 MessageBox(_T("使用說明向導已閱讀完!")); return CPropertyPage::OnWizardFinish(); }

    ?

    3. 創建屬性表類

    ?????? 屬性頁資源和屬性頁類創建完以后,還不能生成向導對話框,我們還需要一個屬性表類,來容納這些屬性頁。

    ?????? 在Solution Explorer視圖中的根節點“Addition”上點右鍵,在右鍵菜單中選擇Add->Class,彈出“Add Class”對話框,然后在中間區域中選擇“MFC Class”,點“Add”按鈕,彈出另一個類向導對話框,設置Class name為CAddSheet,Base class選擇“CPropertySheet”,點“Finish”按鈕,這樣就屬性表類就建好了。

    ?????? 接下來,在新生成的AddSheet.h中包含三個屬性頁類的頭文件:

    ?????? #include "SummandPage.h"
    ?????? #include "AddendPage.h"
    ?????? #include "AddPage.h"

    ?????? 之后在AddSheet.h中添加private變量:

    ?????? CSummandPage??? m_summandPage;C
    ?????? CAddendPage???? m_addendPage;
    ?????? CAddPage??????? m_addPage;

    ???????然后在AddSheet.cpp文件中修改CAddSheet的兩個構造函數為:

    CAddSheet::CAddSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { // 添加三個屬性頁到屬性表 AddPage(&m_summandPage); AddPage(&m_addendPage); AddPage(&m_addPage); } CAddSheet::CAddSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { // 添加三個屬性頁到屬性表 AddPage(&m_summandPage); AddPage(&m_addendPage); AddPage(&m_addPage); }

    ?

    4. 顯示向導對話框

    ??????? 我們在加法計算器對話框上添加一個按鈕,點擊它就打開向導對話框。此按鈕的ID設為IDC_INSTRUCT_BUTTON,Caption屬性設為“使用說明”。

    ??????? 按照為控件添加消息處理函數中所講方法,為IDC_INSTRUCT_BUTTON按鈕在CAdditionDlg類中添加點擊消息的處理函數OnBnClickedInstructButton。然后在AdditionDlg.cpp文件中包含CAddSheet的頭文件:#include "AddSheet.h"。最后修改OnBnClickedInstructButton函數如下:

    void CAdditionDlg::OnBnClickedInstructButton() { // TODO: Add your control notification handler code here // 創建屬性表對象 CAddSheet sheet(_T("")); // 設置屬性對話框為向導對話框 sheet.SetWizardMode(); // 打開模態向導對話框 sheet.DoModal(); }

    到此,向導對話框就完整的創建完成了,并可以在加法計算器對話框上點 “使用說明” 按鈕顯示出來。我們來看看效果吧:

    ?????? 上圖只是被加數頁的效果,點其上“下一步”按鈕就可以繼續顯示后面的兩個頁面。

    ?????? 是不是向導對話框沒有以前想象的那般復雜了?大家可以發揮想象,進行更復雜的修改,實現更完善的功能。依然歡迎朋友們到雞啄米博客來交流學習。

    ?

    ?

    屬性頁對話框的創建和顯示

    ?

    屬性頁對話框包括向導對話框和一般屬性頁對話框兩類,上一節雞啄米講了如何創建并顯示向導對話框,本節將繼續介紹一般屬性頁對話框的創建和顯示。

    ?????? 實際上,一般屬性頁對話框的創建和顯示過程和向導對話框是很類似的。雞啄米將上一節中的向導對話框進行少量修改,使其成為一般屬性頁對話框。

    ?????? 一般屬性頁對話框的創建步驟:

    ???????1. 創建屬性頁對話框資源

    ?????? 屬性頁對話框資源的創建方法同向導對話框是一樣的,上一講中的對話框資源不需進行任何修改。

    ???????2. 創建屬性頁類

    ?????? 屬性頁類的創建和向導對話框的屬性頁類也基本一樣,只是一般屬性頁對話框中不需要“下一步”和“完成”等按鈕,所以上一講中屬性頁類的OnSetActive和OnWizardFinish等重載函數可以去掉。即CSummandPage類中的OnSetActive函數、CAddPage類中的OnSetActive函數和OnWizardFinish函數可以刪除或注釋掉。其他部分不需作任何修改。

    ???????3. 創建屬性表類

    ???????創建屬性表類的過程同向導對話框屬性表類也是一樣的,所以上一講中的CAddSheet類不需修改。

    ???????4. 顯示一般屬性頁對話框

    ?????? 上一講向導對話框的顯示是在OnBnClickedInstructButton函數中實現的,其中語句sheet.SetWizardMode();旨在設置屬性表為向導對話框模式,所以顯示一般屬性頁對話框時不需調用SetWizardMode成員函數。另外,我們可以將屬性頁對話框的標題設為“使用說明”,在構造屬性表對象時將此字符串作為構造函數的參數傳入。OnBnClickedInstructButton函數修改如下:

    void CAdditionDlg::OnBnClickedInstructButton() { // TODO: Add your control notification handler code here // 創建屬性表對象 CAddSheet sheet(_T("使用說明")); // 打開模態一般屬性頁對話框 sheet.DoModal(); }

    這樣一般屬性頁對話框的創建和顯示就講完了,我們運行下程序,在結果對話框上點“使用說明”按鈕看看效果吧:

    ??? 再總結下,一般屬性頁對話框和向導對話框的創建和顯示的不同包括:是否需要OnSetActive和OnWizardFinish等重載函數,是否需要調用屬性表類的SetWizardMode函數設置為向導對話框模式。

    ?

    ?

    消息對話框

    ?

    前面幾節雞啄米講了屬性頁對話框,我們可以根據所講內容方便的建立自己的屬性頁對話框。本節講解Windows系統中最常用最簡單的一類對話框--消息對話框。

    ?????? 我們在使用Windows系統的過程中經常會見到消息對話框,提示我們有異常發生或提出詢問等。因為在軟件開發中經常用到消息對話框,所以MFC提供了兩個函數可以直接生成指定風格的消息對話框,而不需要我們在每次使用的時候都要去創建對話框資源和生成對話框類等。這兩個函數就是CWnd類的成員函數MessageBox()和全局函數AfxMessageBox()。

    ?

    一 .??CWnd::MessageBox()函數 和 AfxMessageBox()函數的用法

    ?????? 下面雞啄米就分別講解兩個函數的用法。

    ???????1 . CWnd::MessageBox()函數

    ?????? CWnd::MessageBox()的函數原型如下:?????

    ?int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption = NULL,UINT nType = MB_OK);參數說明:lpszText:需要顯示的消息字符串。lpszCaption:消息對話框的標題字符串。默認值為NULL。取值為NULL時使用默認標題。nType:消息對話框的風格和屬性。默認為 MB_OK 風格,即只有“確定”按鈕。nType 的取值可以是下面兩個表中任取一個值,也可以是各取一個值的任意組合。即可以指定一個對話框類型,也可以指定一個對話框圖標,還可以兩者都設定。

    nType 的取值可以是下面兩個表中任取一個值,也可以是各取一個值的任意組合。即可以指定一個對話框類型,也可以指定一個對話框圖標,還可以兩者都設定。下面表格是?對話框類型表

    nType 取值參數說明
    MB_ABORTRETRY有“終止”、“重試”和“忽略”按鈕
    MB_OK有“確定”按鈕
    MB_OKCANCEL有“確定”和“取消”按鈕
    MB_RETRYCANCEL有“重試”和“取消”按鈕
    MB_YESNO有“是”和“否”按鈕
    MB_YESNOCANCEL有“是”、“否”和“取消”按鈕

    下面表格是??對話框圖標表

    nType 取值顯示圖標
    MB_ICONEXCLAMTION
    MB_ICONWARNING
    MB_ICONASTERISK
    MB_ICONINFORMATION
    MB_ICONQUESTION
    MB_ICONHAND
    MB_ICONSTOP
    MB_ICONERROR

    ?????? 如果想要設置nType的值為類型和圖標的組合,可以像這樣取值:MB_OKCANCEL | MB_ICONQUESTION。按位取或就可以了。

    ?

    ???????2 . AfxMessageBox()函數

    ?????? AfxMessageBox()的函數原型為:

    ?????? int AfxMessageBox(LPCTSTR lpszText,UINT nType = MB_OK,UINT nIDHelp = 0);參數說明:lpszText:同CWnd::MessageBox()函數nType:CWnd::MessageBox()函數nIDHelp:此消息的幫助的上下文ID。默認值為0,取0時表示要使用應用程序的默認幫助上下文。

    ?

    二 .?CWnd::MessageBox() 和 AfxMessageBox() 的返回值

    ??????我們在調用了上面兩個函數后,都可以彈出模態消息對話框。消息對話框關閉后,我們也都可以得到它們的返回值。兩者的返回值就是用戶在消息對話框上單擊的按鈕的ID,可以是以下值:

    ????? IDABORT:單擊“終止”按鈕。
    ????? IDCANCEL:單擊“取消”按鈕。
    ????? IDIGNORE:單擊“忽略”按鈕。
    ????? IDNO:單擊“否”按鈕。
    ????? IDOK:單擊“確定”按鈕。
    ????? IDRETRY:單擊“重試”按鈕。
    ????? IDYES:單擊“是”按鈕。

    ?

    三?.?應用舉例

    ?????我們還是拿前面加法計算器的程序做例子。

    ?????? 大家是否記得,在模態對話框及其彈出過程中我們修改了CAdditionDlg::OnBnClickedAddButton()函數,在點了“計算”按鈕以后先彈出了一個模態對話框,詢問用戶是否確定要進行加法計算,并通過模態對話框DoModal函數的返回值判斷用戶選擇了“確定”還是“取消”。這些功能很明顯消息對話框完全能夠實現,雞啄米就使用消息對話框來替代原來的模態對話框。

    ?????? 在非模態對話框的創建及顯示中,雞啄米注釋了模態對話框的相關代碼,加入了非模態對話框的創建和顯示代碼,我們在加入消息對話框之前將非模態對話框的代碼也注釋或刪除掉,確保此函數中不再生成原來的模態對話框或非模態對話框。

    ?????? 修改后的CAdditionDlg::OnBnClickedAddButton()函數如下:

    void CAdditionDlg::OnBnClickedAddButton() { // TODO: Add your control notification handler code here INT_PTR nRes; // 顯示消息對話框 nRes = MessageBox(_T("您確定要進行加法計算嗎?"), _T("加法計算器"), MB_OKCANCEL | MB_ICONQUESTION); // 判斷消息對話框返回值。如果為IDCANCEL就return,否則繼續向下執行 if (IDCANCEL == nRes) return; // 將各控件中的數據保存到相應的變量 UpdateData(TRUE); // 將被加數和加數的加和賦值給m_editSum m_editSum = m_editSummand + m_editAddend; // 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值 UpdateData(FALSE); // 設置屬性對話框為向導對話框 //sheet.SetWizardMode(); }

    編譯運行,在運行結果對話框上點“計算”按鈕彈出以下消息對話框:

    大家也可以將MessageBox函數換為AfxMessageBox()函數,同時參數進行相應修改,運行下看看效果。

    ?

    ?

    文件對話框

    ?

    ??????文件對話框的分類

    ??????文件對話框分為 打開文件對話框保存文件對話框,相信大家在Windows系統中經常見到這兩種文件對話框。例如,很多編輯軟件像記事本等都有“打開”選項,選擇“打開”后會彈出一個對話框,讓我們選擇要打開文件的路徑,這個對話框就是打開文件對話框;除了“打開”選項一般還會有“另存為”選項,選擇“另存為”后往往也會有一個對話框彈出,讓我們選擇保存路徑,這就是保存文件對話框。

    ?????? 正如上面舉例說明的,打開文件對話框用于選擇要打開的文件的路徑,保存文件對話框用來選擇要保存的文件的路徑。

    ?

    ???????文件對話框類CFileDialog

    ??????MFC使用文件對話框類CFileDialog封裝了對文件對話框的操作。CFileDialog類的構造函數原型如下:

    explicit CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt = NULL,LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter = NULL,CWnd* pParentWnd = NULL,DWORD dwSize = 0,BOOL bVistaStyle = TRUE );

    ???????參數說明:

    ?????? bOpenFileDialog:指定要創建的文件對話框的類型。設為TRUE將創建打開文件對話框,否則將創建保存文件對話框。

    ???????lpszDefExt:默認的文件擴展名。如果用戶在文件名編輯框中沒有輸入擴展名,則由lpszDefExt指定的擴展名將被自動添加到文件名后。默認為NULL。

    ?????? lpszFileName:文件名編輯框中顯示的初始文件名。如果為NULL,則不顯示初始文件名。

    ????? ?dwFlags:文件對話框的屬性,可以是一個值也可以是多個值的組合。關于屬性值的定義,可以在MSDN中查找結構體OPENFILENAME,元素Flags的說明中包含了所有屬性值。默認為OFN_HIDEREADONLY和OFN_OVERWRITEPROMPT的組合,OFN_HIDEREADONLY表示隱藏文件對話框上的“Read Only”復選框,OFN_OVERWRITEPROMPT表示在保存文件對話框中如果你選擇的文件存在了,就彈出一個消息對話框,要求確定是否要覆蓋此文件。

    ???????lpszFilter:文件過濾器,它是由若干字符串對組成的一個字符串序列。如果指定了文件過濾器,則文件對話框中只有符合過濾條件的文件顯示在文件列表中待選擇。給大家看看VS2010 MSDN中給出的一個例子:

    ?????? static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||");

    ?????? 這樣設置過濾器以后,文件對話框的擴展名組合框中將有四個選項:Chart Files (*.xlc)、Worksheet Files (*.xls)、Data Files(*.xlc;*.xls)和All Files (*.*),大家可以看到每種文件的擴展名規定都是一個字符串對,例如Chart Files的過濾字符串是Chart Files(*.xlc)和*.xlc成對出現的。

    ?????? pParentWnd:文件對話框的父窗口的指針。

    ???????dwSize:OPENFILENAME結構體的大小。不同的操作系統對應不同的dwSize值。MFC通過此參數決定文件對話框的適當類型(例如,創建Windows 2000文件對話框還是XP文件對話框)。默認為0,表示MFC將根據程序運行的操作系統版本來決定使用哪種文件對話框。

    ?????? bVistaStyle:指定文件對話框的風格,設為TRUE則使用Vista風格的文件對話框,否則使用舊版本的文件對話框。此參數僅在Windows Vista中編譯時適用。

    ?????? 文件對話框也是模態對話框,所以在打開時也需要調用CFileDialog類的DoModal()成員函數。在打開文件對話框中點了“打開”或者在保存文件對話框中點了“保存”以后,我們可以使用CFileDialog類的成員函數GetPathName()獲取選擇的文件路徑。

    ?????? 下面列出幾個CFileDialog類的成員函數,我們可以使用它們獲得文件對話框中的各種選擇。

    GetFileExt():獲得選定文件的后綴名。
    GetFileName():獲得選定文件的名稱,包括后綴名。
    GetFileTitle():獲得選定文件的標題,即不包括后綴名。
    GetFolderPath():獲得選定文件的目錄。
    GetNextPathName():獲得下一個選定的文件的路徑全名。
    GetPathName():獲得選定文件的路徑全名。
    GetReadOnlyPref():獲得是否“以只讀方式打開”。
    GetStartPosition():獲得文件名列表中的第一個元素的位置。

    ?

    ???????文件對話框實例

    ??????根據前面所講內容,雞啄米給大家做個文件對話框實例。

    ?????? 1.創建一個基于對話框的MFC應用程序工程,名稱設為“Example17”。

    ?????? 2.修改主對話框IDD_EXAMPLE17_DIALOG的模板,刪除自動生成的“TODO: Place dialog controls here.”靜態文本框,添加兩個編輯框,ID分別為IDC_OPEN_EDIT和IDC_SAVE_EDIT,再添加兩個按鈕,ID分別設為IDC_OPEN_BUTTON和IDC_SAVE_BUTTON,Caption分別設為“打開”和“保存”。按鈕IDC_OPEN_BUTTON用于顯示打開文件對話框,編輯框IDC_OPEN_EDIT顯示在打開文件對話框中選擇的文件路徑。按鈕IDC_SAVE_BUTTON用于顯示保存文件對話框,編輯框IDC_SAVE_BUTTON顯示在保存文件對話框中選擇的文件路徑。

    ?????? 3.分別為按鈕IDC_OPEN_BUTTON和IDC_SAVE_BUTTON添加點擊消息的消息處理函數CExample17Dlg::OnBnClickedOpenButton()和CExample17Dlg::OnBnClickedSaveButton()。

    ????? ?4.修改兩個消息處理函數如下:

    void CExample17Dlg::OnBnClickedOpenButton() { // TODO: Add your control notification handler code here // 設置過濾器 TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); // 構造打開文件對話框 CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); CString strFilePath; // 顯示打開文件對話框 if (IDOK == fileDlg.DoModal()) { // 如果點擊了文件對話框上的“打開”按鈕,則將選擇的文件路徑顯示到編輯框里 strFilePath = fileDlg.GetPathName(); SetDlgItemText(IDC_OPEN_EDIT, strFilePath); } } void CExample17Dlg::OnBnClickedSaveButton() { // TODO: Add your control notification handler code here // 設置過濾器 TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||"); // 構造保存文件對話框 CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this); CString strFilePath; // 顯示保存文件對話框 if (IDOK == fileDlg.DoModal()) { // 如果點擊了文件對話框上的“保存”按鈕,則將選擇的文件路徑顯示到編輯框里 strFilePath = fileDlg.GetPathName(); SetDlgItemText(IDC_SAVE_EDIT, strFilePath); } }

    ???????上面顯示編輯框內容時,雞啄米使用了Windows API函數SetDlgItemText,當然也可以先給編輯框關聯變量,然后再使用雞啄米在創建對話框類和添加控件變量中介紹的
    CDialogEx::UpdateData()函數,但是雞啄米比較習慣使用SetDlgItemText函數,感覺比較靈活。

    ?????? 5.運行此程序,在結果對話框上點“打開”按鈕,顯示打開文件對話框如下:

    點“保存”按鈕后,顯示保存文件對話框:

    在打開文件對話框和保存文件對話框都選擇了文件路徑后,主對話框如下:

    ??? 到此,文件對話框就講完了,是不是依然很簡單?如果忘記了文件對話框類構造函數的參數意義,可以回到雞啄米來看看或者在MSDN上查閱。

    ?

    ?

    字體對話框

    ?

    ?????? 字體對話框的作用是用來選擇字體。我們也經常能夠見到。MFC使用CFontDialog類封裝了字體對話框的所有操作。字體對話框也是一種模態對話框。

    ???????CFontDialog類的構造函數

    ?????? 我們先來了解CFontDialog類。它的常用構造函數原型如下:

    CFontDialog(LPLOGFONT lplfInitial = NULL,DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,CDC* pdcPrinter = NULL,CWnd* pParentWnd = NULL );參數說明:lplfInitial:指向LOGFONT結構體數據的指針,可以通過它設置字體的一些特征。dwFlags:指定選擇字體的一個或多個屬性,詳情可在MSDN中查閱。pdcPrinter:指向一個打印設備上下文的指針。pParentWnd:指向字體對話框父窗口的指針。

    ?????? 上面的構造函數中第一個參數為LOGFONT指針,LOGFONT結構體中包含了字體的大部分特征,包括字體高度、寬度、方向、名稱等等。下面是此結構體的定義:

    typedef struct tagLOGFONT {LONG lfHeight;LONG lfWidth;LONG lfEscapement;LONG lfOrientation;LONG lfWeight;BYTE lfItalic;BYTE lfUnderline;BYTE lfStrikeOut;BYTE lfCharSet;BYTE lfOutPrecision;BYTE lfClipPrecision;BYTE lfQuality;BYTE lfPitchAndFamily;TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT;

    ?

    ???????獲取字體對話框中所選字體

    ?????? 我們在字體對話框中選擇了字體后,如何獲取選定的字體呢?我們可以通過CFontDialog類的成員變量m_cf間接獲得選定字體的CFont對象。m_cf是CHOOSEFONT類型的變量,CHOOSEFONT結構體定義如下:

    typedef struct {DWORD lStructSize;HWND hwndOwner;HDC hDC;LPLOGFONT lpLogFont;INT iPointSize;DWORD Flags;COLORREF rgbColors;LPARAM lCustData;LPCFHOOKPROC lpfnHook;LPCTSTR lpTemplateName;HINSTANCE hInstance;LPTSTR lpszStyle;WORD nFontType;INT nSizeMin;INT nSizeMax; } CHOOSEFONT, *LPCHOOSEFONT;

    ?????? CHOOSEFON結構體中有個成員lpLogFont,它是指向LOGFONT結構體變量的指針,就像上面所說,LOGFONT中包含了字體特征,例如,我們可以通過LOGFONT的lfFaceName得知字體名。

    ?????? 我們最終要獲得的是所選擇字體的CFont對象,有了字體的LOGFONT怎樣獲得對應的CFont對象呢?使用CFont類的成員函數CreateFontIndirect可以達到此目的。函數原型如下:

    ?????? BOOL CreateFontIndirect(const LOGFONT* lpLogFont );

    ?????? 參數是LOGFONT指針類型,我們可以傳入CFontDialog類成員變量m_cf的lpLogFont成員,就可以得到所選字體的CFont對象了。

    ?

    ???????字體對話框應用實例

    ?????? 雞啄米給大家做一個字體對話框的實例。先介紹此實例要實現的功能,生成一個對話框,對話框中放置一個“字體選擇”按鈕和一個編輯框。點擊“字體選擇”按鈕將彈出字體對話框。編輯框用于顯示所選字體名,并以選定的字體來顯示字體名字符串,例如,如果選擇了宋體,則在編輯框中以宋體顯示字符串“宋體”。

    ???????以下是創建此實例的步驟:

    ?????? 1.創建一個基于對話框的MFC工程,名字為“Example18”。

    ?????? 2.在自動生成的主對話框IDD_EXAMPLE18_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態文本框,添加一個按鈕,ID設為IDC_FONT_BUTTON,Caption設為“字體選擇”,用于顯示字體對話框來選擇字體,再添加一個編輯框,ID設為IDC_FONT_EDIT,用來以所選字體顯示字體名字符串。

    ?????? 3.在Example18Dlg.h中為CExample18Dlg類添加private成員變量:CFont m_font;,用來保存編輯框中選擇的字體。

    ?????? 4.為按鈕IDC_FONT_BUTTON添加點擊消息的消息處理函數CExample18Dlg::OnBnClickedFontButton()。

    ?????? 5.修改消息處理函數CExample18Dlg::OnBnClickedFontButton()如下:

    void CExample18Dlg::OnBnClickedFontButton() { // TODO: Add your control notification handler code here CString strFontName; // 字體名稱 LOGFONT lf; // LOGFONT變量 // 將lf所有字節清零 memset(&lf, 0, sizeof(LOGFONT)); // 將lf中的元素字體名設為“宋體” _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋體")); // 構造字體對話框,初始選擇字體名為“宋體” CFontDialog fontDlg(&lf); if (IDOK == fontDlg.DoModal()) // 顯示字體對話框 { // 如果m_font已經關聯了一個字體資源對象,則釋放它 if (m_font.m_hObject) { m_font.DeleteObject(); } // 使用選定字體的LOGFONT創建新的字體 m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont); // 獲取編輯框IDC_FONT_EDIT的CWnd指針,并設置其字體 GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font); // 如果用戶選擇了字體對話框的OK按鈕,則獲取被選擇字體的名稱并顯示到編輯框里 strFontName = fontDlg.m_cf.lpLogFont->lfFaceName; SetDlgItemText(IDC_FONT_EDIT, strFontName); } }

    ?????? 6.最后,編譯運行程序。顯示結果對話框,點擊“字體選擇”按鈕,將彈出字體對話框,默認選擇為“宋體”,我們改而選擇“華文彩云”字體點“確定”,編輯框中會像如下顯示:

    ?????? 到此,我們又學會了字體對話框的使用,對于以后在界面開發中控制顯示的字體很有幫助。有問題歡迎在雞啄米留言。

    ?

    ?

    顏色對話框

    ?

    ?????? 顏色對話框大家肯定也不陌生,我們可以打開它選擇需要的顏色,簡單說,它的作用就是用來選擇顏色。MFC中提供了CColorDialog類封裝了顏色對話框的所有操作,我們可以通過它顯示顏色對話框,并獲取顏色對話框中選擇的顏色。顏色對話框跟字體對話框一樣,也是一種模態對話框。

    ???????CColorDialog類的構造函數

    CColorDialog(
    ?? COLORREF clrInit = 0,
    ?? DWORD dwFlags = 0,
    ?? CWnd* pParentWnd = NULL
    );

    ?????? 參數說明:

    ?????? clrInit:默認選擇顏色的顏色值,類型為COLORREF,實際上就是unsigned long類型。如果沒有設置它的值,則默認為RGB(0,0,0),即黑色。

    ?????? 注:RGB(r,g,b)是宏,可以計算顏色值。括號中的三個值分別為紅、綠、藍分量的值。

    ?????? dwFlags:自定義顏色對話框功能和外觀的屬性值。詳情可在MSDN中查閱。

    ?????? pParentWnd:顏色對話框的父窗口的指針。

    ???????獲取顏色對話框中所選顏色值

    ?????? 我們使用顏色對話框的最終目的還是要獲得在顏色對話框中選擇的顏色值。為此CColorDialog類的成員函數GetColor()能夠很好的實現我們的要求。GetColor()函數的原型為:

    ?????? COLORREF GetColor( ) const;

    ???????它返回所選顏色的COLORREF值。

    ?????? 如果我們想獲得R、G、B各分量的值呢?可以根據GetColor得到的COLORREF顏色值,通過使用GetRValue、GetGValue和GetBValue三個宏獲得。GetRValue的語法形式為:

    ?????? BYTE GetRValue(DWORD rgb);

    ???????參數rgb就是COLORREF顏色值,返回值即是R分量值。其他兩個宏的形式與之類似。例如,GetColor()函數返回的COLORREF為10000,則R分量值就是GetRValue(10000)。

    ???????顏色對話框應用實例

    ?????? 雞啄米下面給大家做一個顏色對話框的小例子。此例要實現的功能簡單介紹下:生成一個對話框,對話框中放置一個“顏色選擇”按鈕,四個靜態文本框和四個編輯框。四個靜態文本框分別顯示Color:、R:、G:、B:,每個靜態文本框后面跟一個編輯框,分別用來顯示顏色對話框中選擇的顏色值和所選顏色值的紅色分量、綠色分量、藍色分量。

    ???????以下是實例創建的步驟:

    ???????1.創建一個基于對話框的MFC工程,名字為“Example19”。

    ???????2.在自動生成的主對話框IDD_EXAMPLE19_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態文本框,添加一個按鈕,ID設為IDC_COLOR_BUTTON,Caption設為“顏色選擇”,用于顯示顏色對話框來選擇顏色。再添加四個靜態文本框,ID分別為IDC_COLOR_STATIC、IDC_R_STATIC、IDC_G_STATIC、IDC_B_STATIC,Caption分別設為“Color:”、“R:”、“G:”、“B:”,然后每個靜態文本框后添加一個編輯框,四個編輯框的ID分別為IDC_COLOR_EDIT、IDC_R_EDIT、IDC_G_EDIT、IDC_B_EDIT,分別用來顯示顏色對話框中選擇的顏色值和所選顏色值的紅色分量、綠色分量、藍色分量。

    ?????? 3.為按鈕IDC_COLOR_BUTTON添加點擊消息的消息處理函數CExample19Dlg::OnBnClickedColorButton()。

    ?????? 4.修改消息處理函數CExample19Dlg::OnBnClickedColorButton()如下:

    void CExample19Dlg::OnBnClickedColorButton() { // TODO: Add your control notification handler code here COLORREF color = RGB(255, 0, 0); // 顏色對話框的初始顏色為紅色 CColorDialog colorDlg(color); // 構造顏色對話框,傳入初始顏色值 if (IDOK == colorDlg.DoModal()) // 顯示顏色對話框,并判斷是否點擊了“確定” { color = colorDlg.GetColor(); // 獲取顏色對話框中選擇的顏色值 SetDlgItemInt(IDC_COLOR_EDIT, color); // 在Color編輯框中顯示所選顏色值 SetDlgItemInt(IDC_R_EDIT, GetRValue(color)); // 在R編輯框中顯示所選顏色的R分量值 SetDlgItemInt(IDC_G_EDIT, GetGValue(color)); // 在G編輯框中顯示所選顏色的G分量值 SetDlgItemInt(IDC_B_EDIT, GetBValue(color)); // 在B編輯框中顯示所選顏色的B分量值 } }

    ?????? 5.最后編譯運行程序,在結果對話框中點擊“顏色選擇”按鈕,彈出顏色對話框。初始狀態下,選擇框在紅色上,我們選另一種顏色,此時的顏色對話框如下:

    點“確定”,主對話框上的四個編輯框中分別顯示了選擇的顏色值、R分量、G分量和B分量:

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的MFC 最详细入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    最新版天堂资源中文官网 | 午夜精品久久久久久久久 | 久久久久久久女国产乱让韩 | 久久久中文久久久无码 | 在线观看免费人成视频 | 99视频精品全部免费免费观看 | 国产精品99久久精品爆乳 | 99久久久无码国产aaa精品 | 国内揄拍国内精品少妇国语 | 色窝窝无码一区二区三区色欲 | 日本爽爽爽爽爽爽在线观看免 | 亚洲男人av天堂午夜在 | 激情内射日本一区二区三区 | 奇米影视7777久久精品 | 亚洲国产一区二区三区在线观看 | 大肉大捧一进一出视频出来呀 | 亚洲区欧美区综合区自拍区 | 国产成人精品久久亚洲高清不卡 | 久久99久久99精品中文字幕 | 成人无码影片精品久久久 | 小鲜肉自慰网站xnxx | 奇米影视7777久久精品人人爽 | 久久久久免费看成人影片 | 强开小婷嫩苞又嫩又紧视频 | 在线播放无码字幕亚洲 | 久久精品人妻少妇一区二区三区 | 亚洲国产一区二区三区在线观看 | 亚洲の无码国产の无码步美 | 日韩视频 中文字幕 视频一区 | 曰韩无码二三区中文字幕 | 国产精品成人av在线观看 | 装睡被陌生人摸出水好爽 | 99久久99久久免费精品蜜桃 | 国产精品久久久久久亚洲影视内衣 | 亚洲国产av精品一区二区蜜芽 | 国产香蕉97碰碰久久人人 | 久久精品一区二区三区四区 | 人人超人人超碰超国产 | 天堂一区人妻无码 | 国产成人无码一二三区视频 | 2020最新国产自产精品 | 免费观看又污又黄的网站 | 2019nv天堂香蕉在线观看 | 午夜免费福利小电影 | 日韩精品久久久肉伦网站 | 中文字幕无码免费久久99 | 欧美精品免费观看二区 | 亚洲а∨天堂久久精品2021 | 免费无码的av片在线观看 | 色偷偷人人澡人人爽人人模 | a在线观看免费网站大全 | 国产亚洲精品久久久久久国模美 | 欧美性生交xxxxx久久久 | 7777奇米四色成人眼影 | 精品久久久久久亚洲精品 | 欧美亚洲日韩国产人成在线播放 | 在线成人www免费观看视频 | 永久黄网站色视频免费直播 | 高清不卡一区二区三区 | 久久久婷婷五月亚洲97号色 | 玩弄中年熟妇正在播放 | 伊人久久大香线蕉午夜 | 亚洲欧美国产精品专区久久 | 色偷偷人人澡人人爽人人模 | 亚洲自偷自拍另类第1页 | 免费视频欧美无人区码 | 婷婷综合久久中文字幕蜜桃三电影 | 麻豆md0077饥渴少妇 | 国产性生大片免费观看性 | 亚洲国产精品成人久久蜜臀 | 狠狠色噜噜狠狠狠狠7777米奇 | 久久久久久久女国产乱让韩 | 中文久久乱码一区二区 | 无码人妻久久一区二区三区不卡 | 亚洲色偷偷偷综合网 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产国语老龄妇女a片 | 久久人人97超碰a片精品 | 伊人久久大香线蕉午夜 | 亚洲 另类 在线 欧美 制服 | 国产口爆吞精在线视频 | 一本久道高清无码视频 | 亚洲 另类 在线 欧美 制服 | 一本久久a久久精品vr综合 | 好屌草这里只有精品 | 国产精品久久久av久久久 | 日韩人妻无码一区二区三区久久99 | 夫妻免费无码v看片 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 青青久在线视频免费观看 | 国产偷自视频区视频 | 午夜丰满少妇性开放视频 | а√天堂www在线天堂小说 | 极品尤物被啪到呻吟喷水 | 亚洲精品一区二区三区大桥未久 | 131美女爱做视频 | 精品久久久无码中文字幕 | 成人片黄网站色大片免费观看 | 国产精品无套呻吟在线 | 久久视频在线观看精品 | 97精品人妻一区二区三区香蕉 | 漂亮人妻洗澡被公强 日日躁 | 成人aaa片一区国产精品 | 国产精品办公室沙发 | 亚洲精品国产精品乱码视色 | 在线成人www免费观看视频 | 欧美老人巨大xxxx做受 | 装睡被陌生人摸出水好爽 | 国产精品亚洲а∨无码播放麻豆 | 久久国产自偷自偷免费一区调 | 风流少妇按摩来高潮 | 亚洲最大成人网站 | 免费无码的av片在线观看 | 高清国产亚洲精品自在久久 | 欧美 日韩 人妻 高清 中文 | 色五月丁香五月综合五月 | 图片小说视频一区二区 | 无码国产色欲xxxxx视频 | 日韩亚洲欧美中文高清在线 | 中文字幕乱码人妻二区三区 | 99久久婷婷国产综合精品青草免费 | 国产日产欧产精品精品app | 奇米影视888欧美在线观看 | 国内综合精品午夜久久资源 | av香港经典三级级 在线 | 又粗又大又硬又长又爽 | 亚洲色大成网站www | 一本久久伊人热热精品中文字幕 | 久久精品人人做人人综合试看 | 国产精品丝袜黑色高跟鞋 | 色狠狠av一区二区三区 | 99久久婷婷国产综合精品青草免费 | 性欧美牲交xxxxx视频 | 国产欧美熟妇另类久久久 | 亚洲精品国产精品乱码视色 | 亚洲狠狠婷婷综合久久 | 伊在人天堂亚洲香蕉精品区 | 国产精品久久久久久无码 | 欧美成人免费全部网站 | 国精品人妻无码一区二区三区蜜柚 | √天堂资源地址中文在线 | 亚洲日韩av片在线观看 | 久久久精品国产sm最大网站 | 精品无码成人片一区二区98 | 日韩av无码一区二区三区不卡 | 精品成在人线av无码免费看 | 久久人人97超碰a片精品 | 国产一区二区三区精品视频 | 啦啦啦www在线观看免费视频 | 久久久婷婷五月亚洲97号色 | 色老头在线一区二区三区 | 欧美日本免费一区二区三区 | 亚洲中文字幕久久无码 | 水蜜桃亚洲一二三四在线 | 中文久久乱码一区二区 | 樱花草在线社区www | 午夜福利试看120秒体验区 | 无码国模国产在线观看 | 成人欧美一区二区三区黑人免费 | 国产成人人人97超碰超爽8 | 久久精品中文字幕大胸 | 一本无码人妻在中文字幕免费 | 精品人妻人人做人人爽夜夜爽 | 最新国产麻豆aⅴ精品无码 | 无码人妻久久一区二区三区不卡 | 亚洲另类伦春色综合小说 | 精品亚洲韩国一区二区三区 | 中文字幕人成乱码熟女app | 久久精品视频在线看15 | 无码国产激情在线观看 | 国产97人人超碰caoprom | 天天摸天天碰天天添 | 国产亚洲精品精品国产亚洲综合 | www一区二区www免费 | 熟女少妇在线视频播放 | 日本免费一区二区三区最新 | 色噜噜亚洲男人的天堂 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚欧洲精品在线视频免费观看 | 午夜无码区在线观看 | 亚洲一区av无码专区在线观看 | 国产精品二区一区二区aⅴ污介绍 | 亚洲 激情 小说 另类 欧美 | 精品偷自拍另类在线观看 | 日韩人妻无码中文字幕视频 | 人人妻人人藻人人爽欧美一区 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品久久国产三级国 | 免费人成网站视频在线观看 | 欧美乱妇无乱码大黄a片 | 免费网站看v片在线18禁无码 | 日韩少妇内射免费播放 | 国内揄拍国内精品少妇国语 | 久久 国产 尿 小便 嘘嘘 | 两性色午夜视频免费播放 | 欧美自拍另类欧美综合图片区 | 欧美精品一区二区精品久久 | 国产人成高清在线视频99最全资源 | 少妇太爽了在线观看 | 成人试看120秒体验区 | 伊人久久大香线焦av综合影院 | 欧美 日韩 亚洲 在线 | 欧美兽交xxxx×视频 | 亚洲日韩av一区二区三区四区 | 99久久人妻精品免费一区 | 亚洲综合久久一区二区 | 日韩av激情在线观看 | 无码一区二区三区在线 | 国产成人人人97超碰超爽8 | 国产精品美女久久久久av爽李琼 | 国产av剧情md精品麻豆 | 亚洲狠狠婷婷综合久久 | 久青草影院在线观看国产 | 久久这里只有精品视频9 | 国产成人精品三级麻豆 | 国内揄拍国内精品少妇国语 | 99久久精品国产一区二区蜜芽 | 中文字幕乱码亚洲无线三区 | 狠狠色欧美亚洲狠狠色www | 日日夜夜撸啊撸 | 日日橹狠狠爱欧美视频 | 人妻无码久久精品人妻 | 亚洲精品美女久久久久久久 | 久久婷婷五月综合色国产香蕉 | 国产乱人无码伦av在线a | 精品国产乱码久久久久乱码 | 亚洲精品成a人在线观看 | 人妻无码αv中文字幕久久琪琪布 | 日韩少妇内射免费播放 | 久久精品中文闷骚内射 | 久久成人a毛片免费观看网站 | 亚洲国产精品久久人人爱 | 国产精品久久久一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 99久久人妻精品免费一区 | 久久亚洲中文字幕无码 | 亚洲七七久久桃花影院 | 亚洲精品综合一区二区三区在线 | 国产精品久久久久久久影院 | 精品一区二区三区无码免费视频 | 99久久精品无码一区二区毛片 | 成人无码视频在线观看网站 | 免费视频欧美无人区码 | 中文字幕无码视频专区 | 国产成人午夜福利在线播放 | 蜜臀av在线播放 久久综合激激的五月天 | 欧美一区二区三区视频在线观看 | 欧美激情综合亚洲一二区 | 国产人妻久久精品二区三区老狼 | 欧美老人巨大xxxx做受 | 亚洲自偷自拍另类第1页 | 国产精品视频免费播放 | 18禁黄网站男男禁片免费观看 | 欧美国产日韩亚洲中文 | 国产色在线 | 国产 | 国产高清av在线播放 | 未满成年国产在线观看 | 精品乱码久久久久久久 | 欧美第一黄网免费网站 | 国产人妻大战黑人第1集 | 欧美成人免费全部网站 | 牲欲强的熟妇农村老妇女视频 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 熟女少妇在线视频播放 | 国产一区二区不卡老阿姨 | 欧美午夜特黄aaaaaa片 | 国产精品igao视频网 | 国产特级毛片aaaaaaa高清 | 国内精品人妻无码久久久影院蜜桃 | 欧洲vodafone精品性 | 久久精品国产大片免费观看 | 国产麻豆精品精东影业av网站 | 日本高清一区免费中文视频 | 日韩精品成人一区二区三区 | 成人免费视频一区二区 | 国产真实乱对白精彩久久 | 大地资源网第二页免费观看 | 亚洲综合伊人久久大杳蕉 | 亚洲第一无码av无码专区 | 国精品人妻无码一区二区三区蜜柚 | 一本大道伊人av久久综合 | 无码乱肉视频免费大全合集 | 亚洲国产av美女网站 | 国内少妇偷人精品视频 | 国产免费久久精品国产传媒 | 蜜臀av在线播放 久久综合激激的五月天 | 性欧美疯狂xxxxbbbb | 55夜色66夜色国产精品视频 | 小sao货水好多真紧h无码视频 | 国精品人妻无码一区二区三区蜜柚 | 又大又硬又爽免费视频 | 色婷婷久久一区二区三区麻豆 | 国产一区二区三区日韩精品 | 国产凸凹视频一区二区 | 国产成人精品视频ⅴa片软件竹菊 | 日日橹狠狠爱欧美视频 | 中文字幕乱码人妻二区三区 | 无码人妻出轨黑人中文字幕 | 亚洲色偷偷偷综合网 | 欧美日韩人成综合在线播放 | 亚洲欧美国产精品久久 | 久久久精品456亚洲影院 | 露脸叫床粗话东北少妇 | 狂野欧美激情性xxxx | 999久久久国产精品消防器材 | 中文字幕精品av一区二区五区 | 国产综合在线观看 | 欧美成人高清在线播放 | 色欲av亚洲一区无码少妇 | 纯爱无遮挡h肉动漫在线播放 | 俺去俺来也在线www色官网 | 亚洲中文字幕成人无码 | 99精品久久毛片a片 | 99精品视频在线观看免费 | 国产精品无码永久免费888 | 激情内射日本一区二区三区 | 图片区 小说区 区 亚洲五月 | 色五月丁香五月综合五月 | 小泽玛莉亚一区二区视频在线 | 午夜福利试看120秒体验区 | 18禁止看的免费污网站 | 中文无码成人免费视频在线观看 | 97色伦图片97综合影院 | 国产亚洲精品久久久久久 | 国产一精品一av一免费 | 国产激情综合五月久久 | 少妇被粗大的猛进出69影院 | 少妇激情av一区二区 | 鲁一鲁av2019在线 | 精品 日韩 国产 欧美 视频 | 永久黄网站色视频免费直播 | 国产成人综合美国十次 | 亚洲精品综合五月久久小说 | 天天综合网天天综合色 | 日日麻批免费40分钟无码 | 色诱久久久久综合网ywww | 欧美第一黄网免费网站 | 初尝人妻少妇中文字幕 | 高潮毛片无遮挡高清免费 | 九九热爱视频精品 | 丝袜足控一区二区三区 | 国产超级va在线观看视频 | 亚洲国产精品无码一区二区三区 | 一本久久a久久精品vr综合 | 偷窥日本少妇撒尿chinese | 伊在人天堂亚洲香蕉精品区 | 久久久久亚洲精品中文字幕 | 青草视频在线播放 | 中文字幕av日韩精品一区二区 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲一区二区三区偷拍女厕 | 奇米影视7777久久精品 | 国产卡一卡二卡三 | 无码精品人妻一区二区三区av | 永久免费观看国产裸体美女 | 欧美人与动性行为视频 | 亚洲中文字幕av在天堂 | 日韩亚洲欧美精品综合 | 亚洲日本va午夜在线电影 | 亚洲精品综合一区二区三区在线 | √天堂资源地址中文在线 | 国产成人无码区免费内射一片色欲 | 沈阳熟女露脸对白视频 | 一本久久a久久精品亚洲 | 亚洲天堂2017无码 | 久久综合久久自在自线精品自 | 男人的天堂2018无码 | 亚洲午夜久久久影院 | 在线看片无码永久免费视频 | 成人动漫在线观看 | 欧美高清在线精品一区 | 青草青草久热国产精品 | 午夜肉伦伦影院 | 日日摸夜夜摸狠狠摸婷婷 | 久久久久久久女国产乱让韩 | 中文字幕av伊人av无码av | 国产特级毛片aaaaaa高潮流水 | 伊人久久婷婷五月综合97色 | 亚洲国产综合无码一区 | 对白脏话肉麻粗话av | 国产极品美女高潮无套在线观看 | 最新国产麻豆aⅴ精品无码 | 国产人妻久久精品二区三区老狼 | 377p欧洲日本亚洲大胆 | 日日夜夜撸啊撸 | 免费网站看v片在线18禁无码 | 日本在线高清不卡免费播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲小说春色综合另类 | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品久久久久久亚洲毛片 | 亚洲爆乳无码专区 | 成人av无码一区二区三区 | 午夜免费福利小电影 | 久久综合狠狠综合久久综合88 | 奇米影视7777久久精品 | 亚洲精品成人av在线 | 久久午夜无码鲁丝片 | 日本肉体xxxx裸交 | 亚洲第一网站男人都懂 | 亚洲综合无码久久精品综合 | 中文字幕av日韩精品一区二区 | 婷婷五月综合激情中文字幕 | 国产人妻精品午夜福利免费 | 国产区女主播在线观看 | 扒开双腿疯狂进出爽爽爽视频 | 久9re热视频这里只有精品 | 野外少妇愉情中文字幕 | 国产av无码专区亚洲awww | 免费男性肉肉影院 | 少妇被黑人到高潮喷出白浆 | 色五月五月丁香亚洲综合网 | 日产精品高潮呻吟av久久 | 久久综合网欧美色妞网 | 中文字幕乱码中文乱码51精品 | 久久精品成人欧美大片 | 两性色午夜免费视频 | 精品久久久久香蕉网 | 欧美性猛交xxxx富婆 | 亚洲欧美国产精品专区久久 | 中文字幕av日韩精品一区二区 | 久久国产劲爆∧v内射 | 国产成人综合色在线观看网站 | 日本一卡2卡3卡四卡精品网站 | 麻豆国产97在线 | 欧洲 | 99久久久无码国产aaa精品 | 曰韩少妇内射免费播放 | 亚洲欧美精品伊人久久 | 国产9 9在线 | 中文 | 人人澡人人妻人人爽人人蜜桃 | 中文字幕无码av激情不卡 | 精品久久综合1区2区3区激情 | 日本一区二区三区免费播放 | 成人性做爰aaa片免费看不忠 | 老司机亚洲精品影院 | 人人澡人人透人人爽 | 精品无人国产偷自产在线 | 日本大乳高潮视频在线观看 | 美女张开腿让人桶 | 亚洲中文字幕在线无码一区二区 | 少妇高潮一区二区三区99 | 日本大乳高潮视频在线观看 | 老熟妇乱子伦牲交视频 | 欧美丰满老熟妇xxxxx性 | 一个人看的www免费视频在线观看 | 国产成人午夜福利在线播放 | 无码人妻丰满熟妇区五十路百度 | 人人爽人人爽人人片av亚洲 | 无码人妻丰满熟妇区五十路百度 | 欧美xxxx黑人又粗又长 | 精品国产aⅴ无码一区二区 | 蜜桃视频插满18在线观看 | 精品无码av一区二区三区 | 人人爽人人澡人人高潮 | 亚洲一区av无码专区在线观看 | 精品国产国产综合精品 | 亚洲精品成人福利网站 | 久久综合给合久久狠狠狠97色 | 在线 国产 欧美 亚洲 天堂 | 久久久久亚洲精品男人的天堂 | 午夜免费福利小电影 | 99精品视频在线观看免费 | 中文字幕乱码亚洲无线三区 | 精品人人妻人人澡人人爽人人 | 一个人免费观看的www视频 | 色婷婷综合激情综在线播放 | 国产高清av在线播放 | 牲欲强的熟妇农村老妇女视频 | 九九综合va免费看 | 亚洲国产午夜精品理论片 | 国产乱人伦av在线无码 | 欧美国产亚洲日韩在线二区 | 日本丰满熟妇videos | 最新国产麻豆aⅴ精品无码 | 色一情一乱一伦一区二区三欧美 | 免费人成在线观看网站 | 精品国产一区二区三区av 性色 | 99久久人妻精品免费一区 | 国产精品久久久久久久影院 | 99re在线播放 | 久久综合狠狠综合久久综合88 | 1000部啪啪未满十八勿入下载 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕人成乱码熟女app | 99麻豆久久久国产精品免费 | 又色又爽又黄的美女裸体网站 | 99久久久无码国产aaa精品 | 国产成人亚洲综合无码 | 国产一区二区三区影院 | 夜夜影院未满十八勿进 | 日本一区二区三区免费高清 | 国产精品99爱免费视频 | 亚洲中文字幕va福利 | 国产激情无码一区二区app | 国产高清不卡无码视频 | 国产热a欧美热a在线视频 | 色一情一乱一伦一区二区三欧美 | 国产精品99爱免费视频 | 亚洲天堂2017无码中文 | 大胆欧美熟妇xx | 久久午夜无码鲁丝片 | 67194成是人免费无码 | 国产综合在线观看 | 无码av中文字幕免费放 | 欧美日韩亚洲国产精品 | 成人三级无码视频在线观看 | 中文字幕av无码一区二区三区电影 | 色综合天天综合狠狠爱 | 久久综合给合久久狠狠狠97色 | 国产两女互慰高潮视频在线观看 | 亚洲 另类 在线 欧美 制服 | 日韩精品成人一区二区三区 | 亚洲男人av香蕉爽爽爽爽 | 国产一区二区三区精品视频 | 国产欧美精品一区二区三区 | 欧美丰满熟妇xxxx | 欧美性生交xxxxx久久久 | 亚洲精品无码人妻无码 | 久久人人爽人人爽人人片ⅴ | 日韩成人一区二区三区在线观看 | 精品人妻人人做人人爽 | 又湿又紧又大又爽a视频国产 | 在线观看免费人成视频 | 亚洲国产精品无码一区二区三区 | 人妻无码久久精品人妻 | 麻豆成人精品国产免费 | 欧美日韩精品 | 亚洲精品成人av在线 | 131美女爱做视频 | 久久综合香蕉国产蜜臀av | aa片在线观看视频在线播放 | 无码av中文字幕免费放 | 性生交大片免费看l | 美女扒开屁股让男人桶 | 日韩欧美中文字幕在线三区 | 熟妇女人妻丰满少妇中文字幕 | 中文字幕乱码人妻无码久久 | 一本久久a久久精品亚洲 | 18禁止看的免费污网站 | 中文字幕无码乱人伦 | 国产绳艺sm调教室论坛 | 欧美人与善在线com | 无码一区二区三区在线 | 午夜免费福利小电影 | 无码福利日韩神码福利片 | 国产一区二区三区影院 | 成人无码视频在线观看网站 | 亚洲欧美精品伊人久久 | 男人扒开女人内裤强吻桶进去 | 欧美激情综合亚洲一二区 | 亚洲午夜福利在线观看 | 99久久无码一区人妻 | 国产乱人伦av在线无码 | 老熟女重囗味hdxx69 | 久久国语露脸国产精品电影 | 欧美成人家庭影院 | 国产一区二区三区影院 | 日本爽爽爽爽爽爽在线观看免 | 亚洲无人区午夜福利码高清完整版 | 精品一区二区三区波多野结衣 | 亚洲综合伊人久久大杳蕉 | 正在播放老肥熟妇露脸 | 亚洲精品无码人妻无码 | 天干天干啦夜天干天2017 | 欧美三级不卡在线观看 | 99riav国产精品视频 | 欧美精品一区二区精品久久 | 夜夜躁日日躁狠狠久久av | 精品国偷自产在线视频 | 色诱久久久久综合网ywww | 国产精品久久久久久亚洲影视内衣 | 久久精品女人天堂av免费观看 | 亚洲gv猛男gv无码男同 | 国产精品无套呻吟在线 | 日本丰满熟妇videos | 日本精品高清一区二区 | 99久久人妻精品免费一区 | 国产成人精品无码播放 | 色综合视频一区二区三区 | 全黄性性激高免费视频 | 欧洲极品少妇 | 三上悠亚人妻中文字幕在线 | 亚洲精品综合五月久久小说 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 日本大乳高潮视频在线观看 | 999久久久国产精品消防器材 | 一本色道久久综合亚洲精品不卡 | 一本精品99久久精品77 | 乱人伦人妻中文字幕无码 | 精品午夜福利在线观看 | 鲁鲁鲁爽爽爽在线视频观看 | 人人妻人人澡人人爽人人精品浪潮 | 高中生自慰www网站 | 国产内射爽爽大片视频社区在线 | 麻花豆传媒剧国产免费mv在线 | 九九久久精品国产免费看小说 | 99久久精品无码一区二区毛片 | 成人综合网亚洲伊人 | 欧美三级不卡在线观看 | 久久久久av无码免费网 | 夜夜躁日日躁狠狠久久av | 中文字幕日产无线码一区 | 成人无码精品1区2区3区免费看 | 国产麻豆精品一区二区三区v视界 | 日本一区二区三区免费播放 | 天天爽夜夜爽夜夜爽 | 欧美成人高清在线播放 | 久久精品人妻少妇一区二区三区 | 又大又黄又粗又爽的免费视频 | 国产精品久久久久无码av色戒 | 亚洲综合久久一区二区 | 国产精品亚洲五月天高清 | 国产香蕉97碰碰久久人人 | 精品成人av一区二区三区 | 中文字幕无线码免费人妻 | 无码午夜成人1000部免费视频 | 亚洲乱亚洲乱妇50p | 小sao货水好多真紧h无码视频 | 亚洲日本va午夜在线电影 | 亚洲一区二区三区国产精华液 | 久久亚洲中文字幕精品一区 | 久久无码专区国产精品s | 国产激情无码一区二区 | 牲交欧美兽交欧美 | 日韩成人一区二区三区在线观看 | 88国产精品欧美一区二区三区 | 国产乱子伦视频在线播放 | 真人与拘做受免费视频 | 沈阳熟女露脸对白视频 | 无码精品人妻一区二区三区av | 女人和拘做爰正片视频 | 国产真人无遮挡作爱免费视频 | 狠狠色欧美亚洲狠狠色www | 国产成人精品久久亚洲高清不卡 | 1000部啪啪未满十八勿入下载 | 欧美三级a做爰在线观看 | 午夜免费福利小电影 | 国产亚洲日韩欧美另类第八页 | 欧美35页视频在线观看 | 伊人久久大香线蕉av一区二区 | 日韩精品无码免费一区二区三区 | 在线播放亚洲第一字幕 | 人妻互换免费中文字幕 | 国产午夜精品一区二区三区嫩草 | 国产特级毛片aaaaaaa高清 | 在线观看国产午夜福利片 | 无码精品人妻一区二区三区av | 欧美兽交xxxx×视频 | 天堂一区人妻无码 | 欧美亚洲日韩国产人成在线播放 | 免费网站看v片在线18禁无码 | 人人妻人人澡人人爽人人精品 | 无码国产乱人伦偷精品视频 | 国产精品久久久久久亚洲毛片 | 国产精品毛片一区二区 | 97久久精品无码一区二区 | 激情五月综合色婷婷一区二区 | 无遮挡啪啪摇乳动态图 | 亚洲第一无码av无码专区 | 丁香花在线影院观看在线播放 | 精品久久久久久亚洲精品 | 日本乱人伦片中文三区 | 亚洲色www成人永久网址 | 无码乱肉视频免费大全合集 | 中文字幕久久久久人妻 | 亚洲码国产精品高潮在线 | 超碰97人人做人人爱少妇 | 亚洲成a人片在线观看日本 | 日本精品少妇一区二区三区 | 天堂一区人妻无码 | 国产午夜手机精彩视频 | 亚无码乱人伦一区二区 | 日本一区二区三区免费高清 | 国产成人无码a区在线观看视频app | 真人与拘做受免费视频一 | 中文字幕中文有码在线 | 99在线 | 亚洲 | 67194成是人免费无码 | 精品人人妻人人澡人人爽人人 | 成人无码视频免费播放 | 在线播放亚洲第一字幕 | 成年美女黄网站色大免费视频 | 精品国产av色一区二区深夜久久 | 亚洲成色在线综合网站 | 国产亚洲视频中文字幕97精品 | 欧美一区二区三区视频在线观看 | 国产莉萝无码av在线播放 | 国产无套粉嫩白浆在线 | 乌克兰少妇性做爰 | 久久久久av无码免费网 | 国产精品对白交换视频 | 秋霞成人午夜鲁丝一区二区三区 | 97久久国产亚洲精品超碰热 | 欧美亚洲国产一区二区三区 | 无码人妻精品一区二区三区不卡 | 久久99精品国产.久久久久 | 国产精品国产三级国产专播 | 婷婷综合久久中文字幕蜜桃三电影 | 国产色xx群视频射精 | 欧美自拍另类欧美综合图片区 | 99国产欧美久久久精品 | 久久久久99精品成人片 | 夜精品a片一区二区三区无码白浆 | 免费人成在线观看网站 | 久久午夜无码鲁丝片午夜精品 | 成人无码视频在线观看网站 | 国产精品久久福利网站 | 国产高清不卡无码视频 | 男女性色大片免费网站 | 中文精品无码中文字幕无码专区 | 少妇无码一区二区二三区 | 初尝人妻少妇中文字幕 | 亚洲 a v无 码免 费 成 人 a v | 超碰97人人做人人爱少妇 | 一区二区三区高清视频一 | 日本xxxx色视频在线观看免费 | 福利一区二区三区视频在线观看 | 精品无码成人片一区二区98 | 亚洲一区二区三区国产精华液 | 人妻aⅴ无码一区二区三区 | 久久人人97超碰a片精品 | 国产精品嫩草久久久久 | 中文字幕无码乱人伦 | 兔费看少妇性l交大片免费 | 亚洲色欲久久久综合网东京热 | 精品无码一区二区三区爱欲 | 波多野结衣一区二区三区av免费 | 天干天干啦夜天干天2017 | 久久精品女人的天堂av | 国产激情一区二区三区 | 精品无码国产一区二区三区av | 在线天堂新版最新版在线8 | 色综合久久久久综合一本到桃花网 | 精品一区二区三区无码免费视频 | 色五月五月丁香亚洲综合网 | 精品国产精品久久一区免费式 | 男女超爽视频免费播放 | 亚洲最大成人网站 | 网友自拍区视频精品 | 在线a亚洲视频播放在线观看 | 99精品国产综合久久久久五月天 | 国产精品久久久久久久9999 | 婷婷六月久久综合丁香 | 成人欧美一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | av香港经典三级级 在线 | 色综合久久久无码网中文 | 免费播放一区二区三区 | 女人高潮内射99精品 | 亚洲天堂2017无码中文 | 日本熟妇乱子伦xxxx | 水蜜桃亚洲一二三四在线 | 日本一区二区三区免费高清 | 曰韩少妇内射免费播放 | 撕开奶罩揉吮奶头视频 | 久久久久久久女国产乱让韩 | 精品国产一区av天美传媒 | 无码av中文字幕免费放 | 中文精品无码中文字幕无码专区 | 天天爽夜夜爽夜夜爽 | 无码国模国产在线观看 | 国产综合在线观看 | 欧美freesex黑人又粗又大 | 亚洲中文字幕乱码av波多ji | aⅴ在线视频男人的天堂 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲国产午夜精品理论片 | 亚洲 日韩 欧美 成人 在线观看 | 好男人社区资源 | 人人澡人人妻人人爽人人蜜桃 | 撕开奶罩揉吮奶头视频 | 巨爆乳无码视频在线观看 | 午夜免费福利小电影 | 色综合久久88色综合天天 | 人妻少妇被猛烈进入中文字幕 | av小次郎收藏 | 国产亚洲欧美日韩亚洲中文色 | 色婷婷欧美在线播放内射 | 激情内射日本一区二区三区 | 人人妻人人藻人人爽欧美一区 | 国产成人综合在线女婷五月99播放 | 精品国产aⅴ无码一区二区 | 免费观看黄网站 | 亚洲爆乳精品无码一区二区三区 | 亚洲色欲色欲欲www在线 | 日韩人妻系列无码专区 | 国产精品久久福利网站 | 国产精品福利视频导航 | 国产精品久久久久久亚洲影视内衣 | 国产农村妇女高潮大叫 | 日韩在线不卡免费视频一区 | 色诱久久久久综合网ywww | 国产人妻人伦精品 | 一本色道婷婷久久欧美 | 亚洲 激情 小说 另类 欧美 | 最近中文2019字幕第二页 | 男人扒开女人内裤强吻桶进去 | 午夜精品一区二区三区的区别 | 免费视频欧美无人区码 | 亚洲午夜久久久影院 | 亚洲区欧美区综合区自拍区 | 极品嫩模高潮叫床 | 中文字幕无码日韩欧毛 | 精品无人国产偷自产在线 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲精品综合一区二区三区在线 | 人人妻人人澡人人爽欧美一区 | 色综合久久久久综合一本到桃花网 | 激情内射亚州一区二区三区爱妻 | 欧美性生交活xxxxxdddd | 在线观看国产一区二区三区 | 亚洲成a人片在线观看无码3d | 成熟女人特级毛片www免费 | 国产精品第一区揄拍无码 | 国产精品爱久久久久久久 | 亚洲大尺度无码无码专区 | 无码乱肉视频免费大全合集 | 欧美国产日韩亚洲中文 | 全黄性性激高免费视频 | 国产激情无码一区二区app | 日日麻批免费40分钟无码 | 日本在线高清不卡免费播放 | 男女下面进入的视频免费午夜 | 精品国产国产综合精品 | 少妇一晚三次一区二区三区 | 男人的天堂av网站 | 丝袜 中出 制服 人妻 美腿 | 亚洲欧美中文字幕5发布 | 人妻中文无码久热丝袜 | 国产三级精品三级男人的天堂 | 亚洲人成影院在线观看 | 午夜性刺激在线视频免费 | 中文字幕av无码一区二区三区电影 | 色婷婷综合激情综在线播放 | 欧美人与牲动交xxxx | 国产精品久久久午夜夜伦鲁鲁 | 小sao货水好多真紧h无码视频 | 丰满少妇熟乱xxxxx视频 | av无码不卡在线观看免费 | 国内老熟妇对白xxxxhd | 波多野结衣乳巨码无在线观看 | 亚洲色大成网站www | 亚洲天堂2017无码 | 人人爽人人爽人人片av亚洲 | 国产精品国产自线拍免费软件 | 日产国产精品亚洲系列 | 色综合久久久无码中文字幕 | 欧美xxxx黑人又粗又长 | 国产人妻人伦精品1国产丝袜 | 国产一区二区三区精品视频 | 国产成人无码一二三区视频 | 精品成在人线av无码免费看 | 色噜噜亚洲男人的天堂 | 日韩精品无码免费一区二区三区 | 中文字幕乱码中文乱码51精品 | 久在线观看福利视频 | 两性色午夜免费视频 | 人人澡人人透人人爽 | 性色av无码免费一区二区三区 | 久久精品国产99精品亚洲 | 精品日本一区二区三区在线观看 | 国产特级毛片aaaaaaa高清 | 色偷偷人人澡人人爽人人模 | 久久久久99精品成人片 | 欧洲美熟女乱又伦 | 午夜精品一区二区三区的区别 | 少妇激情av一区二区 | 国产真实伦对白全集 | 无码精品人妻一区二区三区av | 欧美精品无码一区二区三区 | 性史性农村dvd毛片 | 国产真实伦对白全集 | 77777熟女视频在线观看 а天堂中文在线官网 | 中文字幕无线码免费人妻 | 99久久精品日本一区二区免费 | 亚洲日本一区二区三区在线 | 免费网站看v片在线18禁无码 | 男人的天堂2018无码 | 丰满人妻翻云覆雨呻吟视频 | 女人被男人爽到呻吟的视频 | 天堂在线观看www | 欧美一区二区三区 | 国产偷自视频区视频 | 中文字幕日产无线码一区 | 国产两女互慰高潮视频在线观看 | 国产av一区二区三区最新精品 | 亚洲の无码国产の无码影院 | 亚洲色偷偷偷综合网 | 婷婷五月综合激情中文字幕 | www国产亚洲精品久久网站 | 国精产品一区二区三区 | 一本久久a久久精品亚洲 | 久久久久久久久蜜桃 | 午夜熟女插插xx免费视频 | 成人精品视频一区二区三区尤物 | 亚洲国产精品毛片av不卡在线 | 成在人线av无码免观看麻豆 | 国产97在线 | 亚洲 | 六月丁香婷婷色狠狠久久 | 欧美一区二区三区视频在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 国产成人无码一二三区视频 | 国产综合在线观看 | 国产69精品久久久久app下载 | 国产精品多人p群无码 | 亚洲国产综合无码一区 | 国产成人无码a区在线观看视频app | 国产亚洲美女精品久久久2020 | 国产人妻人伦精品1国产丝袜 | 草草网站影院白丝内射 | 国产精品永久免费视频 | 在教室伦流澡到高潮hnp视频 | 精品欧洲av无码一区二区三区 | 欧美熟妇另类久久久久久不卡 | 国产乱人伦偷精品视频 | 最近的中文字幕在线看视频 | 大色综合色综合网站 | 色婷婷综合中文久久一本 | 久久 国产 尿 小便 嘘嘘 | 51国偷自产一区二区三区 | 亚洲色大成网站www | 麻豆果冻传媒2021精品传媒一区下载 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲啪av永久无码精品放毛片 | 亚洲人成影院在线无码按摩店 | 伦伦影院午夜理论片 | 久久久久99精品成人片 | 亚洲日韩av一区二区三区四区 | 久久久久se色偷偷亚洲精品av | 国产美女精品一区二区三区 | 亚洲精品一区三区三区在线观看 | а天堂中文在线官网 | 国产成人一区二区三区在线观看 | 精品国产青草久久久久福利 | 无码福利日韩神码福利片 | 日韩精品无码免费一区二区三区 | 亚洲中文字幕乱码av波多ji | 精品久久久无码人妻字幂 | 天天摸天天碰天天添 | 欧美精品国产综合久久 | 精品国产乱码久久久久乱码 | 亚洲aⅴ无码成人网站国产app | 亚洲国产精品成人久久蜜臀 | 性啪啪chinese东北女人 | 国产麻豆精品精东影业av网站 | 全球成人中文在线 | 亚洲精品一区二区三区大桥未久 | 久久久婷婷五月亚洲97号色 | 性啪啪chinese东北女人 | 成人影院yy111111在线观看 | 国产熟女一区二区三区四区五区 | av无码久久久久不卡免费网站 | 国产精品亚洲专区无码不卡 | 国产人妻人伦精品1国产丝袜 | 中文字幕 人妻熟女 | 亚洲 日韩 欧美 成人 在线观看 | 人人妻人人澡人人爽欧美精品 | 对白脏话肉麻粗话av | 荫蒂被男人添的好舒服爽免费视频 | 久久久国产精品无码免费专区 | 极品尤物被啪到呻吟喷水 | 国产一区二区不卡老阿姨 | 无遮挡国产高潮视频免费观看 | 无人区乱码一区二区三区 | 国产熟妇高潮叫床视频播放 | 给我免费的视频在线观看 | 国内精品久久久久久中文字幕 | 一区二区三区乱码在线 | 欧洲 | 免费人成在线视频无码 | 精品久久久久香蕉网 | 香蕉久久久久久av成人 | 国产乱人无码伦av在线a | 亚洲一区二区三区在线观看网站 | 蜜臀av在线播放 久久综合激激的五月天 | 国产在线一区二区三区四区五区 | 性生交大片免费看女人按摩摩 | 天天综合网天天综合色 | 乱人伦人妻中文字幕无码久久网 | 小鲜肉自慰网站xnxx | 亚洲综合另类小说色区 | 水蜜桃亚洲一二三四在线 | 装睡被陌生人摸出水好爽 | 成人aaa片一区国产精品 | 国产凸凹视频一区二区 | 特级做a爰片毛片免费69 | 亲嘴扒胸摸屁股激烈网站 | 色综合久久久无码中文字幕 | 国内精品一区二区三区不卡 | 久激情内射婷内射蜜桃人妖 | 狂野欧美性猛xxxx乱大交 | 亚洲va中文字幕无码久久不卡 | 免费乱码人妻系列无码专区 | 午夜福利试看120秒体验区 | 国产麻豆精品精东影业av网站 | 国产两女互慰高潮视频在线观看 | 性欧美牲交xxxxx视频 | 久久人人爽人人爽人人片ⅴ | 亚洲一区二区三区在线观看网站 | 国产成人精品久久亚洲高清不卡 | 亚洲国产精品久久久久久 | 在线观看国产一区二区三区 | 国产成人无码av一区二区 | 无码av中文字幕免费放 | 国产乱人伦偷精品视频 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲熟女一区二区三区 | 窝窝午夜理论片影院 | 爽爽影院免费观看 | 国产人妻精品午夜福利免费 | 亚洲中文字幕在线观看 | 鲁鲁鲁爽爽爽在线视频观看 | 人人妻人人澡人人爽人人精品 | 久久综合激激的五月天 | 亚洲精品综合一区二区三区在线 | 动漫av一区二区在线观看 | 亚无码乱人伦一区二区 | 极品嫩模高潮叫床 | 成人无码视频免费播放 | 亚洲男人av香蕉爽爽爽爽 | 亚洲爆乳大丰满无码专区 | 玩弄人妻少妇500系列视频 | 日本精品人妻无码免费大全 | 无码帝国www无码专区色综合 | 国内老熟妇对白xxxxhd | 欧美午夜特黄aaaaaa片 | 樱花草在线社区www | 人妻少妇精品视频专区 | 国产成人一区二区三区别 | 久久亚洲a片com人成 | √天堂中文官网8在线 | 亚洲国产欧美国产综合一区 | 性欧美大战久久久久久久 | 任你躁在线精品免费 | 亚拍精品一区二区三区探花 | 国产精品久久久久久亚洲影视内衣 | 久久久精品国产sm最大网站 | 欧美日韩视频无码一区二区三 | 国产亚洲人成a在线v网站 | 老司机亚洲精品影院无码 | 欧美成人免费全部网站 | 日本护士xxxxhd少妇 | 欧洲美熟女乱又伦 | 亚洲日本一区二区三区在线 | 色诱久久久久综合网ywww | 丁香花在线影院观看在线播放 | 波多野结衣乳巨码无在线观看 | 国产日产欧产精品精品app | 欧美日本日韩 | 久久天天躁夜夜躁狠狠 | 亚洲男女内射在线播放 | 久久天天躁夜夜躁狠狠 | 99在线 | 亚洲 | 波多野结衣av一区二区全免费观看 | 日日天日日夜日日摸 | 国产av一区二区三区最新精品 | 国产精品a成v人在线播放 | 色一情一乱一伦一区二区三欧美 | 免费播放一区二区三区 | 欧美性生交xxxxx久久久 | 日韩在线不卡免费视频一区 | 国产后入清纯学生妹 | 一个人看的www免费视频在线观看 | 99riav国产精品视频 | 国内精品九九久久久精品 | 亚洲国产精品无码一区二区三区 | 在线播放免费人成毛片乱码 | 亚洲综合久久一区二区 | 国产综合久久久久鬼色 | 天天做天天爱天天爽综合网 | 99久久精品国产一区二区蜜芽 | 亚洲自偷自拍另类第1页 | 性生交大片免费看女人按摩摩 | 久久无码专区国产精品s | 国产精品亚洲专区无码不卡 | 午夜理论片yy44880影院 | 高中生自慰www网站 | 一本大道伊人av久久综合 | 波多野结衣乳巨码无在线观看 | av在线亚洲欧洲日产一区二区 | 日产精品99久久久久久 | 九九热爱视频精品 | 女人被男人爽到呻吟的视频 | 国色天香社区在线视频 | 熟妇人妻无乱码中文字幕 | 97久久国产亚洲精品超碰热 | 国产超级va在线观看视频 | 国产特级毛片aaaaaaa高清 | 国产口爆吞精在线视频 | 欧洲熟妇精品视频 | 欧美丰满熟妇xxxx性ppx人交 | 国产乱人无码伦av在线a | 九九久久精品国产免费看小说 | 无码吃奶揉捏奶头高潮视频 | 欧美freesex黑人又粗又大 | 特黄特色大片免费播放器图片 | 成人亚洲精品久久久久 | 亚洲色偷偷男人的天堂 | 在线 国产 欧美 亚洲 天堂 | 久久综合狠狠综合久久综合88 | 亚洲中文字幕无码中字 | 国产猛烈高潮尖叫视频免费 | 亚洲成av人综合在线观看 | 老太婆性杂交欧美肥老太 | 欧洲极品少妇 | 亚洲精品一区二区三区婷婷月 | 成人一区二区免费视频 | 国产一区二区不卡老阿姨 | 国产精品无码成人午夜电影 | 东京一本一道一二三区 | 久热国产vs视频在线观看 | 亚洲精品中文字幕乱码 | 性开放的女人aaa片 | 亚洲欧洲中文日韩av乱码 | 人人妻人人澡人人爽欧美精品 | 狠狠cao日日穞夜夜穞av | 免费视频欧美无人区码 | 国产av一区二区三区最新精品 | 成人影院yy111111在线观看 | 亚洲精品午夜无码电影网 | 中文字幕无线码免费人妻 | 国产成人无码av片在线观看不卡 | 一本色道久久综合亚洲精品不卡 | 九九在线中文字幕无码 | 人人妻人人澡人人爽欧美一区九九 | 秋霞特色aa大片 | 99国产精品白浆在线观看免费 | av无码久久久久不卡免费网站 | 网友自拍区视频精品 | 久激情内射婷内射蜜桃人妖 | 国产农村乱对白刺激视频 | 亚洲成a人一区二区三区 | 波多野结衣av在线观看 | 55夜色66夜色国产精品视频 | 国产农村乱对白刺激视频 | 亚洲一区二区三区播放 | 美女毛片一区二区三区四区 | 三级4级全黄60分钟 | 乱中年女人伦av三区 | 激情内射日本一区二区三区 | 中文字幕人妻无码一区二区三区 | 婷婷五月综合缴情在线视频 | 性色av无码免费一区二区三区 | 国产内射爽爽大片视频社区在线 | 国内精品久久久久久中文字幕 | 国产精品免费大片 | 国产情侣作爱视频免费观看 | 精品久久8x国产免费观看 | 夜精品a片一区二区三区无码白浆 | 日韩精品a片一区二区三区妖精 | 初尝人妻少妇中文字幕 | 一区二区三区高清视频一 | 一本无码人妻在中文字幕免费 | 国产一区二区三区日韩精品 | 成熟人妻av无码专区 | 人人超人人超碰超国产 | 亚洲国产欧美日韩精品一区二区三区 | 18黄暴禁片在线观看 | 亚洲国产精品无码一区二区三区 | 精品久久综合1区2区3区激情 | 亚洲の无码国产の无码步美 | 成人影院yy111111在线观看 | 日韩欧美中文字幕在线三区 | 久久久久久国产精品无码下载 | 老熟女乱子伦 | 久久综合给合久久狠狠狠97色 | 久久久久久a亚洲欧洲av冫 | 国产 浪潮av性色四虎 | 色婷婷综合激情综在线播放 | 熟妇人妻无码xxx视频 | 久久zyz资源站无码中文动漫 | 国内精品久久毛片一区二区 | 老熟女乱子伦 | 欧美老人巨大xxxx做受 | 日韩精品a片一区二区三区妖精 | 亚洲综合久久一区二区 | 男女超爽视频免费播放 | 国产精品怡红院永久免费 | 老头边吃奶边弄进去呻吟 | 天堂一区人妻无码 | 粉嫩少妇内射浓精videos | 欧美日韩一区二区三区自拍 | 影音先锋中文字幕无码 | 国产精品人人爽人人做我的可爱 | 亚洲国产成人av在线观看 | 精品午夜福利在线观看 | 人妻与老人中文字幕 | 成熟人妻av无码专区 | 国产免费久久精品国产传媒 | 精品一区二区三区无码免费视频 | yw尤物av无码国产在线观看 | 精品日本一区二区三区在线观看 | 亚洲aⅴ无码成人网站国产app | 久久99久久99精品中文字幕 | 成人免费视频一区二区 | 精品国精品国产自在久国产87 | 亚洲色无码一区二区三区 | 97资源共享在线视频 | 亚洲欧美精品伊人久久 | 蜜桃臀无码内射一区二区三区 | 久久五月精品中文字幕 | 成人精品天堂一区二区三区 | 疯狂三人交性欧美 | 性开放的女人aaa片 | 亚洲色偷偷偷综合网 | 熟女少妇人妻中文字幕 | 成人一在线视频日韩国产 | 久久久无码中文字幕久... | 97资源共享在线视频 | 欧美人与善在线com | 乱码av麻豆丝袜熟女系列 | 国产成人综合在线女婷五月99播放 | 强伦人妻一区二区三区视频18 | 国产成人无码区免费内射一片色欲 | 两性色午夜视频免费播放 | аⅴ资源天堂资源库在线 | 男女爱爱好爽视频免费看 | 国产精品久久久久久亚洲毛片 | 国产精品人妻一区二区三区四 | 性开放的女人aaa片 | 久激情内射婷内射蜜桃人妖 | 久久精品国产日本波多野结衣 | 亚洲人成无码网www | 无码精品人妻一区二区三区av | 99国产欧美久久久精品 | 国产人妻久久精品二区三区老狼 | 国产在线aaa片一区二区99 | 亚洲a无码综合a国产av中文 | 激情五月综合色婷婷一区二区 | 精品欧洲av无码一区二区三区 | 亚洲а∨天堂久久精品2021 | 图片小说视频一区二区 | 男女超爽视频免费播放 | 国产明星裸体无码xxxx视频 | 欧美 亚洲 国产 另类 | 纯爱无遮挡h肉动漫在线播放 | 精品人妻人人做人人爽夜夜爽 | 中文字幕色婷婷在线视频 | 97无码免费人妻超级碰碰夜夜 | 国产精品高潮呻吟av久久4虎 | 亚洲小说图区综合在线 | 人人妻人人澡人人爽欧美一区 | 成熟妇人a片免费看网站 | 久久精品国产一区二区三区 | 伊人色综合久久天天小片 | 双乳奶水饱满少妇呻吟 | 永久免费观看国产裸体美女 | 久激情内射婷内射蜜桃人妖 | 中文字幕日韩精品一区二区三区 | 蜜桃臀无码内射一区二区三区 | 免费乱码人妻系列无码专区 | 日韩欧美中文字幕在线三区 | 国产suv精品一区二区五 | www国产精品内射老师 | 超碰97人人射妻 | 76少妇精品导航 | 国产精品香蕉在线观看 | 国产区女主播在线观看 | 久久久精品456亚洲影院 | 狠狠色丁香久久婷婷综合五月 | 欧美国产亚洲日韩在线二区 | 国产精品美女久久久 | 亚洲成av人综合在线观看 | 在线观看国产午夜福利片 | 精品人妻人人做人人爽夜夜爽 | 精品偷自拍另类在线观看 | 国产午夜亚洲精品不卡下载 | 亚洲娇小与黑人巨大交 | 国产精品亚洲а∨无码播放麻豆 | 大肉大捧一进一出视频出来呀 | 中文字幕无码热在线视频 | av无码电影一区二区三区 | 色婷婷综合激情综在线播放 | 乱中年女人伦av三区 | 精品无码国产一区二区三区av | 亚洲国产一区二区三区在线观看 | 国产99久久精品一区二区 | 又大又硬又黄的免费视频 | 国产特级毛片aaaaaa高潮流水 | 国产极品美女高潮无套在线观看 | 国产亚洲人成a在线v网站 | 久久精品国产精品国产精品污 | 国产免费久久久久久无码 | 性欧美疯狂xxxxbbbb | 无码人妻少妇伦在线电影 | 免费人成在线观看网站 | 女人被男人躁得好爽免费视频 | 亚洲熟女一区二区三区 | 麻豆国产97在线 | 欧洲 | 97无码免费人妻超级碰碰夜夜 | 性做久久久久久久久 | 亚洲自偷自拍另类第1页 | 无码国产激情在线观看 | 国产亚洲视频中文字幕97精品 | 亚洲国产精品一区二区第一页 | 一本久久伊人热热精品中文字幕 | 丰满少妇人妻久久久久久 | 四虎永久在线精品免费网址 | 久久久久久久久888 | 少妇的肉体aa片免费 | 国产成人无码av在线影院 | 亚洲中文字幕无码中文字在线 | 人人爽人人爽人人片av亚洲 | 久久精品人妻少妇一区二区三区 | 女人和拘做爰正片视频 | 亚洲日韩av片在线观看 | 久久人人爽人人人人片 | 国产精品第一区揄拍无码 | 欧美35页视频在线观看 | 无码av岛国片在线播放 | 国产口爆吞精在线视频 | 欧洲vodafone精品性 | 免费人成在线观看网站 | 免费中文字幕日韩欧美 | 九月婷婷人人澡人人添人人爽 | 国产乱人伦av在线无码 | 亚洲欧美国产精品久久 | 国产精品美女久久久 | 强开小婷嫩苞又嫩又紧视频 | 国产精品美女久久久网av | 亚洲熟女一区二区三区 | 国产成人无码av在线影院 | 日本精品高清一区二区 | 俺去俺来也在线www色官网 | 又色又爽又黄的美女裸体网站 | 亚洲欧美精品伊人久久 | 欧美人妻一区二区三区 | 麻豆md0077饥渴少妇 | 日韩精品一区二区av在线 | 欧美野外疯狂做受xxxx高潮 | 人妻尝试又大又粗久久 | 亚洲熟悉妇女xxx妇女av | av无码久久久久不卡免费网站 | 成人免费无码大片a毛片 | 久久人人爽人人爽人人片ⅴ | 在线a亚洲视频播放在线观看 | 欧美freesex黑人又粗又大 | 国产成人精品视频ⅴa片软件竹菊 | 欧美精品在线观看 | 亚洲熟悉妇女xxx妇女av | 国产激情无码一区二区app | 97无码免费人妻超级碰碰夜夜 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产猛烈高潮尖叫视频免费 | 中文字幕人妻无码一区二区三区 | 亚洲热妇无码av在线播放 | 白嫩日本少妇做爰 | 婷婷丁香五月天综合东京热 | 中文字幕av无码一区二区三区电影 | 久久综合激激的五月天 | 97无码免费人妻超级碰碰夜夜 | 男女猛烈xx00免费视频试看 | 欧洲vodafone精品性 | 无遮挡啪啪摇乳动态图 | 亚洲精品综合五月久久小说 | 免费乱码人妻系列无码专区 | 久久久无码中文字幕久... | 国产精品亚洲а∨无码播放麻豆 | 亚洲 高清 成人 动漫 | 天天摸天天碰天天添 | 亚洲成av人影院在线观看 | 婷婷丁香六月激情综合啪 | 最近的中文字幕在线看视频 | 久久国产精品萌白酱免费 | 奇米影视7777久久精品 | 久久精品视频在线看15 | 久久精品中文闷骚内射 | 亚洲经典千人经典日产 | av小次郎收藏 | 久久精品一区二区三区四区 | 久久无码中文字幕免费影院蜜桃 | 国产精品资源一区二区 | 内射爽无广熟女亚洲 | 久久久久久亚洲精品a片成人 | 天堂亚洲免费视频 | 国产av无码专区亚洲a∨毛片 | 精品无码一区二区三区爱欲 | www国产亚洲精品久久久日本 | 日本高清一区免费中文视频 | 午夜免费福利小电影 | 国产三级精品三级男人的天堂 | 国产在线精品一区二区高清不卡 | 黑森林福利视频导航 | 又湿又紧又大又爽a视频国产 | 国产香蕉尹人视频在线 | 玩弄人妻少妇500系列视频 | √8天堂资源地址中文在线 | 色狠狠av一区二区三区 | 无码精品国产va在线观看dvd | 国产日产欧产精品精品app | 午夜精品久久久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 精品久久久无码人妻字幂 | 亚洲 a v无 码免 费 成 人 a v | 国产欧美精品一区二区三区 | 伊人久久婷婷五月综合97色 | 夜精品a片一区二区三区无码白浆 | 我要看www免费看插插视频 | 99精品久久毛片a片 | 国产综合在线观看 | 亚洲男人av天堂午夜在 | 亚洲午夜福利在线观看 | 青春草在线视频免费观看 | 少妇被粗大的猛进出69影院 | 国产精品丝袜黑色高跟鞋 | 日本va欧美va欧美va精品 | 久久精品人人做人人综合试看 | 人人妻人人澡人人爽人人精品 | 最新国产麻豆aⅴ精品无码 | 国产午夜无码视频在线观看 | 国产人妻人伦精品 | 亚洲第一网站男人都懂 | 无遮挡国产高潮视频免费观看 | 午夜精品久久久久久久 | 少妇人妻大乳在线视频 | 中文字幕av无码一区二区三区电影 | 伊人久久大香线焦av综合影院 | 性欧美大战久久久久久久 | 久久久久亚洲精品男人的天堂 | 精品人妻人人做人人爽夜夜爽 | 久久久久亚洲精品男人的天堂 | 少妇久久久久久人妻无码 | 国产激情无码一区二区app | 久久亚洲精品成人无码 | 丰满人妻被黑人猛烈进入 | 国产精品香蕉在线观看 | 国产超级va在线观看视频 | 久久精品无码一区二区三区 | 又大又紧又粉嫩18p少妇 | 美女毛片一区二区三区四区 | 亚洲高清偷拍一区二区三区 | 国产精品久久久久影院嫩草 | 国产极品视觉盛宴 | 巨爆乳无码视频在线观看 | 久久久精品456亚洲影院 | 无码人妻出轨黑人中文字幕 | 国产精品无码久久av | 国产激情无码一区二区 | 少妇人妻大乳在线视频 | 妺妺窝人体色www在线小说 | 久久久久久a亚洲欧洲av冫 | 中文字幕中文有码在线 | 国产真人无遮挡作爱免费视频 | 欧美高清在线精品一区 | 亚洲a无码综合a国产av中文 | 亚洲欧洲日本综合aⅴ在线 | 麻花豆传媒剧国产免费mv在线 | 成人毛片一区二区 | 国产美女极度色诱视频www | 亚洲色大成网站www国产 | 人人爽人人澡人人高潮 | 日本精品久久久久中文字幕 | 国产乱人伦偷精品视频 | 中文字幕乱码人妻无码久久 | 鲁大师影院在线观看 | 国产精品99爱免费视频 | 日韩欧美成人免费观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产明星裸体无码xxxx视频 | 自拍偷自拍亚洲精品10p | 亚洲乱码日产精品bd | 99精品国产综合久久久久五月天 | 亚洲精品www久久久 | 国产亚洲精品精品国产亚洲综合 | 国产精品久久福利网站 | 成人女人看片免费视频放人 | 成人无码精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | www国产亚洲精品久久久日本 | 国产精品高潮呻吟av久久4虎 | 日韩av激情在线观看 | 国产网红无码精品视频 | 强伦人妻一区二区三区视频18 | 国产精品毛多多水多 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文字幕 亚洲精品 第1页 | 97久久超碰中文字幕 | 午夜男女很黄的视频 | 丰满诱人的人妻3 | 精品欧洲av无码一区二区三区 | 宝宝好涨水快流出来免费视频 | 欧洲极品少妇 | 青草视频在线播放 | 三上悠亚人妻中文字幕在线 | 精品偷自拍另类在线观看 | 色五月五月丁香亚洲综合网 | 麻豆成人精品国产免费 | 日本护士毛茸茸高潮 | 亚洲小说图区综合在线 | 亚洲综合伊人久久大杳蕉 | 麻豆成人精品国产免费 | 日本精品人妻无码77777 天堂一区人妻无码 | 婷婷丁香五月天综合东京热 | 国产明星裸体无码xxxx视频 | 99久久精品午夜一区二区 | 性生交片免费无码看人 | 最新版天堂资源中文官网 | 国产99久久精品一区二区 | 国产亚洲精品久久久ai换 | 少妇的肉体aa片免费 | 国产精品资源一区二区 | 人妻aⅴ无码一区二区三区 | 水蜜桃av无码 | 特黄特色大片免费播放器图片 | 水蜜桃亚洲一二三四在线 | 日韩精品无码一本二本三本色 | 亚洲中文字幕在线观看 | 99国产精品白浆在线观看免费 | 午夜福利电影 | 亚洲精品中文字幕久久久久 | 99久久婷婷国产综合精品青草免费 | 人人澡人人透人人爽 | 夜夜高潮次次欢爽av女 | 99精品无人区乱码1区2区3区 | 午夜无码区在线观看 | 日韩人妻无码一区二区三区久久99 | 国产精品久久久久久久影院 | 麻花豆传媒剧国产免费mv在线 | 中国女人内谢69xxxxxa片 | 久久久久久久人妻无码中文字幕爆 | 内射爽无广熟女亚洲 | 日本一区二区三区免费高清 | 少妇性荡欲午夜性开放视频剧场 | 久激情内射婷内射蜜桃人妖 | 久久精品国产精品国产精品污 | 熟女少妇人妻中文字幕 | 中文字幕人妻无码一区二区三区 | 一本久久伊人热热精品中文字幕 | 一本久久伊人热热精品中文字幕 | 日韩精品无码免费一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 狠狠躁日日躁夜夜躁2020 | 老熟女乱子伦 | 99视频精品全部免费免费观看 | 国产又爽又猛又粗的视频a片 | 亚洲国产精华液网站w | 高潮毛片无遮挡高清免费 | 免费人成在线视频无码 | 2020久久超碰国产精品最新 | 国产亚洲精品久久久ai换 | 免费人成网站视频在线观看 | 波多野结衣 黑人 | 2019nv天堂香蕉在线观看 | 亚洲狠狠色丁香婷婷综合 | 精品国产av色一区二区深夜久久 | 中文精品久久久久人妻不卡 | 美女扒开屁股让男人桶 | 国产精品va在线播放 | 99riav国产精品视频 | 亚洲精品午夜国产va久久成人 | 熟妇人妻无码xxx视频 | 狠狠cao日日穞夜夜穞av | 一个人免费观看的www视频 | 少妇人妻偷人精品无码视频 | 国产精品欧美成人 | 中文字幕av无码一区二区三区电影 | 少妇无码一区二区二三区 | 亚洲成a人一区二区三区 | 亚洲成色www久久网站 | 中文字幕亚洲情99在线 | 无码福利日韩神码福利片 | 国产成人精品三级麻豆 | 精品欧洲av无码一区二区三区 | 亚洲日韩精品欧美一区二区 | 亚洲人成网站在线播放942 | 亚洲综合无码一区二区三区 | 国产无av码在线观看 | 丝袜足控一区二区三区 | 国产午夜无码精品免费看 | 丰满人妻一区二区三区免费视频 | 国产成人一区二区三区在线观看 | 大乳丰满人妻中文字幕日本 | 精品国产一区二区三区av 性色 | 激情国产av做激情国产爱 | 蜜桃av抽搐高潮一区二区 | 日韩精品a片一区二区三区妖精 | 国产真人无遮挡作爱免费视频 | 丰腴饱满的极品熟妇 | 小泽玛莉亚一区二区视频在线 | 亚洲精品鲁一鲁一区二区三区 | 玩弄人妻少妇500系列视频 | 在线播放免费人成毛片乱码 | 黑森林福利视频导航 | 美女扒开屁股让男人桶 | 樱花草在线播放免费中文 | 红桃av一区二区三区在线无码av | 国产精品高潮呻吟av久久 | 欧美精品一区二区精品久久 | 欧美激情一区二区三区成人 | 国产凸凹视频一区二区 | 国产在线精品一区二区三区直播 | 中文字幕av无码一区二区三区电影 | 国产乱码精品一品二品 | 国产亚洲精品久久久久久大师 | 在线 国产 欧美 亚洲 天堂 | 男女性色大片免费网站 | 久久精品99久久香蕉国产色戒 | 乱码av麻豆丝袜熟女系列 | 18精品久久久无码午夜福利 | 国产精品免费大片 | 色婷婷久久一区二区三区麻豆 | 人人妻人人澡人人爽欧美一区 | 亚洲日本va中文字幕 | 色综合久久88色综合天天 | 亚洲娇小与黑人巨大交 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品成a人在线观看 | 亚洲欧美日韩国产精品一区二区 | 久久亚洲精品成人无码 | 国产三级精品三级男人的天堂 | 国产人妻人伦精品1国产丝袜 | 一本色道久久综合亚洲精品不卡 | 久久久中文字幕日本无吗 | 精品国产一区二区三区四区在线看 | 大肉大捧一进一出好爽视频 | 日日麻批免费40分钟无码 | 色妞www精品免费视频 | 少妇高潮喷潮久久久影院 | 暴力强奷在线播放无码 | 精品无人区无码乱码毛片国产 | 国产精品亚洲综合色区韩国 | 欧美亚洲日韩国产人成在线播放 | 久久久久免费精品国产 | 成人一区二区免费视频 | 成 人影片 免费观看 | 水蜜桃av无码 | 精品 日韩 国产 欧美 视频 | 亚洲精品一区二区三区在线观看 | 欧美 日韩 人妻 高清 中文 | 日韩欧美群交p片內射中文 | 无套内射视频囯产 | 亚洲色欲色欲欲www在线 | 国产性生交xxxxx无码 | 在线看片无码永久免费视频 | 宝宝好涨水快流出来免费视频 | 国产精品无码mv在线观看 | 蜜桃视频插满18在线观看 | 久久 国产 尿 小便 嘘嘘 | 99久久精品午夜一区二区 | 一本大道久久东京热无码av | 久久国产36精品色熟妇 | 久久人人爽人人爽人人片av高清 | 狠狠色噜噜狠狠狠7777奇米 | 伊人久久大香线蕉午夜 | 88国产精品欧美一区二区三区 | 99久久人妻精品免费一区 | 日韩精品成人一区二区三区 | 国产精品18久久久久久麻辣 | www国产精品内射老师 | 国产一区二区不卡老阿姨 | 日日噜噜噜噜夜夜爽亚洲精品 | 人妻少妇被猛烈进入中文字幕 | 久久国产精品_国产精品 | 亚洲无人区午夜福利码高清完整版 | 午夜免费福利小电影 | 午夜不卡av免费 一本久久a久久精品vr综合 | 一区二区三区高清视频一 | 亚洲a无码综合a国产av中文 | 亚洲 高清 成人 动漫 | 亚洲国产精品毛片av不卡在线 | 国产在热线精品视频 | 日韩精品成人一区二区三区 | 国产精品亚洲一区二区三区喷水 | 精品国产乱码久久久久乱码 | 日韩精品乱码av一区二区 | 国产9 9在线 | 中文 | 国产成人综合美国十次 | 熟妇人妻无乱码中文字幕 | 成人无码精品一区二区三区 | 波多野结衣一区二区三区av免费 | 丰满少妇人妻久久久久久 | 国产特级毛片aaaaaaa高清 | 成人影院yy111111在线观看 | 日产国产精品亚洲系列 | 国产特级毛片aaaaaa高潮流水 | а√资源新版在线天堂 | 51国偷自产一区二区三区 |