




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第十二十二講講 對(duì)話框設(shè)計(jì)和圖形繪制對(duì)話框設(shè)計(jì)和圖形繪制電子信息學(xué)院課程組武漢大學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)本講主要內(nèi)容本講主要內(nèi)容一一、使用對(duì)話框使用對(duì)話框1 1、添加對(duì)話框資源、添加對(duì)話框資源2 2、對(duì)話框?qū)傩跃庉?、?duì)話框?qū)傩跃庉? 3、創(chuàng)建對(duì)話框類、創(chuàng)建對(duì)話框類4 4、為對(duì)話框添加控件、為對(duì)話框添加控件5 5、添加與控件關(guān)聯(lián)的成員變量、添加與控件關(guān)聯(lián)的成員變量6 6、使用對(duì)話框、使用對(duì)話框7 7、基于對(duì)話框的應(yīng)用程序、基于對(duì)話框的應(yīng)用程序8 8、提示信息對(duì)話框、提示信息對(duì)話框9 9、公用對(duì)話框、公用對(duì)話框1010、標(biāo)準(zhǔn)、標(biāo)準(zhǔn)控件控件二、二、MFCMFC圖形繪制圖形繪制1 1、G
2、DIGDI和和DCDC2 2、設(shè)備環(huán)境(、設(shè)備環(huán)境(Device ContextDevice Context)3 3、GDIGDI坐標(biāo)系坐標(biāo)系4 4、設(shè)備坐標(biāo)系、設(shè)備坐標(biāo)系5 5、OnPaint OnPaint 與與OnDrawOnDraw的區(qū)別和聯(lián)系的區(qū)別和聯(lián)系6 6、設(shè)置顏色、設(shè)置顏色7 7、使用畫筆、使用畫筆 CPenCPen8 8、使用畫刷、使用畫刷 CBrushCBrush9 9、使用系統(tǒng)定義的畫筆和畫刷(堆對(duì)象)、使用系統(tǒng)定義的畫筆和畫刷(堆對(duì)象)1010、繪制基本圖形、繪制基本圖形1111、文本輸出與字體、文本輸出與字體1212、位圖、圖標(biāo)和光標(biāo)、位圖、圖標(biāo)和光標(biāo) 3一、一、使用
3、使用對(duì)話框?qū)υ捒?對(duì)話框是Windows應(yīng)用程序中一種常用的資源 主要功能是輸出信息和接收用戶的輸入數(shù)據(jù)。 對(duì)話框和控件 控件是嵌入在對(duì)話框中的一個(gè)特殊的小窗口,用于完成不同的輸入、輸出功能。 對(duì)話框依靠控件與用戶進(jìn)行信息交互 顯示提示信息:例如程序啟動(dòng)時(shí)顯示版權(quán)、顯示進(jìn)度信息 接收用戶輸入的數(shù)據(jù)l在MFC中,對(duì)話框的功能被封裝成CDialog類,CDialog類是CWnd類的派生類。 CDialog類的派生關(guān)系如下所示:CObject CCmdTarget CWnd CDialogl我們?cè)诔绦蛑袆?chuàng)建的對(duì)話框類是CDialog類的派生類 對(duì)話框可以作為一個(gè)程序的主窗口:基于對(duì)話框的應(yīng)用程序?qū)υ?/p>
4、框可以通過菜單命令或工具欄按鈕打開 對(duì)話框創(chuàng)建和使用: 首先創(chuàng)建對(duì)話框資源:指定對(duì)話框本身的屬性(如大小、位置、風(fēng)格、類型等),添加控件并設(shè)置控件屬性; 再創(chuàng)建一個(gè)基于該對(duì)話框資源的對(duì)話框類:規(guī)定對(duì)話框和對(duì)話框中每個(gè)控件的行為(編寫消息響應(yīng)函數(shù)) 包含對(duì)話框類頭文件,聲明對(duì)話框類對(duì)象并使用1、添加對(duì)話框資源 在項(xiàng)目工作區(qū)鼠標(biāo)右擊資源項(xiàng)Dialog,從彈出式菜單中選擇“Insert Dialog”命令項(xiàng)。 在對(duì)話框資源的非控件區(qū)域點(diǎn)擊右鍵在彈出的快捷菜單中選擇Properties,在彈出的信息欄中修改對(duì)話框?qū)傩?、對(duì)話框?qū)傩跃庉?、創(chuàng)建對(duì)話框類: 在對(duì)話框資源的非控件區(qū)域雙擊鼠標(biāo),或者點(diǎn)擊右鍵在
5、彈出的快捷菜單中選擇Add Class,將彈出類添加向?qū)?duì)話框 在類向?qū)е休斎腩惷c(diǎn)擊Finish按鈕完成類的添加對(duì)話框資源ID3、創(chuàng)建對(duì)話框類: 在對(duì)話框資源的非控件區(qū)域雙擊鼠標(biāo),或者點(diǎn)擊右鍵在彈出的快捷菜單中選擇Add Class,將彈出類添加向?qū)?duì)話框 通過對(duì)話框類的成員函數(shù)可對(duì)對(duì)話框進(jìn)行管理對(duì)話框的常用成員函數(shù)CDialog:CDialog() 通過調(diào)用派生類構(gòu)造函數(shù),根據(jù)對(duì)話框資源模板定義一個(gè)對(duì)話框。CDialog:DoModal() 激活模態(tài)對(duì)話框,顯示對(duì)話框窗口。CDialog:Create() 根據(jù)對(duì)話框資源模板創(chuàng)建非模態(tài)對(duì)話框窗口。如果對(duì)話框不是Visible屬性,還需通過
6、調(diào)用CWnd:ShowWindow()函數(shù)顯示非模態(tài)對(duì)話框窗口。CDialog:OnOk() 單擊OK按鈕時(shí)調(diào)用該函數(shù),接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。CDialog:OnCancel() 單擊Cancel按鈕或按Esc鍵時(shí)調(diào)用該函數(shù),不接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。CDialog:OnInitDialog() WM_INITDIALOG消息處理函數(shù),在調(diào)用DoModal或Create函數(shù)時(shí)系統(tǒng)發(fā)送WM_INITDIALOG消息,在顯示對(duì)話框前調(diào)用該函數(shù)進(jìn)行初始化。CDialog:EndDialog():用于關(guān)閉模態(tài)對(duì)話框窗口。CWnd:ShowWindow() 顯示或隱藏對(duì)話框窗口CWnd
7、:DestroyWindow() 關(guān)閉并銷毀非模態(tài)對(duì)話框CWnd:UpdateData() 通過調(diào)用DoDataExchange()設(shè)置或獲取對(duì)話框控件的數(shù)據(jù)CWnd:DoDataExchange():被UpdateData()調(diào)用以實(shí)現(xiàn)對(duì)話框數(shù)據(jù)交換,不能直接調(diào)用。CWnd:GetWindowText() 獲取對(duì)話框窗口的標(biāo)題CWnd:SetWindowText() 修改對(duì)話框窗口的標(biāo)題CWnd:GetDlgItemText() 獲取對(duì)話框中控件的文本內(nèi)容CWnd:SetDlgItemText() 設(shè)置對(duì)話框中控件的文本內(nèi)容CWnd:GetDlgItem() 獲取控件或子窗口的指針CWnd:
8、MoveWindow() 用于移動(dòng)對(duì)話框窗口CWnd:EnableWindow() 使窗口處于禁用或可用狀態(tài)4、為對(duì)話框添加控件: 通過Toolbox信息欄為對(duì)話框添加控件 在控件上右鍵點(diǎn)擊,在彈出快捷菜單中選擇Add Variable5、添加與控件關(guān)聯(lián)的成員變量注意:注意:只有為對(duì)話框資源添加了對(duì)話框類之后,才能為控件添加關(guān)聯(lián)的成員變量 在控件上右鍵點(diǎn)擊,在彈出快捷菜單中選擇Add Variable5、添加與控件關(guān)聯(lián)的成員變量成員變量種類成員變量數(shù)據(jù)類型和名稱 成員變量種類Control:關(guān)聯(lián)的成員變量是一個(gè)MFC控件類對(duì)象,可以通過該對(duì)象訪問控件類的成員變量和調(diào)用控件類的成員函數(shù),實(shí)現(xiàn)對(duì)控
9、件行為的控制和管理;Value:為該控件的某項(xiàng)屬性關(guān)聯(lián)一個(gè)成員變量,這意味著程序關(guān)心的是控件中的值,而不是控件本身。這時(shí),需要指定成員變量數(shù)據(jù)類型(一般的C+數(shù)據(jù)類型或Visual C+自定義的數(shù)據(jù)類型)5、添加與控件關(guān)聯(lián)的成員變量注意:注意:l可 以 為 一 個(gè) 控 件 同 時(shí) 定 義 一 個(gè)可 以 為 一 個(gè) 控 件 同 時(shí) 定 義 一 個(gè)ControlControl類別的變量和一個(gè)類別的變量和一個(gè)ValueValue類別的類別的變量變量l這些這些變量都是作為對(duì)話框派生類的成變量都是作為對(duì)話框派生類的成員員變量變量l為了為了在程序其它地方能夠直接訪問添在程序其它地方能夠直接訪問添加的成員變
10、量,它們都被聲明為加的成員變量,它們都被聲明為publicpublic屬性。屬性。常用的MFC控件和控件類 MFC類類控控 件件CStatic靜態(tài)文本、圖片控件CEdit編輯框CButton按鈕、復(fù)選框、單選按鈕、組框CComboBox組合框CListBox列表框CScrollBar滾動(dòng)條CSpinButtonCtrl旋轉(zhuǎn)按鈕CProgressCtrl進(jìn)度條CSliderCtrl滑塊CListCtrl列表視控件常用的MFC控件類 MFC類類控控 件件CTreeCtrl樹視控件CTabCtrl標(biāo)簽CAnimateCtrl動(dòng)畫控件CRichEditCtrl復(fù)合編輯框CDateTimeCtrl日期時(shí)
11、間選取器CMonthCalCtrl日歷CComboBoxEx擴(kuò)展組合框CStatusBarCtrl狀態(tài)條控件CToolBarCtrl工具條控件CImageList圖像列表對(duì)于控件Value類型的成員變量,可以通過對(duì)話框數(shù)據(jù)交換DDX和驗(yàn)證DDV實(shí)現(xiàn)數(shù)據(jù)輸入輸出對(duì)話框數(shù)據(jù)驗(yàn)證DDV(Dialog Data Validation):對(duì)用戶輸入數(shù)據(jù)的有效性進(jìn)行驗(yàn)證對(duì)話框數(shù)據(jù)交換DDX(Dialog Data Exchange):實(shí)現(xiàn)控件與成員變量間的數(shù)據(jù)交換DDV使用方法:把對(duì)話框中一個(gè)編輯框和UINT型的成員變量m_nInput時(shí)指定它的最小值和最大值分別為0和100, 則 C l a s s W
12、 i z a r d 類 向 導(dǎo) 將 在 成 員 函 數(shù)DoDataExchange()中添加以下DDV函數(shù)的調(diào)用語句:DDV_MinMaxUInt(pDX, m_nInput, 0, 100); 程序運(yùn)行時(shí),如果用戶的輸入數(shù)據(jù)超出0100的范圍,DDV將顯示一個(gè)提示信息對(duì)話框,提示用戶有效的輸入范圍。DDX使用方法:調(diào)用UpdateData(TRUE)時(shí),MFC通過調(diào)用DDX函數(shù)將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)的成員變量;調(diào)用UpdateData(FALSE)時(shí),MFC通過調(diào)用DDX函數(shù)將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)的的控件。注意: 創(chuàng)建并顯示對(duì)話框時(shí),將自動(dòng)調(diào)用UpdateData(FALSE),將數(shù)據(jù)
13、從成員變量傳遞到關(guān)聯(lián)的控件,從而顯示在控件中。 單擊OK按鈕將調(diào)用CDialog:OnOk()函數(shù),在OnOK()中調(diào)用了UpdateData(TRUE),將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)的成員變量。 D D X 就 如 同 一 條 雙 向 通 道 , 而 方 向 控 制 開 關(guān) 就 是UpdateData()函數(shù)中的BOOL類型參數(shù)是TRUE還是FALSE。6、使用對(duì)話框 用對(duì)話框類聲明對(duì)象(注意:包含對(duì)話框類頭文件) 調(diào)用對(duì)話框類的DoModal()成員函數(shù)創(chuàng)建并顯示模態(tài)對(duì)話框 無模態(tài)對(duì)話框的使用請(qǐng)參考相關(guān)資料函數(shù)函數(shù)OnOK()、 OnCancel()與與DoModal()的關(guān)系:的關(guān)系: 對(duì)話框
14、中一般都有ID為IDOK和IDCancel的按鈕 單擊ID為IDOK的按鈕時(shí)調(diào)用CDialog:OnOK()函數(shù) 單擊ID為IDCancel的按鈕時(shí)調(diào)用CDialog:OnCancel()函數(shù)。 OnOK()函數(shù)和OnCancal()函數(shù)都將結(jié)束DoModal()函數(shù)調(diào)用,但令DoModal()返回不同的值。 OnOK()函數(shù)令DoModal()返回IDOK, OnCancel()函數(shù)令DoModal()返回IDCANCAL。 用戶可以根據(jù)DoModal()的返回值做出不同的選擇。如: if (myDlg.DoModal() = = IDOK ) 對(duì)話框的初始化:對(duì)話框的初始化: 可以在三個(gè)不
15、同的階段所調(diào)用的函數(shù)中進(jìn)行: (1)對(duì)話框類構(gòu)造函數(shù); (2)WM_CREATE消息處理函數(shù); (3)WM_INITDIALOG消息處理函數(shù)。 建議在消息WM_INITDIALOG的消息處理函數(shù)OnInitDialog()中進(jìn)行初始化 在收到WM_INIT_ DIALOG消息時(shí),對(duì)話框的框架已創(chuàng)建,對(duì)話框中的每個(gè)控件也已建立起來,但它們還沒有在屏幕上顯示 此時(shí)自然可以設(shè)置或優(yōu)化對(duì)話框中各個(gè)控件的外觀、尺寸、位置以及其它屬性 函數(shù)OnInitDialog()將被成員函數(shù)DoModal()調(diào)用。例例 編寫編寫SDI程序,通過菜單或工具欄彈出一個(gè)對(duì)話程序,通過菜單或工具欄彈出一個(gè)對(duì)話框設(shè)置圓的半徑,
16、然后在客戶區(qū)完成圓形的繪框設(shè)置圓的半徑,然后在客戶區(qū)完成圓形的繪制。制。 添加對(duì)話框資源 為對(duì)話框資源添加控件。添加一個(gè)靜態(tài)文本控件,其Caption為“請(qǐng)輸入半徑”。添加一個(gè)Edit Box編輯框控件,其ID標(biāo)識(shí)為IDC_EDIT_ RADIUS,該控件用于接收用戶的輸入數(shù)據(jù)。 添加與控件關(guān)聯(lián)的成員變量m_nRadius,其數(shù)據(jù)類型為UINT。使用對(duì)話框數(shù)據(jù)驗(yàn)證DDV功能:m_nRadius的最小值5和最大值250。 為對(duì)話框資源添加對(duì)話類:CRadiusDialog 為了在視圖對(duì)象中接收并存儲(chǔ)對(duì)話框編輯控件的值,在視圖類CMysdiView中手工定義一個(gè)UINT類型的成員變量m_nCVie
17、wRadius。 利用菜單編輯器在“編輯”菜單增加一個(gè)菜單項(xiàng)“輸入半徑(I)”,其ID標(biāo)識(shí)為ID_EDIT_INPUTRADIUS,Caption為“輸入半徑(&I).”。啟動(dòng)ClassWzard類向?qū)?,在視圖類中為ID_EDIT_INPUTRADIUS菜單項(xiàng)添加COMMAND消息處理函數(shù),在函數(shù)中添加代碼。 void CMysdiView:OnEditInputradius() / TODO: Add your command handler code here CRadiusDialog dlg; / 定義一個(gè)對(duì)話框?qū)ο?dlg.m_nRadius=100;/ 設(shè)置編輯框顯示的初始
18、值 if (dlg.DoModal()=IDOK) / 顯示對(duì)話框 m_nCViewRadius=dlg.m_nRadius; / 接收并存儲(chǔ)編輯框數(shù)據(jù) Invalidate(); / 刷新視圖 3在視圖類構(gòu)造函數(shù)CMysdiView:CMysdiView()中將成員變 量 m _ n C V i e w R a d i u s 初 始 化 為 0 。 在 函 數(shù)CMysdiView:OnDraw()中添加如下畫圓的語句:pDC-Ellipse(0, 0, 2*m_nCViewRadius, 2*m_nCViewRadius); 在視圖類實(shí)現(xiàn)文件MysdiView.cpp的開始位置加入包含對(duì)話
19、框類頭文件的語句: #include RadiusDialog.h”7、基于對(duì)話框的應(yīng)用程序 可以直接利用MFC AppWizard向?qū)?chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序; 向?qū)⒆詣?dòng)完成: 添加對(duì)話框資源 為對(duì)話框資源添加對(duì)話框類,用對(duì)話框類聲明對(duì)象 通過對(duì)話框類的DoModal()創(chuàng)建并顯示對(duì)話框,該對(duì)話框即為程序的主窗口 程序編寫:添加控件,添加成員變量,添加消息響應(yīng)函數(shù)1執(zhí)行File|New|Project命令出現(xiàn)New Project對(duì)話框,選擇MFC|MFC Application項(xiàng),輸入程序名MyDialog,單擊OK按鈕。在隨后出現(xiàn)的Application type對(duì)話框窗口中選擇D
20、ialog Based選項(xiàng),單擊Finish按鈕就創(chuàng)建了應(yīng)用程序項(xiàng)目,并在Developer Studio中打開了對(duì)話框編輯器和控件工具欄。2去掉對(duì)話框中標(biāo)題為“TODO: 在這里設(shè)置對(duì)話控制”的 靜 態(tài) 文 本 控 件 , 調(diào) 整 對(duì) 話 框 大 小 , 在 成 員 函 數(shù)CMyDialogDlg:OnPaint()中添加代碼。 void CMyDialogDlg:OnPaint() . . . . . . else CPaintDC dc(this); dc.SetBkMode(TRANSPARENT); dc.TextOut(20, 50, 這是一個(gè)對(duì)話框應(yīng)用程序!); CDialog:
21、OnPaint(); 8、提示信息對(duì)話框 提示信息對(duì)話框也稱消息對(duì)話框,用來顯示有關(guān)的提示信息。提示信息對(duì)話框是一種最簡(jiǎn)單的對(duì)話框,不需要用戶自己創(chuàng)建它就可以直接使用,Visual C+提供了相應(yīng)的函數(shù)實(shí)現(xiàn)這樣的功能: int AfxMessageBox(LPCTSTR lpText, UINT nType=MB_OK, UINT nlDHelp=0); int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT nType); int CWnd:MessageBox(LPCTSTR lpText,LPCTSTR lpCa
22、ption=NULL, UINT nType=MB_OK); MFC全局函數(shù),可以在程序中任何地方使用API函數(shù),可以在程序中任何地方使用CWnd類的成員函數(shù),只能用于控件、對(duì)話框、窗口等一些窗口類的成員函數(shù)中例例:在程序中彈在程序中彈出如下圖所示的出如下圖所示的警告提示信息對(duì)話警告提示信息對(duì)話框框并根據(jù)用戶選擇進(jìn)行并根據(jù)用戶選擇進(jìn)行相應(yīng)的處理:相應(yīng)的處理:編寫的代碼如下: int nChoice=MessageBox(文件復(fù)制失??!, 錯(cuò)誤, MB_ICONWARNING | MB_ABORTRETRYIGNORE ); switch(nChoice) case IDABORT: / 用戶按
23、下終止按鈕. . . . . . caseIDRETRY: / 用戶按下重試按鈕. . . . . . case IDIGNORE: / 用戶按下忽略按鈕. . . . . . Windows將一些常用的對(duì)話框集成到操作系統(tǒng)中,作為Windows公用對(duì)話框庫(kù)Commdlg.dll的一部分 用戶在程序中可以直接使用這些公用對(duì)話框,不必再創(chuàng)建對(duì)話框資源和對(duì)話框類,減少了大量的編程工作。 用戶還可以定制公用對(duì)話框的外觀和性能。 為了在MFC應(yīng)用程序中使用公用對(duì)話框,MFC提供了封裝這些公用對(duì)話框的類。這些公用對(duì)話框類都是從CCommonDialog類派生而來,而CCommonDialog類又是CDi
24、alog類的派生類。9、公用對(duì)話框公用對(duì)話框公用對(duì)話框 MFC公用對(duì)話框類 CColorDialog CFileDialog CFindReplaceDialog CFontDialog CPagesSetupDialog CPrintDialog COleDialog說說 明明顏色設(shè)定對(duì)話框,選擇不同的顏色文件存取對(duì)話框,打開或保存文件查找和替換對(duì)話框,查找和替換文本串字體設(shè)定對(duì)話框,選擇不同的字體。頁面設(shè)置對(duì)話框,設(shè)置頁碼、頁眉等標(biāo)準(zhǔn)的打印對(duì)話框,用于打印和打印設(shè)置該類及其派生類用于生成OLE對(duì)話框10、標(biāo)準(zhǔn)控件 Windows提供的控件分為兩類:標(biāo)準(zhǔn)控件和公共控件。 標(biāo)準(zhǔn)控件:靜態(tài)控件、
25、編輯框、按鈕、列表框、組合框和滾動(dòng)條等。利用標(biāo)準(zhǔn)控件可滿足大部分用戶界面程序設(shè)計(jì)的要求。 公共控件:滑塊、進(jìn)度條、列表視控件、樹視控件和標(biāo)簽控件等,利用公共控件實(shí)現(xiàn)應(yīng)用程序用戶界面風(fēng)格的多樣性。 用戶對(duì)控件操作時(shí)Windows產(chǎn)生控件消息并發(fā)送給父窗口(如對(duì)話框)。 標(biāo)準(zhǔn)控件發(fā)送WM_COMMAND控件通知消息,公共控件一 般 發(fā) 送 W M _ N O T I F Y 控 件 通 知 消 息 , 或WM_COMMAND消息。 通過WM_COMMAND消息參數(shù)標(biāo)識(shí)發(fā)出消息的控件和具體的事件,消息參數(shù)中包含了控件的ID標(biāo)識(shí)和通知碼(區(qū)分消息種類,如BN_CLICKED單擊按鈕事件) 程序員不必關(guān)
26、心消息具體的發(fā)送和接收,只需為控件消息添加響應(yīng)函數(shù),然后在響應(yīng)函數(shù)中編寫具體的處理代碼。 控件的組織 添加或刪除控件 設(shè)置控件屬性 調(diào)整控件的大小 同時(shí)選取多個(gè)控件:鼠標(biāo)框選,shift或ctrl+鼠標(biāo)點(diǎn)選 復(fù)制控件:復(fù)制粘貼,ctrl+拖動(dòng)控件 編排控件:使用主菜單format下的各個(gè)子菜單 測(cè)試對(duì)話框和控件的方法:按下Ctrl+T組合鍵就能測(cè)試對(duì)話框運(yùn)行時(shí)的界面效果。 控件的公共屬性項(xiàng)項(xiàng) 目目說說 明明 ID控件的標(biāo)識(shí),對(duì)話框編輯器會(huì)為每一個(gè)加入的控件分配一個(gè)默認(rèn)的ID Caption控件的標(biāo)題,作為程序執(zhí)行時(shí)在控件位置上顯示的文本 Visible指明顯示對(duì)話框時(shí)該控件是否可見 Group
27、用于指定一個(gè)控件組中的第一個(gè)控件 HelpID表示為該控件建立一個(gè)上下文相關(guān)的幫助標(biāo)識(shí)ID Disabled指定控件初始化時(shí)是否禁用 Tab Stop表示對(duì)話框運(yùn)行后該控件可以通過使用Tab鍵來獲取焦點(diǎn)1)靜態(tài)控件 靜態(tài)控件(Static control)是用來顯示一個(gè)文本串或圖形信息的控件,它包括靜態(tài)文本控件、圖片控件和組框。 靜態(tài)文本控件用來顯示一般不需要變化的文本; 圖片控件用來顯示邊框、矩形、圖標(biāo)或位圖等圖形; 組框用來顯示一個(gè)文本標(biāo)題和一個(gè)矩形邊框,通常用來將一組控件組織在一起。 管理靜態(tài)文本控件和圖片控件的MFC類是CStatic類,而管理組框的MFC類是CButton類。 所有靜
28、態(tài)控件默認(rèn)的ID標(biāo)識(shí)都為IDC_STATIC,如果要為一個(gè)靜態(tài)控件添加成員變量或消息處理函數(shù),必須重新為它指定一個(gè)唯一的ID標(biāo)識(shí)。 編程時(shí)用的最多是靜態(tài)文本控件,它被用來作為其它控件的標(biāo)題。每一個(gè)靜態(tài)文本控件最多可以顯示255個(gè)字符,可以使用“n”換行符。2)編輯框編輯框(Edit box)又稱文本框或編輯控件,它一般與靜態(tài)文本控件一起使用,用于數(shù)據(jù)的輸入和輸出。編輯框提供了完整的鍵盤輸入和編輯功能,可以輸入各種文本、數(shù)字或者口令。 編輯框?yàn)橛脩籼峁┝肆己玫妮斎?、輸出功能,能夠?qū)㈡I盤輸入的字符串轉(zhuǎn)化為要求的數(shù)據(jù)類型(DDX),并驗(yàn)證它是否符合輸入要求(DDV)。編輯框常用屬性: Multili
29、ne設(shè)置單行或多行編輯Align text設(shè)置文本對(duì)齊方式Number表示只能輸入數(shù)字Password表示鍵入編輯框的字符都將顯示為“*”Uppercase或Lowercase表示鍵入編輯框的字符全部轉(zhuǎn)換成大寫或小寫形式Read-Only表示只能輸出數(shù)據(jù)。當(dāng)編輯框的文本被修改,會(huì)向父窗口發(fā)送消息,可以利用ClassWizard在對(duì)話框類中添加消息處理函數(shù)。編輯框發(fā)送消息有:EN_CHANGEEN_KILLFOCUSEN_SETFOCUSEN_MAXTEXTEN_UPDATE例 編寫一個(gè)SDI應(yīng)用程序Password,程序啟動(dòng)后首先彈出一個(gè)如圖所示的用戶身份確認(rèn)對(duì)話框,當(dāng)用戶鍵入正確的口令后才能
30、進(jìn)入程序的主界面。 3)按鈕按鈕(Button)包括按鍵按鈕、單選按鈕和復(fù)選框等3種類型,由MFC的CButton類封裝,按鍵按鈕用來執(zhí)行某個(gè)命令,也被稱為命令按鈕;單選按鈕用于在一組互相排斥的選項(xiàng)中選擇其中一項(xiàng);復(fù)選框用于在一組選項(xiàng)中選擇其中一項(xiàng)或多項(xiàng);按鍵按鈕 幾乎所有的對(duì)話框都使用簡(jiǎn)單的按鍵按鈕,如OK按鈕。通過設(shè)置Default button屬性可將按鈕設(shè)置成默認(rèn)按鈕。對(duì)話框顯示時(shí)按下Enter鍵將執(zhí)行該按鈕的命令功能。一個(gè)對(duì)話框只能有一個(gè)Default button默認(rèn)按鈕,通常情況下將OK按鈕設(shè)置為默認(rèn)按鈕。其它屬性:Owner draw利用WM_DRAWITEM消息處理函數(shù)定制按
31、鈕的外觀,Icon表示用圖標(biāo)代替原來的文本標(biāo)題,Bitmap表示用位圖代替原來的文本標(biāo)題,Client edge、Static edge、Modal frame用于設(shè)置按鈕的外觀。 單選按鈕 一般將一組單選按鈕放在一個(gè)組框中 在一組單選按鈕中,第一個(gè)(Tab鍵順序)按鈕最重要,其ID值可用于在對(duì)話框中為控件建立關(guān)聯(lián)的成員變量 必須為同組中的第一個(gè)單選按鈕設(shè)置Group屬性,而同組的其它單選按鈕不可再設(shè)置Group屬性。 復(fù)選框不同于單選按鈕,在一組復(fù)選框中每次可以同時(shí)選擇多項(xiàng)除了選中和沒選中兩種狀態(tài),復(fù)選框還有第三種狀態(tài),此時(shí)選中標(biāo)記顯示為暗色,它表示該項(xiàng)不可以由用戶選擇通過設(shè)置Tri-sta
32、te屬性得到這種三態(tài)復(fù)選框。另外,我們可以通過設(shè)置Push-like屬性使單選按鈕或復(fù)選框具有普通按鈕的外觀。 按鈕控件發(fā)送的消息: 按鈕控件只能發(fā)送通知碼為BN_CLICKED(單擊按鈕)和 B N _ D O U B L E C L I C K E D ( 雙 擊 按 鈕 ) 的WM_COMMAND消息,我們經(jīng)常需要編寫按鈕的BN_CLICKED消息處理函數(shù)。CButton類提供了一些成員函數(shù)實(shí)現(xiàn)對(duì)按鈕控件對(duì)象的控制和管理,如利用成員函數(shù)GetCheck()或SetCheck()獲取或設(shè)置單選按鈕或復(fù)選框的當(dāng)前狀態(tài)。 例 編寫一個(gè)對(duì)話框應(yīng)用程序ColrButn,對(duì)話框中有兩個(gè)用于選擇顏色模
33、式的單選按鈕和三個(gè)用于選擇具體顏色的復(fù)選框,只有在彩色模式下才能選擇三種不同顏色的組合。當(dāng)用戶單擊“應(yīng)用”按鈕,在對(duì)話框右側(cè)繪制指定顏色的矩形。 4)列表框 Windows提供了幾個(gè)列表類型控件,如列表框、組合框、列表視控件和樹視控件,其中列表框是一種最簡(jiǎn)單的列表類型控件。 列表框(List box)是一個(gè)列出了一些文本項(xiàng)的窗口,常用來顯示類型相同的一系列清單,如文件、字體和用戶等。與復(fù)選框類似,用戶可以選擇其中一項(xiàng)或多項(xiàng),但同時(shí)列表框中選項(xiàng)的數(shù)目和內(nèi)容可以動(dòng)態(tài)變化,用戶可往列表框中添加或刪除某些選項(xiàng)。 列表框有單選Single、多選Multiple、擴(kuò)展多選Extended、不選None四種
34、風(fēng)格,通過控件的Selection屬性設(shè)置。 當(dāng)列表框中發(fā)生了某個(gè)事件,列表框就會(huì)向其父窗口發(fā)送一條通知消息。列表框常用的通知消息有: 用戶雙擊列表框中的列表項(xiàng)時(shí)發(fā)送消息LBN_DBLCLK 列表框失去鍵盤輸入焦點(diǎn)時(shí)發(fā)送消息LBN_KILLFOCUS 列表框獲得鍵盤輸入焦點(diǎn)時(shí)發(fā)送消息LBN_SETFOCUS 列表框中的當(dāng)前選擇項(xiàng)發(fā)生改變時(shí)發(fā)送消息LBN_SELCHANGE。 封裝列表框控件的MFC類是CListBox類,在程序中可以通過添加control類型的成員變量,并調(diào)用CListBox類成員函數(shù)來實(shí)現(xiàn)列表項(xiàng)的添加、刪除、修改和獲取等操作。例 編寫一個(gè)對(duì)話框應(yīng)用程ExmpList,對(duì)話框中
35、有一個(gè)列表框,當(dāng)用戶單擊列表框中的一個(gè)列表項(xiàng)(一個(gè)國(guó)家)時(shí),在四個(gè)編輯框分別顯示指定國(guó)家的名稱、首都、面積和人口。單擊“添加”按鈕時(shí),“國(guó)家”編輯框中的文本將被添加到列表框中;單擊“刪除”按鈕時(shí),當(dāng)前的列表項(xiàng)將被刪除。5)組合框 組合框(Combo box)吸收了列表框和編輯框的優(yōu)點(diǎn) 可以顯示列表項(xiàng)供用戶進(jìn)行選擇, 允許用戶輸入新的列表項(xiàng)。 實(shí)質(zhì)上,組合框是多個(gè)控件的組合,包括編輯框、列表框和按鈕。 通過設(shè)置組合框的Type屬性可以使組合框有簡(jiǎn)單組合框(Simple)、下拉組合框(Dropdown)和下拉列表框(Drop List)三種形式組合框控件的Data屬性: 與編輯框或列表框相比,組合
36、框有一個(gè)新的功能屬性,可以通過組合框控件的Data屬性添加初始的列表項(xiàng),各個(gè)列表項(xiàng)用分號(hào)隔開。也可以為組合框關(guān)聯(lián)control類型的成員變量,并在在對(duì)話框類的初始化成員函數(shù)OnInitDialog()中編寫代碼添加列表項(xiàng)。 組合框發(fā)送的消息 : 關(guān)閉組合框消息CBN_CLOSEUP打開列表框消息CBN_DROPDOWN雙擊列表項(xiàng)消息CBN_DBLCLK選擇一個(gè)列表項(xiàng)并按下Enter鍵或單擊下拉按鈕隱藏列表框時(shí)發(fā)送消息CBN_SELENDOK當(dāng)前選項(xiàng)被取消時(shí)(如重新選擇其它控件或關(guān)閉對(duì)話框)發(fā)送消息CBN_SELENDCANCEL當(dāng)前選項(xiàng)改變消息CBN_SELCHANGE當(dāng)組合框的編輯框中的文本
37、被修改且新的文本顯示之后發(fā)送消息CBN_EDITCHANGE當(dāng)編輯框中的文本被修改且新的文本顯示之前發(fā)送消息CBN_EDITUPDATE組合框失去鍵盤輸入焦點(diǎn)消息CBN_KILLFOCUS組合框獲得鍵盤輸入焦點(diǎn)消息CBN_SETFOCUS。 例 編寫一個(gè)單文檔應(yīng)用程序ExmpCombo,執(zhí)行“測(cè)試控件|組合框”菜單命令時(shí)打開一個(gè)對(duì)話框,初始的對(duì)話框有一個(gè)用于顯示標(biāo)準(zhǔn)控件名的組合框,當(dāng)用戶在組合框下拉的列表框中選擇一個(gè)控件時(shí),該控件將顯示在對(duì)話框的右部。當(dāng)用戶在組合框的編輯框中輸入一個(gè)列表項(xiàng)并單擊“應(yīng)用”按鈕,一個(gè)指定標(biāo)題的靜態(tài)文本控件將出現(xiàn)在對(duì)話框的右部。 二、二、MFCMFC圖形繪制圖形繪制
38、紙筆畫刷顏料 畫畫需要什么?顯示器打印機(jī)投影儀彩色筆CPen彩色畫刷CBrush輸出設(shè)備圖形設(shè)備接口(Graphics Device Interface,GDI) 不同圖形設(shè)備的操作不一樣(驅(qū)動(dòng)不一樣),同類圖形設(shè)備、不用品牌的操作也不一樣; 程序設(shè)計(jì)者難道要針對(duì)每種情況編寫程序? 如何使繪圖程序適用于各種圖形設(shè)備?GDIGDI1、GDI GDI通過不同設(shè)備提供的驅(qū)動(dòng)程序?qū)⒗L圖語句轉(zhuǎn)換為對(duì)應(yīng)的繪圖指令 避免了繪圖語句直接對(duì)硬件進(jìn)行操作,從而實(shí)現(xiàn)設(shè)備無關(guān)性應(yīng)用程序設(shè)備環(huán)境DCGDI設(shè)備驅(qū)動(dòng)程序物理設(shè)備顯示器打印機(jī)2、設(shè)備環(huán)境(Device Context)應(yīng)用程序不直接面向顯示器等物理設(shè)備,而是
39、面向虛擬邏輯設(shè)備:設(shè)備環(huán)境 (DC:Device Context)。設(shè)備環(huán)境也稱設(shè)備描述表或設(shè)備上下文Windows管理的一個(gè)數(shù)據(jù)結(jié)構(gòu)保存了繪圖操作中一些需要共同設(shè)置的信息,如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對(duì)象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。形象地說:設(shè)備環(huán)境提供畫布和繪畫工具,應(yīng)用程序可以使用這些工具在畫布上面繪制點(diǎn)、線、圓和文本。MFC編程時(shí)有哪些設(shè)備環(huán)境? CDC:其它設(shè)備環(huán)境類的基類,可以訪問設(shè)備屬性和設(shè)置繪圖屬性。CDC類對(duì)GDI的所有繪圖函數(shù)進(jìn)行了封裝。 CPaintDC:是OnPaint()函數(shù)使用的設(shè)備環(huán)境類。如果添加WM_PAINT消息處理函數(shù)OnPai
40、nt(),就需要使用CPaintDC類來定義一個(gè)設(shè)備環(huán)境對(duì)象。 CClientDC:客戶區(qū)設(shè)備環(huán)境。在客戶區(qū)實(shí)時(shí)繪圖時(shí)需要定義的客戶區(qū)設(shè)備環(huán)境。 CWindowDC:代表了整個(gè)程序窗口設(shè)備環(huán)境,可以在整個(gè)窗口區(qū)域繪圖(包含標(biāo)題欄,工具條,狀態(tài)欄等)。各種的區(qū)別使用的坐標(biāo)系是否可被打印一般在哪里使用繼承關(guān)系邏輯坐標(biāo)系OnDraw設(shè)備環(huán)境基類邏輯坐標(biāo)系WM_PAINTOnPaintCDC的派生類設(shè)備坐標(biāo)系其它函數(shù)CDC的派生類設(shè)備坐標(biāo)系所有函數(shù)CDC的派生類CWindowDCCDCCPaintDCCClientDC怎樣獲取這些設(shè)備環(huán)境? CDC主要用于OnDraw函數(shù)里; CPaintDC主要用于
41、WM_PAINT消息的響應(yīng)函數(shù)OnPaint里; CClientDC用于其它函數(shù)里; CWindowDC;SDK程序中怎樣獲取這些設(shè)備環(huán)境? WM_PAINT消息處理函數(shù)中通過調(diào)用API函數(shù)BeginPaint()獲取設(shè)備環(huán)境,在消息處理函數(shù)返回前調(diào)用API函數(shù)EndPaint()釋放設(shè)備環(huán)境。 在其他函數(shù)中通過調(diào)用API函數(shù)GetDC()獲取設(shè)備環(huán)境,調(diào)用API函數(shù)ReleaseDC()釋放設(shè)備環(huán)境。 hdc = BeginPaint(hWnd, &ps); /WM_PAINT RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, sz
42、Hello, strlen(szHello), &rt, DT_CENTER); EndPaint(hWnd, &ps); hdc = GetDC(hWnd); /WM_LBUTTONDOWNRECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); ReleaseDC(hWnd, hdc);3、GDI坐標(biāo)系 Windows坐標(biāo)系分為坐標(biāo)系分為邏輯坐標(biāo)系邏輯坐標(biāo)系和和設(shè)備坐標(biāo)系設(shè)備坐標(biāo)系兩種,兩種,GDI支持這兩種坐標(biāo)系。一般而言,支持這兩種坐
43、標(biāo)系。一般而言,GDI的文本和圖形輸出函的文本和圖形輸出函數(shù)使用邏輯坐標(biāo),而在客戶區(qū)移動(dòng)或按下鼠標(biāo)的鼠標(biāo)位置數(shù)使用邏輯坐標(biāo),而在客戶區(qū)移動(dòng)或按下鼠標(biāo)的鼠標(biāo)位置是采用設(shè)備坐標(biāo)。是采用設(shè)備坐標(biāo)。 邏輯坐標(biāo)系是面向邏輯坐標(biāo)系是面向DC的坐標(biāo)系的坐標(biāo)系,這種坐標(biāo)不考慮具體的設(shè),這種坐標(biāo)不考慮具體的設(shè)備類型,在繪圖時(shí),備類型,在繪圖時(shí),Windows會(huì)根據(jù)當(dāng)前設(shè)置的映射模式會(huì)根據(jù)當(dāng)前設(shè)置的映射模式將邏輯坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo)。將邏輯坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo)。 設(shè)備坐標(biāo)系是面向物理設(shè)備的坐標(biāo)系設(shè)備坐標(biāo)系是面向物理設(shè)備的坐標(biāo)系,這種坐標(biāo)以像素或,這種坐標(biāo)以像素或設(shè)備所能表示的最小長(zhǎng)度單位為單位,設(shè)備所能表示的最小長(zhǎng)度
44、單位為單位,X軸方向向右,軸方向向右,Y軸軸方向向下。設(shè)備坐標(biāo)系的原點(diǎn)位置方向向下。設(shè)備坐標(biāo)系的原點(diǎn)位置(0, 0)不限定在設(shè)備顯示不限定在設(shè)備顯示區(qū)域的左上角。區(qū)域的左上角。4、設(shè)備坐標(biāo)系 設(shè)備坐標(biāo)系分為屏幕坐標(biāo)系、窗口坐標(biāo)系和客戶區(qū)坐標(biāo)系設(shè)備坐標(biāo)系分為屏幕坐標(biāo)系、窗口坐標(biāo)系和客戶區(qū)坐標(biāo)系三種相互獨(dú)立的坐標(biāo)系三種相互獨(dú)立的坐標(biāo)系。 坐標(biāo)之間的相互轉(zhuǎn)換 MFC提供了兩個(gè)函數(shù)CWnd:ScreenToClient()和CWnd:ClientToScreen()用于屏幕坐標(biāo)與客戶區(qū)坐標(biāo)的相互轉(zhuǎn)換。 MFC提供了兩個(gè)函數(shù)CDC:DPtoLP()和CDC: LPtoDP()用于設(shè)備坐標(biāo)與邏輯坐標(biāo)之間的
45、相互轉(zhuǎn)換。映射模式映射模式邏輯單位坐標(biāo)系設(shè)定MM_TEXT一個(gè)像素X軸正方向朝右,Y軸正方向朝下MM_LOMETRIC0.1毫米X軸正方向朝右,Y軸正方向朝上MM_HIMETRIC0.01毫米X軸正方向朝右,Y軸正方向朝上MM_LOENGLISH0.01英寸X軸正方向朝右,Y軸正方向朝上MM_HIENGLISH0.001英寸X軸正方向朝右,Y軸正方向朝上MM_TWIPS1/1440英寸X軸正方向朝右,Y軸正方向朝上MM_ISOTROPIC系統(tǒng)確定X、Y軸可任意調(diào)節(jié),X、Y軸比例為1:1MM_ANISOTROPIC系統(tǒng)確定X、Y軸可任意調(diào)節(jié),X、Y軸比例任意坐標(biāo)原點(diǎn) 通過調(diào)用函數(shù)CDC:SetW
46、indowOrg()設(shè)置設(shè)備環(huán)境的窗口原點(diǎn)的坐標(biāo),調(diào)用CDC:SetViewportOrg()重新設(shè)置設(shè)備的視口原點(diǎn)的坐標(biāo)。 窗口原點(diǎn)是指邏輯窗口坐標(biāo)系的原點(diǎn)在視口(設(shè)備)坐標(biāo)系中的位置,視口原點(diǎn)是指設(shè)備實(shí)際輸出區(qū)域的原點(diǎn)。 除了映射模式,窗口和視口也是決定一個(gè)點(diǎn)的邏輯坐標(biāo)如何轉(zhuǎn)換為設(shè)備坐標(biāo)的一個(gè)因素。一個(gè)點(diǎn)的邏輯坐標(biāo)按照如下式子轉(zhuǎn)換為設(shè)備坐標(biāo): 設(shè)備(視口)坐標(biāo) = 邏輯坐標(biāo) 窗口原點(diǎn)坐標(biāo) + 視口原點(diǎn)坐標(biāo)例 分別在OnDraw()函數(shù)中添加如下代碼,設(shè)置不同的窗口原點(diǎn)和視口原點(diǎn),結(jié)果有什么不同。 (1) pDC-SetMapMode(MM_TEXT); pDC-Rectangle(CRec
47、t(50, 50, 100, 100);(2) pDC-SetMapMode(MM_TEXT); pDC-SetWindowOrg(50, 50); /屏幕左上角點(diǎn)坐標(biāo)pDC-Rectangle(CRect(50, 50, 100, 100);(3) pDC-SetMapMode(MM_TEXT); pDC-SetViewportOrg(50,50); /輸出的坐標(biāo)原點(diǎn)pDC-Rectangle(CRect(50, 50, 100, 100);(4) pDC-SetMapMode(MM_TEXT); pDC-SetViewportOrg(50,50);pDC-SetWindowOrg(50,
48、50);pDC-Rectangle(CRect(50, 50, 100, 100);5、OnPaint 與OnDraw的區(qū)別和聯(lián)系 簡(jiǎn)單的說OnPaint只是負(fù)責(zé)窗口的重繪,而OnDraw是所有CDC的重繪(例如:打印機(jī)) 都是邏輯坐標(biāo)繪圖。(CClientDC為設(shè)備坐標(biāo)繪圖) OnDraw是一個(gè)純虛函數(shù),定義為virtual void OnDraw( CDC* pDC ) = 0;而而OnPaint是一個(gè)消息響應(yīng)函數(shù),它響應(yīng)了WM_PANIT消息,也是是窗口重繪消息 獲得DC后,就可以進(jìn)行各種圖形操作!6、設(shè)置顏色(1)Windows用COLORREF類型的數(shù)據(jù)存放顏色,它是一個(gè)32位整數(shù)。
49、0 x000000000 x00FFFFFF共16777216種顏色。顏色由紅、綠、藍(lán)三種基本顏色組成,COLORREF類型數(shù)據(jù)的低位字節(jié)存放紅色強(qiáng)度值,第2個(gè)字節(jié)存放綠色強(qiáng)度值,第3個(gè)字節(jié)存放藍(lán)色強(qiáng)度值,高位字節(jié)為0(2)Windows提供了RGB宏用于設(shè)置顏色: RGB(byRed, byGreen, byBlue)其中byRed、byGreen和byBlue分別表示紅、綠、藍(lán)分量值。0 00 000 0 00 00 000 0 01 11 111 1 10 00 000 0 0標(biāo)準(zhǔn)彩色的RGB值顏色RGB分量值顏色RGB分量值淺紅255,0,0深紅128,0,0淺綠0,255,0深綠0,
50、128,0淺藍(lán)0,0,255深藍(lán)0,0,128淺黃255,255,0深黃128,128,0淺青0,255,255深青0,128,128紫色255,0,255灰色192,192,192白色255,255,255黑色0,0,0定義顏色變量/定義綠色COLORREF rgbBkClr=RGB(0,255,0); /上句等同于/COLORREF rgbBkClr=65280; 7、使用畫筆 CPen 3 還原畫筆2 選擇畫筆1 創(chuàng)建畫筆畫圖開始CPen的構(gòu)造函數(shù)CPen的CreatePen函數(shù)設(shè)備環(huán)境類的SelectObject函數(shù)設(shè)備環(huán)境類的SelectObject函數(shù)CPen的DeleteObje
51、ct 函數(shù)畫圖結(jié)束畫圖1)創(chuàng)建畫筆 方法1:利用構(gòu)造函數(shù)創(chuàng)建CPen pen(PS_SOLID, 4, RGB(0, 0, 255); 方法2:利用CreatePen函數(shù)創(chuàng)建CPen pen; pen.CreatePen(PS_DASH, 1, RGB(255,0,0);注意:以這種方式創(chuàng)建的畫筆,如果以后不再使用,需要進(jìn)行銷毀。銷毀方式是調(diào)用DeleteObject函數(shù)。pen.DeleteObject();畫筆寬度只有在實(shí)線時(shí)才有效!其它樣式的線只能是1個(gè)像素寬!84畫筆樣式樣 式說 明樣 式說 明PS_SOLID實(shí)線PS_DASHDOTDOT雙點(diǎn)劃線PS_DOT點(diǎn)線PS_NULL空的邊框
52、PS_DASH虛線PS_INSIDEFRAME邊框?qū)嵕€PS_DASHDOT點(diǎn)劃線 2)選擇畫筆 使用設(shè)備環(huán)境類的成員函數(shù)SelectObject來選擇畫筆作為當(dāng)前使用的畫筆。返回值為舊畫筆的指針。CPen penNew(PS_SOLID, 4, RGB(255,0,0);CPen* pPenOld=pDC-SelectObject(&penNew);3)還原畫筆 仍然使用SelectObject函數(shù)pDC-SelectObject(pPenOld);使用畫筆的例子/-/畫圖開始/創(chuàng)建畫筆CPen penRed;penRed.CreatePen(PS_SOLID, 5, RGB(255,
53、 0, 0);/選擇新畫筆,保存舊畫筆CPen *pOldPen = pDC-SelectObject(&penRed);/畫圖:畫一條直線pDC-MoveTo(100, 50);pDC-LineTo(300, 150);/還原畫筆pDC-SelectObject(pOldPen);/銷毀畫筆penRed.DeleteObject();/畫圖結(jié)束/-備注 系統(tǒng)默認(rèn)的畫筆是實(shí)線、實(shí)線、1像素寬、黑色像素寬、黑色。 CDC函數(shù)MoveTo(int x, int y) /直線的起點(diǎn)直線的起點(diǎn)LineTo(int x, int y)/直線的終點(diǎn)直線的終點(diǎn)以當(dāng)前的畫筆畫一條直線。8、使用畫刷 C
54、Brush畫刷能用來填充封閉的區(qū)域3 還原畫刷2 選擇畫刷1 創(chuàng)建畫刷畫圖開始CBrush的構(gòu)造函數(shù)CBrush的3種Create函數(shù)設(shè)備環(huán)境類的SelectObject函數(shù)設(shè)備環(huán)境類的SelectObject函數(shù)CBrush的DeleteObject 函數(shù)畫圖結(jié)束畫圖畫刷的類型畫刷有三種基本類型:純色畫刷、陰影畫刷和圖案畫刷.1)創(chuàng)建畫刷(構(gòu)造函數(shù)方式和Create函數(shù)方式) 創(chuàng)建純色畫刷CBrush brush1(RGB(255,0,0);/CBrush brush1; /brush1. CreateSolidBrush(RGB(255,0,0); 創(chuàng)建陰影畫刷CBrush brush2(
55、HS_DIAGCROSS, RGB(255,0,0);/CBrush brush2;/brush2. CreateHatchBrush(HS_DIAGCROSS, RGB(255, 0, 0); 創(chuàng)建圖案畫刷CBitmap bmp;bmp.LoadBitmap(IDB_BRUSH);CBrush brush3(&bmp);/CBrush brush3;/brush3. CreatePatternBrush(&bmp);陰影畫刷的樣式 CBrush brush2(HS_DIAGCROSS, RGB(255,0,0);HS_BDIAGONALHS_CROSSHS_DIAGCROSS
56、HS_FDIAGONALHS_HORIZONTALHS_VERTICAL2)選擇畫刷 使用設(shè)備環(huán)境類的成員函數(shù)SelectObject來選擇畫刷作為當(dāng)前使用的畫刷。返回值為舊畫刷的指針。CBrush brushRed(RGB(255,0,0);CBrush* pBrushOld=pDC-SelectObject(&brushRed);3)還原畫刷 仍然使用SelectObject函數(shù)pDC-SelectObject(pBrushOld);使用畫刷的例子/-/畫圖開始/創(chuàng)建畫刷CBrush brush;brush.CreateHatchBrush(HS_VERTICAL , RGB(25
57、5, 0, 0);/保存舊畫刷CBrush *pOldBrush = pDC-SelectObject(&brush);/畫圖:畫矩形pDC-Rectangle(50, 50, 200, 200);/還原畫刷pDC-SelectObject(pOldBrush);/銷毀畫刷brush.DeleteObject();/畫刷結(jié)束/-備注 系統(tǒng)默認(rèn)畫刷為純色、白色的畫刷。 CDC函數(shù)Rectangle(int x1, int y1, int x2, int y2)是以當(dāng)前的畫筆畫矩形邊框,內(nèi)部以當(dāng)前畫刷填充x1, y1x2, y29、使用系統(tǒng)定義的畫筆和畫刷(堆對(duì)象) Windows預(yù)定義了
58、一些簡(jiǎn)單風(fēng)格的GDI對(duì)象,用戶使用這些GDI對(duì)象時(shí),無需自己創(chuàng)建它們,可以直接將它們選入當(dāng)前的設(shè)備環(huán)境,這些GDI對(duì)象稱作為堆(堆(Stock)對(duì)象)對(duì)象。堆對(duì)象包括堆畫筆、堆畫刷和堆字體等。堆畫筆、畫刷的樣式及說明樣 式說 明樣 式說 明BLACK_PEN黑色畫筆WHITE_PEN白色畫筆NULL_PEN空畫筆BLACK_BRUSH黑色畫刷WHITE_BRUSH白色畫刷NULL_BRUSH空畫刷GRAY_BRUSH灰色畫刷DKGRAY_BRUSH深灰色畫刷LTGRAY_BRUSH淺灰色畫刷HOLLOW_BRUSH虛畫刷使用堆對(duì)象 函數(shù)CDC:SelectStockObject()可以選擇一個(gè)
59、堆對(duì)象繪圖工具,以下代碼將堆畫筆和堆畫刷作為當(dāng)前的繪圖工具:pPenOld=(CPen*) pDC-SelectStockObject(NULL_PEN); / 使用堆畫筆對(duì)象pBrhOld=(CBrush*) pDC-SelectStockObject(LTGRAY_BRUSH); / 使用堆畫刷對(duì)象10、繪制基本圖形 Windows中可以繪制的基本幾何圖形包括點(diǎn)、直線、曲線、矩形、橢圓、弧、扇形、弦形和多邊形等。 繪圖函數(shù)使用的坐標(biāo)都是邏輯坐標(biāo)。 各個(gè)DC類提供的繪圖函數(shù)有:SetPixelMoveTo LineToPolylinePolyBezier RectangleRoundRect
60、Ellipse ArcArcToPie ChordPolygonDrawIcon繪制基本圖形11、文本輸出與字體 輸出函數(shù)是輸出函數(shù)是TextOut()函數(shù),該函數(shù)只能輸出單行函數(shù),該函數(shù)只能輸出單行文本。要繪制多行文本可以調(diào)用文本。要繪制多行文本可以調(diào)用DrawText()函數(shù)函數(shù),另一個(gè)函數(shù),另一個(gè)函數(shù)ExtTextOut()可以用一個(gè)矩形框?qū)斂梢杂靡粋€(gè)矩形框?qū)敵鑫谋敬M(jìn)行裁剪。出文本串進(jìn)行裁剪。 在缺省情況下繪制文本時(shí),字體顏色是黑色黑色,背景顏色是白色白色,背景模式為不透明不透明模式??梢酝ㄟ^調(diào)用CDC類成員函數(shù)重新設(shè)置字體顏色、背景顏色和文本對(duì)齊方式等文本屬性。CDC類與文本輸出相關(guān)的函數(shù)SetTextColor()設(shè)置顯示文本的顏色GetTextColor獲得當(dāng)前文本的顏色SetBkColor()設(shè)置顯示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)合資車行業(yè)發(fā)展概況及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 書皮壓痕機(jī)項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 2025年中國(guó)控制器PLC行業(yè)市場(chǎng)深度分析及投資策略研究報(bào)告
- 2025年 車工中級(jí)職業(yè)技能考試試題單選題、判斷題附答案
- 2021-2026年中國(guó)電纜組裝市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2025年中國(guó)航天器市場(chǎng)運(yùn)行現(xiàn)狀及行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 中國(guó)住宿服務(wù)行業(yè)發(fā)展趨勢(shì)及投資前景預(yù)測(cè)報(bào)告
- 管制移動(dòng)式單搖床行業(yè)深度研究分析報(bào)告(2024-2030版)
- 2025-2030年中國(guó)紅外水份儀項(xiàng)目投資可行性研究分析報(bào)告
- 2025年眼科市場(chǎng)調(diào)查報(bào)告
- 內(nèi)科學(xué)《肺結(jié)核》課件
- (完整版)傳熱學(xué)期末考試試題
- Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 課件 第6、7章 Pandas基礎(chǔ)與應(yīng)用、Matplotlib
- 玻璃體手術(shù)并發(fā)癥的預(yù)防及處理
- 2023年醫(yī)學(xué)高級(jí)職稱-中醫(yī)肛腸(醫(yī)學(xué)高級(jí))考試歷年高頻考點(diǎn)試題含答案
- 爬架拆除技術(shù)交底
- pergeos軟件教程評(píng)價(jià)許可介紹
- 密封條范文模板(A4打印版)
- 出租車 專業(yè)部分考核試題 城市客運(yùn)企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員安全考核基礎(chǔ)題庫(kù)
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導(dǎo)則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門窗
評(píng)論
0/150
提交評(píng)論