VC++案例教程:第4章 對話框與控件_第1頁
VC++案例教程:第4章 對話框與控件_第2頁
VC++案例教程:第4章 對話框與控件_第3頁
VC++案例教程:第4章 對話框與控件_第4頁
VC++案例教程:第4章 對話框與控件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4 章對話框與控件 河北經貿大學信息技術學院2008年12月VC+案例教程VC+案例教程 北大出版社教學目標掌握常用控件的使用方法;掌握模式對話框與非模式對話框的創(chuàng)建與使用;了解通用對話框的使用方法;熟練掌握基于模式對話框的應用程序的編程方法和步驟。VC+案例教程 北大出版社案例介紹 在運行一個Windows應用程序時,通常首先出現一個歡迎Flash界面,其中描述了應用系統(tǒng)的名稱,應用程序的版本信息,開發(fā)日期等信息,還有一幅非常漂亮的背景圖或公司的標志圖等。接下來,彈出一個用戶登錄界面,當輸入正確的用戶名和密碼后,才能登陸應用程序的主界面,進行信息的管理操作。VC+案例教程 北大出版社項目演

2、示VC+案例教程 北大出版社本章主要內容對話框概述靜態(tài)控件編輯框CEdit按鈕類控件列表類控件滾動類控件閱讀材料VC+案例教程 北大出版社4.1 對話框概述對話框 控件的創(chuàng)建與使用 訪問控件 VC+案例教程 北大出版社對話框 從用戶角度看,對話框是一種用戶界面。我們可以用它來:為用戶顯示信息和消息;作為接受某個指定操作的用戶輸入的一種手段。從程序員的角度看,對話框和控件都是一個窗口,對話框是Windows程序中所使用的最復雜的用戶界面對象,是一個窗口的集合。 VC+案例教程 北大出版社1. 對話框消息的發(fā)送WM_INITDIALOG消息告訴你此時應初始化一個對話框。即所有控件被創(chuàng)建并準備好。W

3、M_COMMAND消息是由控件發(fā)送的,用來通知對話框一些感興趣或有用的事件。當一個控件發(fā)送這個消息時,它在消息上簽上它的名字和一個通知碼。2. MFC對對話框的支持CDialog 3. 公共對話框CFileDialogCColorDialogCFontDialogCPrintDialogCFindReplaceDialogCPageSetupDialogVC+案例教程 北大出版社4. 對話框控件CButton CBitmapButtonCComboBox CEdit CListBoxCScrollBar CStatic用于對話框控件的 CWnd成員函數 EnableWindow()GetWin

4、dowText()GetWindowTextLength()MoveWindow()SetFont()ShowWindow()SetWindowPos()SetWindowText()VC+案例教程 北大出版社5. 模式和無模式對話框模式對話框:模式對話框以排它方式操作,對話框被彈出后,用戶必須在對話框中作出相應的操作,在退出對話框之前,對話框所在的應用程序不能繼續(xù)執(zhí)行CMyDlg dlg1; /定義一個對話框類CmyDlg對象dlg1dlg1.DoModal(); /調用對話框類的DoModal()來顯示模式對話框無模式對話框 :無模式對話框以非排它方式操作。對話框被彈出后,一直保留在屏幕上

5、,用戶可繼續(xù)在對話框所在的應用程序中進行其他操作;當需要使用對話框時,只需像激活一般窗口一樣單擊對話框所在的區(qū)域即可激活。 CMyDlg *p_MyDlg; /聲明對話框類指針p_MyDlg =new CMyDlg; / 動態(tài)創(chuàng)建p_MyDlg-Create(IDD_DIALOG1,this); /對話框資源ID為IDD_DIALOG1p_MyDlg- ShowWindow(SW_SHOW ); /顯示非模態(tài)對話框delete p_MyDlg; /釋放空間VC+案例教程 北大出版社控件的創(chuàng)建與使用 在對話框中創(chuàng)建和使用控件的步驟如下:用對話框編輯器將控件添加在對話框模板中;利用類向導為對話框類

6、增加與控件相關聯的數據成員;利用類向導為對話框類增加與控件相關聯的消息處理函數;在對話框類的OnInitDialog函數體中,為控件設置一些初始條件;在對話框類的控件消息處理函數中,添加控件處理代碼。VC+案例教程 北大出版社設置/獲取控件標題(顯示文本) 第一種,通過控件變量調用CWnd類的成員函數SetWindowText()。m_MyBtn.SetWindowText(歡迎);m_MyBtn.GetWindowText(m_Name);/獲取控件的文本,賦值給m_name其中,m_MyBtn為控件類的成員變量,m_Name為CString類型。第二種,通過控件指針調用CWnd類的成員函數

7、SetWindowText()。 GetDlgItem(IDC_BUTTON1)- SetWindowText(歡迎);GetDlgItem(IDC_BUTTON1)- GetWindowText(m_Name);第三種,利用控件屬性對話框,將其Caption(標題)改為“歡迎”。VC+案例教程 北大出版社控件的通用屬性 VC+案例教程 北大出版社控件的消息 typedef struct tagMSG HWND hwnd; /接收到消息的窗口句柄 UINT message; ./消息 WPARAM wParam; / 消息的附加信息,其含義取決于message LPARAM lParam; /

8、消息的附加信息,其含義取決于message DWORD time; /消息發(fā)送時的時間POINT pt; /消息發(fā)送時,光標的屏幕坐標MSG;VC+案例教程 北大出版社訪問控件 一是用DDX(對話數據交換)技術使用CWnd:UpdateData()函數可實現控件與其成員變量(值變量)之間的數據的傳輸。其中: UpdateData(TRUE)將控件中的數據傳送給成員變量; UpdateData(FALSE)將成員變量的數據傳遞給控件并顯示。例如,要在編輯框ID_NAME中顯示“張”,則可以用下面兩種方法實現:關聯值變量,為編輯框ID_NAME關聯CString變量m_Name,然后執(zhí)行下面的語句

9、: m_Name=” 張”; UpdateData(false);關聯控件變量,為編輯框ID_NAME關聯控件類CEdit變量m_EditName,然后執(zhí)行下面的語句:m_EditName.SetWindowText(“張”);VC+案例教程 北大出版社不用成員變量訪問控件 CEdit* pEditName =(CEdit*) GetDlgItem(ID_NAME); / 定義一個指向編輯框ID_NAME的指針ASSERT(pEditName -IsKindOf(RUNTIME_CLASS(CEdit); /確認語句 pEditName-SetWindowText(“張”); /設置編輯框的文

10、本為“張”如果從其父窗口之外調用,則需要一個指向父窗口對象的指針。設pDlg是一個CDialog*類型的父窗口指針,正確程序應為: CEdit* pEditName =(CEdit*) pDlg-GetDlgItem(ID_NAME);除此之外,要設置/獲取控件的文本,還可以使用下面兩個函數實現:SetDlgItemText(ID_NAME, m_Name); /為控件ID_NAME設置文本為m_Name的值GetDlgItemText(ID_NAME, m_Name); /獲取控件文本賦值給m_NameVC+案例教程 北大出版社4.2 靜態(tài)控件靜態(tài)文本、分組框和靜態(tài)圖片三種。VC+案例教程

11、北大出版社案例4.1 歡迎Flash界面的設計 首先我們用PHTOSHOP準備一幅BMP圖片Flash.bmp,該圖片中有系統(tǒng)名稱、公司名稱、版本號等信息。然后創(chuàng)建項目。步驟如下:1. 用MFC AppWizard(.exe)創(chuàng)建一個名為BaseInfo的對話框應用程序;2. 選擇菜單Insert| Resource| Bitmap,單擊Import.,選擇Flash.bmp,為項目添加一個位圖資源IDB_BITMAP1,修改其ID屬性為IDB_FLASH;3. 選擇菜單Insert| Resource| Dialog,添加一個對話框資源IDD_DIALOG1,設置其屬性,將其ID改為IDD_

12、FLASH, Border屬性設置為Thin;4. 向對話框IDD_FLASH中添加一個Picture控件IDC_STATIC,將其Type屬性設置為Bitmap,Image屬性設置為IDB_FLASH。測試。注意:若對話框中添加了其他控件時,必須設置Picture控件的TabOrder為1,才能保證圖片位于最底層。5. 選擇菜單View|ClassWizerd,為對話框資源IDD_FLASH創(chuàng)建一個新對話框類CFlashDlg,其類CDialog。之后,打開MFC ClassWizard對話框的Message Maps 頁面,為CFlashDlg類映射消息WM_INITDIALOG的處理函數

13、OnInitDialog(),為CFlashDlg類映射消息WM_TIMER的處理函數OnTimer()。 6. 在工作區(qū)選擇類CFlashDlg,右鍵,選擇菜單Add Member Variable,彈出增加成員變量對話框,為該類增加一個Private成員變量int m_nDx,如圖4.6 所示。同樣的方法再增加3個成員變量:int m_nDy; int m_nHeight; int m_nWidth。圖4.6 為類CflashDlg添加成員變量7. 編寫函數,以動畫方式顯示Flash界面。代碼如下 VC+案例教程 北大出版社BOOL CFlashDlg:OnInitDialog() CDi

14、alog:OnInitDialog();/ TODO: Add extra initialization hereCRect dlgRect;GetWindowRect(dlgRect);CRect desktopRect;/將窗口開始大小設為0GetDesktopWindow()-GetWindowRect(desktopRect);MoveWindow(desktopRect.Width() - dlgRect.Width() / 2, (desktopRect.Height() - dlgRect.Height() / 2, 0, 0 ); /將對話框移動到桌面中心線/初始化變化大小m_

15、nWidth=dlgRect.Width();m_nHeight=dlgRect.Height();m_nDx=2;m_nDy=4;SetTimer(1,10,NULL); /打開定時器1return TRUE; / return TRUE unless you set the focus to a controlVC+案例教程 北大出版社void CFlashDlg:OnTimer(UINT nIDEvent) /定時器打開時,觸發(fā)該消息函數/ TODO: Add your message handler code here and/or call defaultCRect dlgRect;

16、GetWindowRect(dlgRect);/獲得此時窗口的實際大小CRect desktopRect;GetDesktopWindow()-GetWindowRect(desktopRect); /獲得桌面的大小/如果是窗口彈出過程,則逐漸增大窗口if(nIDEvent = 1) /如果觸發(fā)的是第1個定時器MoveWindow( (-m_nDx+desktopRect.Width() - dlgRect.Width() / 2, (-m_nDy+desktopRect.Height() - dlgRect.Height() / 2, +m_nDx+dlgRect.Width(), +m_n

17、Dy+dlgRect.Height() ); /逐漸移動窗口/不要超過窗口預設的寬度與預設的高度if(dlgRect.Width() =m_nWidth) m_nDx=0; if(dlgRect.Height() =m_nHeight)m_nDy=0;if(dlgRect.Width() =m_nWidth) & (dlgRect.Height() =m_nHeight) KillTimer(1); Sleep(1000); /關閉定時器1,靜止1秒,停止變化 CDialog:OnOK(); /關閉對話框CDialog:OnTimer(nIDEvent);VC+案例教程 北大出版社8. 在應用

18、程序類的初始化例程中,在主界面顯示之前,顯示歡迎界面,代碼如下:BOOL CBaseInfoApp:InitInstance()CFlashDlg FDlg;FDlg.DoModal();CBaseInfoDlg dlg;m_pMainWnd = &dlg;9.在BaseInfoApp.cpp的文件首,添加文件包含命令:#include “FlashDlg.h”。編譯運行。觀看動畫效果。 VC+案例教程 北大出版社4.3 編輯框CEdit編輯控件是一個讓用戶從鍵盤輸入和編輯文本的矩形窗口,用戶可通過它很方便地輸入各種文本、數字或者口令,也可使用它來編輯和修改簡單的文本文件內容,并輸出文本。 V

19、C+案例教程 北大出版社基本操作 1. 口令設置2. 選擇文本3. 輸入、輸出文本4. 獲得/失去輸入焦點VC+案例教程 北大出版社編輯控件的通知消息 EN_CHANGEEN_HSCROLLEN_KILLFOCUSEN_MAXTEXTEN_SETFOCUSEN_UPDATEEN_VSCROLLVC+案例教程 北大出版社4.4 按鈕類控件主要有3種按鈕:下壓式按鈕(Pushbuttons)、單選按鈕(Radiobuttons)、復選框按鈕(Checkboxes)。 按鈕控件類CButton是CWnd類的派生類,它同時具有CWnd類的一切功能。常用的CButton類的方法有:SetWindowTe

20、xt(字符串):設置文本ShowWindow(SW_SHOW/ SW_HIDE):顯示/隱藏按鈕EnableWindow(true/f alse):使按鈕可用/不可用一組單選按鈕的關連變量只有一個,值變量為int,其值為0,1,2,3。復選按鈕的關連值變量為bool,其值為true或false. VC+案例教程 北大出版社按鈕類的消息 常見的只有兩個:BN_CLICKED(單擊按鈕)、 BN_DOUBLECLICKED(雙擊按鈕)。 VC+案例教程 北大出版社案例4.2 登錄界面的設計 本例將用到圖片框、靜態(tài)文本、編輯框以及按鈕等控件,運行結果如圖4.8 所示。當用戶在編輯框中輸入正確的用戶名

21、和密碼后,單擊OK按鈕,可以進入主界面,否則,給出警告提示后,退出程序。 VC+案例教程 北大出版社具體步驟 1. 打開BaseInfo項目,選擇菜單Insert| Resource| Dialog,添加一個對話框資源IDD_DIALOG1,設置其屬性,將其ID改為IDD_LOGIN,標題設置為“用戶登錄”,將缺省的OK按鈕的標題改為“確定”,CANCEL按鈕的標題改為“取消”。 2. 將準備好的ICON圖片資源Key.ico插入到項目中,ID改為IDI_KEY_ICON。3. 利用對話框資源編輯器,依照圖4.8 進行登錄界面設計。各控件屬性見表4-8 。4. 為對話框類增加成員變量。 CSt

22、ring m_Name;CString m_Password ;VC+案例教程 北大出版社5. 在應用程序類的初始化例程中,在歡迎界面顯示后,主界面顯示之前加入如下代碼:BOOL CBaseInfoApp:InitInstance()CFlashDlg FDlg;FDlg.DoModal();CLoginDlg LoginDlg; if(LoginDlg.DoModal() != IDOK) return false; /用戶按下的不是“確認”按鈕if(LoginDlg.m_Password != 123456 | LoginDlg.m_Name!=zhang) AfxMessageBox(口

23、令錯誤,確認后將退出程序,MB_ICONSTOP|MB_OK ); return false;CBaseInfoDlg dlg;m_pMainWnd = &dlg;6. 在BaseInfoApp.cpp的開始處,添加文件包含命令:#include “LoginDlg.h”。編譯運行并測試。VC+案例教程 北大出版社4.5 列表類控件列表框 組合框 (CComboBox) 列表視圖(CListCtrl) VC+案例教程 北大出版社列表框 列表框控件提供一個項目列表,用戶可以從中選擇一個或多個項目。 VC+案例教程 北大出版社列表框(CListBox)的基本操作 添加列表項 刪除列表項 查找列表項

24、 列表框的單項選擇 獲取列表項字符串VC+案例教程 北大出版社列表框的通知消息 LBN_DBLCLKLBN_KILLFOCUSLBN_SELCHANGELBN_SELCANCELLBN_SETFOCUSVC+案例教程 北大出版社 組合框 (CComboBox) 組合框控件與列表框控件類似,向用戶提供可選擇項目的列表。但列表框通常用在希望將輸入限制在列表之內的情況。而組合框則是用于建議性的選項列表。組合框控件將編輯框和列表框的功能結合在一起了,如果需要的選項不在列表中,則可另外輸入。 VC+案例教程 北大出版社組合框常見的操作 int AddString( LPCTSTR lpszString)

25、;int DeleteString(UINT nIndex);int InsertString(int nIndex, LPCTSTR lpszString);void ResetContent();int FindString(int nStartAfter, LPCTSTR lpszString) const;int FindStringExact(int nIndexStart, LPCTSTR lpszString) const;Int SelectString(int nStartAfter, LPCTSTR lpszString);int GetCurSel() const;int

26、 SetCurSel(int nSelect);int GetCount() const;int GetLBText(int nIndex,LPTSTR lpszText) const;void GetLBText(int nIndex, Cstring &rString ) const;int GetLBTextLen(int nIndex) const;VC+案例教程 北大出版社消息 CBN_CLOSEUPCBN_DBLCLKCBN_DROPDOWNCBN_EDITCHANGECBN_EDITUPDATECBN_SELENDCANCELCBN_SELENDOKCBN_KILLFOCUSCB

27、N_SELCHANGECBN_SETFOCUSVC+案例教程 北大出版社列表視圖(CListCtrl) CListBox控件為單選/多選列表框,只能顯示一個字段,不能顯示一條記錄的信息。而CListCtrl控件類似于資源管理器的顯示,可以顯示一條記錄。CListCtrl控件可以以4種不同的方式顯示列表內容,稱為“視圖”。圖標視圖 小圖標視圖 列表視圖 報表視圖 VC+案例教程 北大出版社屬性VC+案例教程 北大出版社列表視圖常見的操作 BOOL DeleteItem( int nItem ); /刪除指定的項BOOL DeleteAllItems( ); /刪除所有的項BOOL DeleteC

28、olumn( int nCol ); /刪除列表視圖控件中指定列int InsertItem( const LVITEM* pItem ); /插入一行int InsertItem( int nItem, LPCTSTR lpszItem ); /插入一行int InsertColumn( int nCol, const LVCOLUMN* pColumn ); /插入一列int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem

29、= -1 ); /插入一列BOOL SetTextColor( COLORREF cr ); /設置文本顏色BOOL SetTextBkColor( COLORREF cr ); /設置文本的背景色BOOL SetBkColor( COLORREF cr ); /設置列表框的背景色int GetItemText( int nItem, int nSubItem, LPTSTR lpszText, int nLen ) const;/取指定單元格的指定長度的文本賦值給lpszTextCString GetItemText( int nItem, int nSubItem ) const; /獲取

30、指定單元格的文本int GetItemCount( ); /獲取列表的項目總數(行數)VC+案例教程 北大出版社 消息 NM_CLICKNM_DBLCLKNM_RCLICKNM_RDBLCLKNM_KILLFOCUSLVN_ITEMCHANGEDLVN_COLUMNCLICKLVN_DETELEITEMLVN_SETFOCUSVC+案例教程 北大出版社案例4.3 操作主界面的設計該示例用于顯示、編輯、添加、刪除、修改每個員工的基本信息:姓名、性別、出生年月、職稱、工作單位、是否會員等, VC+案例教程 北大出版社步驟如下 1.打開BaseInfo項目,利用資源編輯器,設計布局主對話框 IDD_BASEINFO_DIALOG。 2. 為對話框類增加成員變量。 3. 為對話框類增加消息處理函數。 4. 為消息處理函數添加代碼。5. 編譯運行并測試。VC+案例教程 北大出版社4.6 滾動類控件滾動條(CScrollBar)、滑動條(CSlider)和旋轉按鈕(CSpin),滾動控件是一個獨立的窗口,可以用于數值的改變,雖然它具有直接的輸入焦點,但不能自動地滾動窗口的內容,而且,當用戶對它們進行操作時,都會向父窗口發(fā)送WM_HSCROLL或WM_VSCROLL消息。滾動條

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論