版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第十二(sh r)講 對(duì)話框設(shè)計(jì)和圖形繪制電子信息學(xué)院(xuyun)課程組武漢大學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)共一百一十六頁(yè)本講主要(zhyo)內(nèi)容一、使用對(duì)話框1、添加對(duì)話框資源2、對(duì)話框?qū)傩跃庉?、創(chuàng)建對(duì)話框類(lèi)4、為對(duì)話框添加控件5、添加與控件關(guān)聯(lián)(gunlin)的成員變量6、使用對(duì)話框7、基于對(duì)話框的應(yīng)用程序8、提示信息對(duì)話框9、公用對(duì)話框10、標(biāo)準(zhǔn)控件二、MFC圖形繪制1、GDI和DC2、設(shè)備環(huán)境(Device Context)3、GDI坐標(biāo)系4、設(shè)備坐標(biāo)系5、OnPaint 與OnDraw的區(qū)別和聯(lián)系6、設(shè)置顏色7、使用畫(huà)筆 CPen8、使用畫(huà)刷 CBrush9、使用系統(tǒng)定義的畫(huà)筆和畫(huà)刷(堆對(duì)
2、象)10、繪制基本圖形11、文本輸出與字體12、位圖、圖標(biāo)和光標(biāo) 共一百一十六頁(yè)3一、使用(shyng)對(duì)話框共一百一十六頁(yè)對(duì)話框是Windows應(yīng)用程序中一種常用的資源主要功能是輸出信息和接收用戶的輸入數(shù)據(jù)。對(duì)話框和控件控件是嵌入在對(duì)話框中的一個(gè)特殊的小窗口,用于完成不同的輸入、輸出功能。對(duì)話框依靠控件與用戶進(jìn)行信息交互顯示提示信息:例如程序(chngx)啟動(dòng)時(shí)顯示版權(quán)、顯示進(jìn)度信息接收用戶輸入的數(shù)據(jù)共一百一十六頁(yè)在MFC中,對(duì)話框的功能(gngnng)被封裝成CDialog類(lèi),CDialog類(lèi)是CWnd類(lèi)的派生類(lèi)。CDialog類(lèi)的派生(pishng)關(guān)系如下所示:CObject CCmd
3、Target CWnd CDialog我們?cè)诔绦蛑袆?chuàng)建的對(duì)話框類(lèi)是CDialog類(lèi)的派生類(lèi) 共一百一十六頁(yè)對(duì)話框可以作為(zuwi)一個(gè)程序的主窗口:基于對(duì)話框的應(yīng)用程序?qū)υ捒蚩梢酝ㄟ^(guò)菜單命令或工具欄按鈕打開(kāi)共一百一十六頁(yè)對(duì)話框創(chuàng)建和使用:首先創(chuàng)建對(duì)話框資源:指定對(duì)話框本身的屬性(如大小、位置、風(fēng)格、類(lèi)型等),添加(tin ji)控件并設(shè)置控件屬性;再創(chuàng)建一個(gè)基于該對(duì)話框資源的對(duì)話框類(lèi):規(guī)定對(duì)話框和對(duì)話框中每個(gè)控件的行為(編寫(xiě)消息響應(yīng)函數(shù))包含對(duì)話框類(lèi)頭文件,聲明對(duì)話框類(lèi)對(duì)象并使用共一百一十六頁(yè)1、添加(tin ji)對(duì)話框資源 在項(xiàng)目工作區(qū)鼠標(biāo)右擊資源(zyun)項(xiàng)Dialog,從彈出式菜單
4、中選擇“Insert Dialog”命令項(xiàng)。共一百一十六頁(yè)在對(duì)話框資源的非控件區(qū)域點(diǎn)擊右鍵在彈出的快捷菜單中選擇Properties,在彈出的信息欄中修改(xigi)對(duì)話框?qū)傩?、對(duì)話框?qū)傩?shxng)編輯共一百一十六頁(yè)3、創(chuàng)建(chungjin)對(duì)話框類(lèi):在對(duì)話框資源的非控件區(qū)域雙擊鼠標(biāo),或者點(diǎn)擊右鍵在彈出的快捷菜單中選擇Add Class,將彈出類(lèi)添加向?qū)?duì)話框在類(lèi)向?qū)е休斎腩?lèi)名(li mn),點(diǎn)擊Finish按鈕完成類(lèi)的添加對(duì)話框資源ID共一百一十六頁(yè)3、創(chuàng)建(chungjin)對(duì)話框類(lèi):在對(duì)話框資源的非控件區(qū)域雙擊鼠標(biāo),或者點(diǎn)擊右鍵在彈出的快捷菜單中選擇Add Class,將彈出類(lèi)添
5、加向?qū)?duì)話框通過(guò)對(duì)話框類(lèi)的成員函數(shù)(hnsh)可對(duì)對(duì)話框進(jìn)行管理共一百一十六頁(yè)對(duì)話框的常用成員函數(shù)CDialog:CDialog() 通過(guò)調(diào)用派生類(lèi)構(gòu)造函數(shù),根據(jù)對(duì)話框資源模板(mbn)定義一個(gè)對(duì)話框。CDialog:DoModal() 激活模態(tài)對(duì)話框,顯示對(duì)話框窗口。CDialog:Create() 根據(jù)對(duì)話框資源模板創(chuàng)建非模態(tài)對(duì)話框窗口。如果對(duì)話框不是Visible屬性,還需通過(guò)調(diào)用CWnd:ShowWindow()函數(shù)顯示非模態(tài)對(duì)話框窗口。CDialog:OnOk() 單擊OK按鈕時(shí)調(diào)用該函數(shù),接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。CDialog:OnCancel() 單擊Cancel按鈕或按
6、Esc鍵時(shí)調(diào)用該函數(shù),不接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。共一百一十六頁(yè)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:DestroyWindow() 關(guān)閉并銷(xiāo)毀非模態(tài)對(duì)話框CWnd:UpdateData() 通過(guò)調(diào)用DoDataExchange()設(shè)置或獲取對(duì)話框控件的數(shù)據(jù)CWnd:DoDataExchange()
7、:被UpdateData()調(diào)用以實(shí)現(xiàn)(shxin)對(duì)話框數(shù)據(jù)交換,不能直接調(diào)用。共一百一十六頁(yè)CWnd:GetWindowText() 獲取對(duì)話框窗口的標(biāo)題CWnd:SetWindowText() 修改對(duì)話框窗口的標(biāo)題CWnd:GetDlgItemText() 獲取對(duì)話框中控件的文本內(nèi)容CWnd:SetDlgItemText() 設(shè)置(shzh)對(duì)話框中控件的文本內(nèi)容CWnd:GetDlgItem() 獲取控件或子窗口的指針CWnd:MoveWindow() 用于移動(dòng)對(duì)話框窗口CWnd:EnableWindow() 使窗口處于禁用或可用狀態(tài)共一百一十六頁(yè)4、為對(duì)話框添加(tin ji)控件:
8、通過(guò)(tnggu)Toolbox信息欄為對(duì)話框添加控件共一百一十六頁(yè)在控件上右鍵點(diǎn)擊(din j),在彈出快捷菜單中選擇Add Variable5、添加與控件關(guān)聯(lián)的成員(chngyun)變量注意:只有為對(duì)話框資源添加了對(duì)話框類(lèi)之后,才能為控件添加關(guān)聯(lián)的成員變量共一百一十六頁(yè)在控件上右鍵點(diǎn)擊(din j),在彈出快捷菜單中選擇Add Variable5、添加與控件關(guān)聯(lián)(gunlin)的成員變量成員變量種類(lèi)成員變量數(shù)據(jù)類(lèi)型和名稱(chēng)共一百一十六頁(yè)成員變量種類(lèi)Control:關(guān)聯(lián)的成員變量是一個(gè)MFC控件類(lèi)對(duì)象,可以通過(guò)該對(duì)象訪問(wèn)控件類(lèi)的成員變量和調(diào)用控件類(lèi)的成員函數(shù),實(shí)現(xiàn)對(duì)控件行為的控制和管理;Val
9、ue:為該控件的某項(xiàng)屬性關(guān)聯(lián)一個(gè)成員變量,這意味著程序(chngx)關(guān)心的是控件中的值,而不是控件本身。這時(shí),需要指定成員變量數(shù)據(jù)類(lèi)型(一般的C+數(shù)據(jù)類(lèi)型或Visual C+自定義的數(shù)據(jù)類(lèi)型)5、添加與控件關(guān)聯(lián)(gunlin)的成員變量注意:可以為一個(gè)控件同時(shí)定義一個(gè)Control類(lèi)別的變量和一個(gè)Value類(lèi)別的變量這些變量都是作為對(duì)話框派生類(lèi)的成員變量為了在程序其它地方能夠直接訪問(wèn)添加的成員變量,它們都被聲明為public屬性。共一百一十六頁(yè)常用(chn yn)的MFC控件和控件類(lèi) MFC類(lèi)控 件CStatic靜態(tài)文本、圖片控件CEdit編輯框CButton按鈕、復(fù)選框、單選按鈕、組框CCo
10、mboBox組合框CListBox列表框CScrollBar滾動(dòng)條CSpinButtonCtrl旋轉(zhuǎn)按鈕CProgressCtrl進(jìn)度條CSliderCtrl滑塊CListCtrl列表視控件共一百一十六頁(yè)常用(chn yn)的MFC控件類(lèi) MFC類(lèi)控 件CTreeCtrl樹(shù)視控件CTabCtrl標(biāo)簽CAnimateCtrl動(dòng)畫(huà)控件CRichEditCtrl復(fù)合編輯框CDateTimeCtrl日期時(shí)間選取器CMonthCalCtrl日歷CComboBoxEx擴(kuò)展組合框CStatusBarCtrl狀態(tài)條控件CToolBarCtrl工具條控件CImageList圖像列表共一百一十六頁(yè)對(duì)于控件Valu
11、e類(lèi)型的成員變量,可以通過(guò)對(duì)話框數(shù)據(jù)交換DDX和驗(yàn)證DDV實(shí)現(xiàn)(shxin)數(shù)據(jù)輸入輸出對(duì)話框數(shù)據(jù)驗(yàn)證(ynzhng)DDV(Dialog Data Validation):對(duì)用戶輸入數(shù)據(jù)的有效性進(jìn)行驗(yàn)證對(duì)話框數(shù)據(jù)交換DDX(Dialog Data Exchange):實(shí)現(xiàn)控件與成員變量間的數(shù)據(jù)交換共一百一十六頁(yè)DDV使用方法:把對(duì)話框中一個(gè)編輯框和UINT型的成員變量m_nInput時(shí)指定它的最小值和最大值分別為0和100,則ClassWizard類(lèi)向?qū)⒃诔蓡T函數(shù)DoDataExchange()中添加以下DDV函數(shù)的調(diào)用語(yǔ)句:DDV_MinMaxUInt(pDX, m_nInput, 0,
12、 100); 程序運(yùn)行時(shí),如果用戶的輸入數(shù)據(jù)超出0100的范圍(fnwi),DDV將顯示一個(gè)提示信息對(duì)話框,提示用戶有效的輸入范圍。共一百一十六頁(yè)DDX使用(shyng)方法:調(diào)用UpdateData(TRUE)時(shí),MFC通過(guò)調(diào)用DDX函數(shù)將數(shù)據(jù)(shj)從控件傳遞到關(guān)聯(lián)的成員變量;調(diào)用UpdateData(FALSE)時(shí),MFC通過(guò)調(diào)用DDX函數(shù)將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)的的控件。共一百一十六頁(yè)注意:創(chuàng)建并顯示對(duì)話框時(shí),將自動(dòng)調(diào)用UpdateData(FALSE),將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)(gunlin)的控件,從而顯示在控件中。單擊OK按鈕將調(diào)用CDialog:OnOk()函數(shù),在OnO
13、K()中調(diào)用了UpdateData(TRUE),將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)的成員變量。 DDX就如同一條雙向通道,而方向控制開(kāi)關(guān)就是UpdateData()函數(shù)中的BOOL類(lèi)型參數(shù)是TRUE還是FALSE。共一百一十六頁(yè)6、使用(shyng)對(duì)話框用對(duì)話框類(lèi)聲明對(duì)象(注意:包含對(duì)話框類(lèi)頭文件)調(diào)用對(duì)話框類(lèi)的DoModal()成員函數(shù)創(chuàng)建(chungjin)并顯示模態(tài)對(duì)話框無(wú)模態(tài)對(duì)話框的使用請(qǐng)參考相關(guān)資料共一百一十六頁(yè)函數(shù)OnOK()、 OnCancel()與DoModal()的關(guān)系:對(duì)話框中一般都有ID為IDOK和IDCancel的按鈕單擊ID為IDOK的按鈕時(shí)調(diào)用CDialog:OnOK()函數(shù)
14、單擊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。用戶可以(ky)根據(jù)DoModal()的返回值做出不同的選擇。如: if (myDlg.DoModal() = = IDOK ) 共一百一十六頁(yè)對(duì)話框的初始化:可以在三個(gè)不同(b tn)的階段所調(diào)用的函數(shù)中進(jìn)行: (1)對(duì)話框類(lèi)構(gòu)造函數(shù); (2)WM_CREATE消息處理函數(shù); (3)WM
15、_INITDIALOG消息處理函數(shù)。 建議在消息WM_INITDIALOG的消息處理函數(shù)OnInitDialog()中進(jìn)行初始化在收到WM_INIT_ DIALOG消息時(shí),對(duì)話框的框架已創(chuàng)建,對(duì)話框中的每個(gè)控件也已建立起來(lái),但它們還沒(méi)有在屏幕上顯示此時(shí)自然可以設(shè)置或優(yōu)化對(duì)話框中各個(gè)控件的外觀、尺寸、位置以及其它屬性函數(shù)OnInitDialog()將被成員(chngyun)函數(shù)DoModal()調(diào)用。共一百一十六頁(yè)例 編寫(xiě)(binxi)SDI程序,通過(guò)菜單或工具欄彈出一個(gè)對(duì)話框設(shè)置圓的半徑,然后在客戶區(qū)完成圓形的繪制。添加對(duì)話框資源為對(duì)話框資源添加控件。添加一個(gè)(y )靜態(tài)文本控件,其Capti
16、on為“請(qǐng)輸入半徑”。添加一個(gè)Edit Box編輯框控件,其ID標(biāo)識(shí)為IDC_EDIT_ RADIUS,該控件用于接收用戶的輸入數(shù)據(jù)。添加與控件關(guān)聯(lián)的成員變量m_nRadius,其數(shù)據(jù)類(lèi)型為UINT。使用對(duì)話框數(shù)據(jù)驗(yàn)證DDV功能:m_nRadius的最小值5和最大值250。為對(duì)話框資源添加對(duì)話類(lèi):CRadiusDialog 共一百一十六頁(yè)為了在視圖對(duì)象中接收并存儲(chǔ)對(duì)話框編輯控件的值,在視圖類(lèi)CMysdiView中手工定義一個(gè)UINT類(lèi)型的成員變量m_nCViewRadius。利用菜單編輯器在“編輯”菜單增加(zngji)一個(gè)菜單項(xiàng)“輸入半徑(I)”,其ID標(biāo)識(shí)為ID_EDIT_INPUTRAD
17、IUS,Caption為“輸入半徑(&I).”。啟動(dòng)ClassWzard類(lèi)向?qū)?,在視圖類(lèi)中為ID_EDIT_INPUTRADIUS菜單項(xiàng)添加COMMAND消息處理函數(shù),在函數(shù)中添加代碼。共一百一十六頁(yè) void CMysdiView:OnEditInputradius() / TODO: Add your command handler code here CRadiusDialog dlg; / 定義一個(gè)對(duì)話框?qū)ο?dlg.m_nRadius=100;/ 設(shè)置編輯框顯示的初始值 if (dlg.DoModal()=IDOK) / 顯示對(duì)話框 m_nCViewRadius=dlg.m_nRad
18、ius; / 接收并存儲(chǔ)編輯框數(shù)據(jù) Invalidate(); / 刷新(shu xn)視圖 共一百一十六頁(yè) 3在視圖類(lèi)構(gòu)造函數(shù)CMysdiView:CMysdiView()中將成員變量m_nCViewRadius初始化為0。在函數(shù)CMysdiView:OnDraw()中添加如下畫(huà)圓的語(yǔ)句(yj):pDC-Ellipse(0, 0, 2*m_nCViewRadius, 2*m_nCViewRadius); 在視圖類(lèi)實(shí)現(xiàn)文件MysdiView.cpp的開(kāi)始位置加入包含對(duì)話框類(lèi)頭文件的語(yǔ)句: #include RadiusDialog.h”共一百一十六頁(yè)7、基于(jy)對(duì)話框的應(yīng)用程序可以直接利用
19、MFC AppWizard向?qū)?chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序;向?qū)⒆詣?dòng)完成:添加(tin ji)對(duì)話框資源為對(duì)話框資源添加對(duì)話框類(lèi),用對(duì)話框類(lèi)聲明對(duì)象通過(guò)對(duì)話框類(lèi)的DoModal()創(chuàng)建并顯示對(duì)話框,該對(duì)話框即為程序的主窗口程序編寫(xiě):添加控件,添加成員變量,添加消息響應(yīng)函數(shù)共一百一十六頁(yè)1執(zhí)行File|New|Project命令出現(xiàn)New Project對(duì)話框,選擇MFC|MFC Application項(xiàng),輸入程序名MyDialog,單擊OK按鈕。在隨后出現(xiàn)的Application type對(duì)話框窗口中選擇Dialog Based選項(xiàng),單擊Finish按鈕就創(chuàng)建了應(yīng)用程序項(xiàng)目,并在Develo
20、per Studio中打開(kāi)(d ki)了對(duì)話框編輯器和控件工具欄。2去掉對(duì)話框中標(biāo)題為“TODO: 在這里設(shè)置對(duì)話控制”的靜態(tài)文本控件,調(diào)整對(duì)話框大小,在成員函數(shù)CMyDialogDlg:OnPaint()中添加代碼。 共一百一十六頁(yè) void CMyDialogDlg:OnPaint() . . . . . . else CPaintDC dc(this); dc.SetBkMode(TRANSPARENT); dc.TextOut(20, 50, 這是一個(gè)(y )對(duì)話框應(yīng)用程序!); CDialog:OnPaint(); 共一百一十六頁(yè)8、提示信息對(duì)話框 提示信息對(duì)話框也稱(chēng)消息(xio x
21、i)對(duì)話框,用來(lái)顯示有關(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 lpCaption=NULL, UINT nType=MB_OK);
22、 MFC全局函數(shù),可以(ky)在程序中任何地方使用API函數(shù),可以在程序中任何地方使用CWnd類(lèi)的成員函數(shù),只能用于控件、對(duì)話框、窗口等一些窗口類(lèi)的成員函數(shù)中共一百一十六頁(yè)例:在程序中彈出如下圖所示的警告(jnggo)提示信息對(duì)話框并根據(jù)用戶選擇進(jìn)行相應(yīng)的處理:編寫(xiě)的代碼如下: int nChoice=MessageBox(文件復(fù)制(fzh)失敗!, 錯(cuò)誤, MB_ICONWARNING | MB_ABORTRETRYIGNORE ); switch(nChoice) case IDABORT: / 用戶按下終止按鈕. . . . . . caseIDRETRY: / 用戶按下重試按鈕. .
23、. . . . case IDIGNORE: / 用戶按下忽略按鈕. . . . . . 共一百一十六頁(yè)Windows將一些常用的對(duì)話框集成到操作系統(tǒng)中,作為Windows公用對(duì)話框庫(kù)Commdlg.dll的一部分用戶在程序中可以直接使用這些公用對(duì)話框,不必再創(chuàng)建對(duì)話框資源(zyun)和對(duì)話框類(lèi),減少了大量的編程工作。用戶還可以定制公用對(duì)話框的外觀和性能。為了在MFC應(yīng)用程序中使用公用對(duì)話框,MFC提供了封裝這些公用對(duì)話框的類(lèi)。這些公用對(duì)話框類(lèi)都是從CCommonDialog類(lèi)派生而來(lái),而CCommonDialog類(lèi)又是CDialog類(lèi)的派生類(lèi)。9、公用(gngyng)對(duì)話框共一百一十六頁(yè)公用
24、(gngyng)對(duì)話框 MFC公用對(duì)話框類(lèi) CColorDialog CFileDialog CFindReplaceDialog CFontDialog CPagesSetupDialog CPrintDialog COleDialog說(shuō) 明顏色設(shè)定對(duì)話框,選擇不同的顏色文件存取對(duì)話框,打開(kāi)或保存文件查找和替換對(duì)話框,查找和替換文本串字體設(shè)定對(duì)話框,選擇不同的字體。頁(yè)面設(shè)置對(duì)話框,設(shè)置頁(yè)碼、頁(yè)眉等標(biāo)準(zhǔn)的打印對(duì)話框,用于打印和打印設(shè)置該類(lèi)及其派生類(lèi)用于生成OLE對(duì)話框共一百一十六頁(yè)10、標(biāo)準(zhǔn)(biozhn)控件 Windows提供的控件分為兩類(lèi):標(biāo)準(zhǔn)控件和公共(gnggng)控件。標(biāo)準(zhǔn)控件:靜
25、態(tài)控件、編輯框、按鈕、列表框、組合框和滾動(dòng)條等。利用標(biāo)準(zhǔn)控件可滿足大部分用戶界面程序設(shè)計(jì)的要求。公共控件:滑塊、進(jìn)度條、列表視控件、樹(shù)視控件和標(biāo)簽控件等,利用公共控件實(shí)現(xiàn)應(yīng)用程序用戶界面風(fēng)格的多樣性。 共一百一十六頁(yè)用戶對(duì)控件操作時(shí)Windows產(chǎn)生控件消息并發(fā)送給父窗口(如對(duì)話框)。標(biāo)準(zhǔn)控件發(fā)送(f sn)WM_COMMAND控件通知消息,公共控件一般發(fā)送WM_NOTIFY控件通知消息,或WM_COMMAND消息。通過(guò)WM_COMMAND消息參數(shù)標(biāo)識(shí)發(fā)出消息的控件和具體的事件,消息參數(shù)中包含了控件的ID標(biāo)識(shí)和通知碼(區(qū)分消息種類(lèi),如BN_CLICKED單擊按鈕事件)程序員不必關(guān)心消息具體的發(fā)
26、送和接收,只需為控件消息添加響應(yīng)函數(shù),然后在響應(yīng)函數(shù)中編寫(xiě)具體的處理代碼。 共一百一十六頁(yè)控件的組織(zzh)添加或刪除控件設(shè)置控件屬性調(diào)整控件的大小同時(shí)選取多個(gè)控件:鼠標(biāo)框選,shift或ctrl+鼠標(biāo)點(diǎn)選復(fù)制控件:復(fù)制粘貼,ctrl+拖動(dòng)控件編排(binpi)控件:使用主菜單format下的各個(gè)子菜單測(cè)試對(duì)話框和控件的方法:按下Ctrl+T組合鍵就能測(cè)試對(duì)話框運(yùn)行時(shí)的界面效果。 共一百一十六頁(yè)控件的公共(gnggng)屬性項(xiàng) 目說(shuō) 明 ID控件的標(biāo)識(shí),對(duì)話框編輯器會(huì)為每一個(gè)加入的控件分配一個(gè)默認(rèn)的ID Caption控件的標(biāo)題,作為程序執(zhí)行時(shí)在控件位置上顯示的文本 Visible指明顯示對(duì)
27、話框時(shí)該控件是否可見(jiàn) Group用于指定一個(gè)控件組中的第一個(gè)控件 HelpID表示為該控件建立一個(gè)上下文相關(guān)的幫助標(biāo)識(shí)ID Disabled指定控件初始化時(shí)是否禁用 Tab Stop表示對(duì)話框運(yùn)行后該控件可以通過(guò)使用Tab鍵來(lái)獲取焦點(diǎn)共一百一十六頁(yè)1)靜態(tài)(jngti)控件靜態(tài)控件(Static control)是用來(lái)顯示一個(gè)文本串或圖形信息的控件,它包括靜態(tài)文本控件、圖片控件和組框。靜態(tài)文本控件用來(lái)顯示一般不需要變化的文本;圖片控件用來(lái)顯示邊框、矩形、圖標(biāo)或位圖等圖形;組框用來(lái)顯示一個(gè)文本標(biāo)題和一個(gè)矩形邊框,通常用來(lái)將一組控件組織(zzh)在一起。管理靜態(tài)文本控件和圖片控件的MFC類(lèi)是CSt
28、atic類(lèi),而管理組框的MFC類(lèi)是CButton類(lèi)。 共一百一十六頁(yè)所有靜態(tài)控件默認(rèn)的ID標(biāo)識(shí)都為IDC_STATIC,如果要為一個(gè)靜態(tài)控件添加成員變量或消息(xio xi)處理函數(shù),必須重新為它指定一個(gè)唯一的ID標(biāo)識(shí)。編程時(shí)用的最多是靜態(tài)文本控件,它被用來(lái)作為其它控件的標(biāo)題。每一個(gè)靜態(tài)文本控件最多可以顯示255個(gè)字符,可以使用“n”換行符。共一百一十六頁(yè)2)編輯(binj)框編輯框(Edit box)又稱(chēng)文本框或編輯控件,它一般與靜態(tài)文本控件一起使用,用于數(shù)據(jù)的輸入和輸出。編輯框提供(tgng)了完整的鍵盤(pán)輸入和編輯功能,可以輸入各種文本、數(shù)字或者口令。編輯框?yàn)橛脩籼峁┝肆己玫妮斎搿⑤敵龉δ?/p>
29、,能夠?qū)㈡I盤(pán)輸入的字符串轉(zhuǎn)化為要求的數(shù)據(jù)類(lèi)型(DDX),并驗(yàn)證它是否符合輸入要求(DDV)。共一百一十六頁(yè)編輯框常用屬性: Multiline設(shè)置單行或多行編輯Align text設(shè)置文本對(duì)齊方式Number表示只能輸入數(shù)字(shz)Password表示鍵入編輯框的字符都將顯示為“*”Uppercase或Lowercase表示鍵入編輯框的字符全部轉(zhuǎn)換成大寫(xiě)或小寫(xiě)形式Read-Only表示只能輸出數(shù)據(jù)。當(dāng)編輯框的文本被修改,會(huì)向父窗口發(fā)送消息,可以利用ClassWizard在對(duì)話框類(lèi)中添加消息處理函數(shù)。編輯框發(fā)送消息有:EN_CHANGEEN_KILLFOCUSEN_SETFOCUSEN_MAX
30、TEXTEN_UPDATE共一百一十六頁(yè)例 編寫(xiě)一個(gè)SDI應(yīng)用程序Password,程序啟動(dòng)后首先彈出一個(gè)如圖所示的用戶(yngh)身份確認(rèn)對(duì)話框,當(dāng)用戶(yngh)鍵入正確的口令后才能進(jìn)入程序的主界面。 共一百一十六頁(yè)3)按鈕按鈕(Button)包括按鍵按鈕、單選按鈕和復(fù)選框等3種類(lèi)型,由MFC的CButton類(lèi)封裝,按鍵按鈕用來(lái)執(zhí)行(zhxng)某個(gè)命令,也被稱(chēng)為命令按鈕;單選按鈕用于在一組互相排斥的選項(xiàng)中選擇其中一項(xiàng);復(fù)選框用于在一組選項(xiàng)中選擇其中一項(xiàng)或多項(xiàng);共一百一十六頁(yè)按鍵(n jin)按鈕 幾乎所有的對(duì)話框都使用簡(jiǎn)單的按鍵按鈕,如OK按鈕。通過(guò)設(shè)置Default button屬性可
31、將按鈕設(shè)置成默認(rèn)按鈕。對(duì)話框顯示時(shí)按下Enter鍵將執(zhí)行該按鈕的命令功能。一個(gè)(y )對(duì)話框只能有一個(gè)(y )Default button默認(rèn)按鈕,通常情況下將OK按鈕設(shè)置為默認(rèn)按鈕。其它屬性:Owner draw利用WM_DRAWITEM消息處理函數(shù)定制按鈕的外觀,Icon表示用圖標(biāo)代替原來(lái)的文本標(biāo)題,Bitmap表示用位圖代替原來(lái)的文本標(biāo)題,Client edge、Static edge、Modal frame用于設(shè)置按鈕的外觀。 共一百一十六頁(yè)單選按鈕一般將一組單選按鈕放在一個(gè)組框中在一組單選按鈕中,第一個(gè)(Tab鍵順序)按鈕最重要,其ID值可用于在對(duì)話框中為控件建立關(guān)聯(lián)的成員變量必須為
32、同組中的第一個(gè)單選按鈕設(shè)置(shzh)Group屬性,而同組的其它單選按鈕不可再設(shè)置Group屬性。 共一百一十六頁(yè)復(fù)選框不同于單選按鈕,在一組復(fù)選框中每次可以同時(shí)選擇多項(xiàng)除了選中和沒(méi)選中兩種狀態(tài),復(fù)選框還有第三種狀態(tài),此時(shí)選中標(biāo)記顯示為暗色,它表示該項(xiàng)不可以由用戶(yngh)選擇通過(guò)設(shè)置Tri-state屬性得到這種三態(tài)復(fù)選框。另外,我們可以通過(guò)設(shè)置Push-like屬性使單選按鈕或復(fù)選框具有普通按鈕的外觀。 共一百一十六頁(yè)按鈕控件發(fā)送(f sn)的消息:按鈕控件只能發(fā)送通知(tngzh)碼為BN_CLICKED(單擊按鈕)和BN_DOUBLECLICKED(雙擊按鈕)的WM_COMMAND
33、消息,我們經(jīng)常需要編寫(xiě)按鈕的BN_CLICKED消息處理函數(shù)。CButton類(lèi)提供了一些成員函數(shù)實(shí)現(xiàn)對(duì)按鈕控件對(duì)象的控制和管理,如利用成員函數(shù)GetCheck()或SetCheck()獲取或設(shè)置單選按鈕或復(fù)選框的當(dāng)前狀態(tài)。 共一百一十六頁(yè)例 編寫(xiě)一個(gè)對(duì)話框應(yīng)用程序ColrButn,對(duì)話框中有兩個(gè)用于選擇顏色模式的單選按鈕和三個(gè)用于選擇具體顏色的復(fù)選框,只有在彩色模式下才能選擇三種不同顏色的組合。當(dāng)用戶單擊“應(yīng)用”按鈕,在對(duì)話框右側(cè)繪制指定(zhdng)顏色的矩形。 共一百一十六頁(yè)4)列表框Windows提供了幾個(gè)列表類(lèi)型控件,如列表框、組合框、列表視控件和樹(shù)視控件,其中列表框是一種最簡(jiǎn)單的列表
34、類(lèi)型控件。列表框(List box)是一個(gè)列出了一些文本項(xiàng)的窗口,常用來(lái)顯示類(lèi)型相同的一系列清單,如文件、字體和用戶等。與復(fù)選框類(lèi)似,用戶可以選擇其中一項(xiàng)或多項(xiàng),但同時(shí)列表框中選項(xiàng)的數(shù)目和內(nèi)容可以動(dòng)態(tài)變化,用戶可往列表框中添加(tin ji)或刪除某些選項(xiàng)。列表框有單選Single、多選Multiple、擴(kuò)展多選Extended、不選None四種風(fēng)格,通過(guò)控件的Selection屬性設(shè)置。 共一百一十六頁(yè)當(dāng)列表框中發(fā)生了某個(gè)事件,列表框就會(huì)向其父窗口發(fā)送一條通知消息(xio xi)。列表框常用的通知消息(xio xi)有:用戶雙擊列表框中的列表項(xiàng)時(shí)發(fā)送消息LBN_DBLCLK列表框失去鍵盤(pán)輸入
35、焦點(diǎn)時(shí)發(fā)送消息LBN_KILLFOCUS列表框獲得鍵盤(pán)輸入焦點(diǎn)時(shí)發(fā)送消息LBN_SETFOCUS列表框中的當(dāng)前選擇項(xiàng)發(fā)生改變時(shí)發(fā)送消息LBN_SELCHANGE。封裝列表框控件的MFC類(lèi)是CListBox類(lèi),在程序中可以通過(guò)添加control類(lèi)型的成員變量,并調(diào)用CListBox類(lèi)成員函數(shù)來(lái)實(shí)現(xiàn)列表項(xiàng)的添加、刪除、修改和獲取等操作。共一百一十六頁(yè)例 編寫(xiě)一個(gè)對(duì)話框應(yīng)用程ExmpList,對(duì)話框中有一個(gè)列表框,當(dāng)用戶單擊列表框中的一個(gè)列表項(xiàng)(一個(gè)國(guó)家)時(shí),在四個(gè)編輯框分別顯示指定國(guó)家的名稱(chēng)、首都、面積和人口。單擊“添加”按鈕時(shí),“國(guó)家”編輯框中的文本將被添加到列表框中;單擊“刪除(shnch)”
36、按鈕時(shí),當(dāng)前的列表項(xiàng)將被刪除(shnch)。共一百一十六頁(yè)5)組合(zh)框組合框(Combo box)吸收(xshu)了列表框和編輯框的優(yōu)點(diǎn)可以顯示列表項(xiàng)供用戶進(jìn)行選擇,允許用戶輸入新的列表項(xiàng)。實(shí)質(zhì)上,組合框是多個(gè)控件的組合,包括編輯框、列表框和按鈕。通過(guò)設(shè)置組合框的Type屬性可以使組合框有簡(jiǎn)單組合框(Simple)、下拉組合框(Dropdown)和下拉列表框(Drop List)三種形式共一百一十六頁(yè)組合(zh)框控件的Data屬性: 與編輯框或列表框相比,組合框有一個(gè)新的功能屬性,可以(ky)通過(guò)組合框控件的Data屬性添加初始的列表項(xiàng),各個(gè)列表項(xiàng)用分號(hào)隔開(kāi)。也可以為組合框關(guān)聯(lián)cont
37、rol類(lèi)型的成員變量,并在在對(duì)話框類(lèi)的初始化成員函數(shù)OnInitDialog()中編寫(xiě)代碼添加列表項(xiàng)。 共一百一十六頁(yè)組合(zh)框發(fā)送的消息 : 關(guān)閉組合框消息CBN_CLOSEUP打開(kāi)列表框消息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)組合框的編輯框中的文本被修改且新的文本顯示(xinsh)之后發(fā)送消息CBN_EDITCHANGE當(dāng)編輯框中的文本被修改且
38、新的文本顯示之前發(fā)送消息CBN_EDITUPDATE組合框失去鍵盤(pán)輸入焦點(diǎn)消息CBN_KILLFOCUS組合框獲得鍵盤(pán)輸入焦點(diǎn)消息CBN_SETFOCUS。 共一百一十六頁(yè)例 編寫(xiě)一個(gè)單文檔應(yīng)用程序ExmpCombo,執(zhí)行“測(cè)試控件|組合框”菜單命令(mng lng)時(shí)打開(kāi)一個(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ì)話框的右部。 共一百一十六頁(yè)二、MFC圖形(txng)繪制共一百一十六頁(yè)紙筆畫(huà)刷顏料(ynlio)畫(huà)畫(huà)
39、需要(xyo)什么?顯示器打印機(jī)投影儀彩色筆CPen彩色畫(huà)刷CBrush輸出設(shè)備共一百一十六頁(yè)圖形(txng)設(shè)備接口(Graphics Device Interface,GDI)不同圖形設(shè)備的操作不一樣(驅(qū)動(dòng)(q dn)不一樣),同類(lèi)圖形設(shè)備、不用品牌的操作也不一樣;程序設(shè)計(jì)者難道要針對(duì)每種情況編寫(xiě)程序?如何使繪圖程序適用于各種圖形設(shè)備?GDI共一百一十六頁(yè)1、GDIGDI通過(guò)不同設(shè)備提供的驅(qū)動(dòng)程序?qū)⒗L圖語(yǔ)句轉(zhuǎn)換為對(duì)應(yīng)的繪圖指令避免(bmin)了繪圖語(yǔ)句直接對(duì)硬件進(jìn)行操作,從而實(shí)現(xiàn)設(shè)備無(wú)關(guān)性應(yīng)用程序設(shè)備環(huán)境DCGDI設(shè)備驅(qū)動(dòng)程序物理設(shè)備顯示器打印機(jī)共一百一十六頁(yè)2、設(shè)備(shbi)環(huán)境(De
40、vice Context)應(yīng)用程序不直接面向顯示器等物理設(shè)備,而是面向虛擬邏輯設(shè)備:設(shè)備環(huán)境 (DC:Device Context)。設(shè)備環(huán)境也稱(chēng)設(shè)備描述表或設(shè)備上下文Windows管理的一個(gè)數(shù)據(jù)結(jié)構(gòu)保存了繪圖操作中一些需要共同(gngtng)設(shè)置的信息,如當(dāng)前的畫(huà)筆、畫(huà)刷、字體和位圖等圖形對(duì)象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。形象地說(shuō):設(shè)備環(huán)境提供畫(huà)布和繪畫(huà)工具,應(yīng)用程序可以使用這些工具在畫(huà)布上面繪制點(diǎn)、線、圓和文本。共一百一十六頁(yè)MFC編程時(shí)有哪些設(shè)備(shbi)環(huán)境?CDC:其它設(shè)備環(huán)境類(lèi)的基類(lèi),可以訪問(wèn)設(shè)備屬性和設(shè)置繪圖屬性。CDC類(lèi)對(duì)GDI的所有繪圖函數(shù)進(jìn)行了封裝。C
41、PaintDC:是OnPaint()函數(shù)使用的設(shè)備環(huán)境類(lèi)。如果添加WM_PAINT消息處理函數(shù)OnPaint(),就需要使用CPaintDC類(lèi)來(lái)定義一個(gè)設(shè)備環(huán)境對(duì)象。CClientDC:客戶區(qū)設(shè)備環(huán)境。在客戶區(qū)實(shí)時(shí)繪圖時(shí)需要定義的客戶區(qū)設(shè)備環(huán)境。CWindowDC:代表(dibio)了整個(gè)程序窗口設(shè)備環(huán)境,可以在整個(gè)窗口區(qū)域繪圖(包含標(biāo)題欄,工具條,狀態(tài)欄等)。共一百一十六頁(yè)各種( zhn)的區(qū)別使用的坐標(biāo)系是否可被打印一般在哪里使用繼承關(guān)系邏輯坐標(biāo)系OnDraw設(shè)備環(huán)境基類(lèi)邏輯坐標(biāo)系WM_PAINTOnPaintCDC的派生類(lèi)設(shè)備坐標(biāo)系其它函數(shù)CDC的派生類(lèi)設(shè)備坐標(biāo)系所有函數(shù)CDC的派生類(lèi)C
42、WindowDCCDCCPaintDCCClientDC共一百一十六頁(yè)怎樣獲取(huq)這些設(shè)備環(huán)境?CDC主要用于OnDraw函數(shù)(hnsh)里;CPaintDC主要用于WM_PAINT消息的響應(yīng)函數(shù)OnPaint里;CClientDC用于其它函數(shù)里;CWindowDC;共一百一十六頁(yè)SDK程序中怎樣(znyng)獲取這些設(shè)備環(huán)境?WM_PAINT消息(xio xi)處理函數(shù)中通過(guò)調(diào)用API函數(shù)BeginPaint()獲取設(shè)備環(huán)境,在消息處理函數(shù)返回前調(diào)用API函數(shù)EndPaint()釋放設(shè)備環(huán)境。在其他函數(shù)中通過(guò)調(diào)用API函數(shù)GetDC()獲取設(shè)備環(huán)境,調(diào)用API函數(shù)ReleaseDC()
43、釋放設(shè)備環(huán)境。共一百一十六頁(yè)hdc = BeginPaint(hWnd, &ps); /WM_PAINT RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, 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(hWn
44、d, hdc);共一百一十六頁(yè)3、GDI坐標(biāo)系Windows坐標(biāo)系分為(fn wi)邏輯坐標(biāo)系和設(shè)備坐標(biāo)系兩種,GDI支持這兩種坐標(biāo)系。一般而言,GDI的文本和圖形輸出函數(shù)使用邏輯坐標(biāo),而在客戶區(qū)移動(dòng)或按下鼠標(biāo)的鼠標(biāo)位置是采用設(shè)備坐標(biāo)。邏輯坐標(biāo)系是面向DC的坐標(biāo)系,這種坐標(biāo)不考慮具體的設(shè)備類(lèi)型,在繪圖時(shí),Windows會(huì)根據(jù)當(dāng)前設(shè)置的映射模式將邏輯坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo)。設(shè)備坐標(biāo)系是面向物理設(shè)備的坐標(biāo)系,這種坐標(biāo)以像素或設(shè)備所能表示的最小長(zhǎng)度單位為單位,X軸方向向右,Y軸方向向下。設(shè)備坐標(biāo)系的原點(diǎn)位置(0, 0)不限定在設(shè)備顯示區(qū)域的左上角。共一百一十六頁(yè)4、設(shè)備(shbi)坐標(biāo)系設(shè)備坐標(biāo)系分為屏
45、幕坐標(biāo)系、窗口坐標(biāo)系和客戶區(qū)坐標(biāo)系三種相互獨(dú)立的坐標(biāo)系。坐標(biāo)之間的相互轉(zhuǎn)換(zhunhun)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)之間的相互轉(zhuǎn)換。共一百一十六頁(yè)映射(yngsh)模式映射模式邏輯單位坐標(biāo)系設(shè)定MM_TEXT一個(gè)像素X軸正方向朝右,Y軸正方向朝下MM_LOMETRIC0.1毫米X軸正方向朝右,Y軸正方向朝上MM_HIMETRIC0.01毫米X軸正方向朝右,Y軸正方向朝上MM_LOENG
46、LISH0.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軸比例任意共一百一十六頁(yè)坐標(biāo)(zubio)原點(diǎn)通過(guò)調(diào)用函數(shù)CDC:SetWindowOrg()設(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ū)
47、域的原點(diǎn)。除了映射模式,窗口和視口也是決定一個(gè)點(diǎn)的邏輯坐標(biāo)如何轉(zhuǎn)換為設(shè)備坐標(biāo)的一個(gè)因素(yn s)。一個(gè)點(diǎn)的邏輯坐標(biāo)按照如下式子轉(zhuǎn)換為設(shè)備坐標(biāo): 設(shè)備(視口)坐標(biāo) = 邏輯坐標(biāo) 窗口原點(diǎn)坐標(biāo) + 視口原點(diǎn)坐標(biāo)共一百一十六頁(yè)例 分別在OnDraw()函數(shù)(hnsh)中添加如下代碼,設(shè)置不同的窗口原點(diǎn)和視口原點(diǎn),結(jié)果有什么不同。 (1)pDC-SetMapMode(MM_TEXT); pDC-Rectangle(CRect(50, 50, 100, 100);(2)pDC-SetMapMode(MM_TEXT); pDC-SetWindowOrg(50, 50); /屏幕左上角點(diǎn)坐標(biāo)(zubio)
48、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, 50);pDC-Rectangle(CRect(50, 50, 100, 100);共一百一十六頁(yè)共一百一十六頁(yè)5、OnPaint 與OnDraw的區(qū)別(qbi)和聯(lián)系簡(jiǎn)單
49、的說(shuō)OnPaint只是(zhsh)負(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消息,也是是窗口重繪消息 共一百一十六頁(yè)獲得DC后,就可以進(jìn)行(jnxng)各種圖形操作!共一百一十六頁(yè)6、設(shè)置(shzh)顏色(1)Windows用COLORREF類(lèi)型的數(shù)據(jù)存放顏色,它是一個(gè)32位整數(shù)。0 x000000000 x00FFFFFF共16777216種顏色。顏色由
50、紅、綠、藍(lán)三種基本顏色組成,COLORREF類(lèi)型數(shù)據(jù)的低位字節(jié)(z 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)分量值。00000000000000001111111100000000共一百一十六頁(yè)標(biāo)準(zhǔn)(biozhn)彩色的RGB值顏色RGB分量值顏色RGB分量值淺紅255,0,0深紅128,0,0淺綠0,255,0深綠0,128,0淺藍(lán)0,0,255深藍(lán)0,0,128淺黃255,255,
51、0深黃128,128,0淺青0,255,255深青0,128,128紫色255,0,255灰色192,192,192白色255,255,255黑色0,0,0共一百一十六頁(yè)定義(dngy)顏色變量/定義(dngy)綠色COLORREF rgbBkClr=RGB(0,255,0); /上句等同于/COLORREF rgbBkClr=65280; 共一百一十六頁(yè)7、使用(shyng)畫(huà)筆 CPen 3 還原(hun yun)畫(huà)筆2 選擇畫(huà)筆1 創(chuàng)建畫(huà)筆畫(huà)圖開(kāi)始CPen的構(gòu)造函數(shù)CPen的CreatePen函數(shù)設(shè)備環(huán)境類(lèi)的SelectObject函數(shù)設(shè)備環(huán)境類(lèi)的SelectObject函數(shù)CPen的D
52、eleteObject 函數(shù)畫(huà)圖結(jié)束畫(huà)圖共一百一十六頁(yè)1)創(chuàng)建(chungjin)畫(huà)筆方法1:利用(lyng)構(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)建的畫(huà)筆,如果以后不再使用,需要進(jìn)行銷(xiāo)毀。銷(xiāo)毀方式是調(diào)用DeleteObject函數(shù)。pen.DeleteObject();畫(huà)筆寬度只有在實(shí)線時(shí)才有效!其它樣式的線只能是1個(gè)像素寬!共一百一十六頁(yè)84畫(huà)筆(hu b)樣式樣 式說(shuō) 明樣 式說(shuō) 明PS_
53、SOLID實(shí)線PS_DASHDOTDOT雙點(diǎn)劃線PS_DOT點(diǎn)線PS_NULL空的邊框PS_DASH虛線PS_INSIDEFRAME邊框?qū)嵕€PS_DASHDOT點(diǎn)劃線共一百一十六頁(yè)2)選擇(xunz)畫(huà)筆使用設(shè)備(shbi)環(huán)境類(lèi)的成員函數(shù)SelectObject來(lái)選擇畫(huà)筆作為當(dāng)前使用的畫(huà)筆。返回值為舊畫(huà)筆的指針。CPen penNew(PS_SOLID, 4, RGB(255,0,0);CPen* pPenOld=pDC-SelectObject(&penNew);共一百一十六頁(yè)3)還原(hun yun)畫(huà)筆仍然使用(shyng)SelectObject函數(shù)pDC-SelectObject(
54、pPenOld);共一百一十六頁(yè)使用(shyng)畫(huà)筆的例子/畫(huà)圖開(kāi)始(kish)/創(chuàng)建畫(huà)筆CPen penRed;penRed.CreatePen(PS_SOLID, 5, RGB(255, 0, 0);/選擇新畫(huà)筆,保存舊畫(huà)筆CPen *pOldPen = pDC-SelectObject(&penRed);/畫(huà)圖:畫(huà)一條直線pDC-MoveTo(100, 50);pDC-LineTo(300, 150);/還原畫(huà)筆pDC-SelectObject(pOldPen);/銷(xiāo)毀畫(huà)筆penRed.DeleteObject();/畫(huà)圖結(jié)束/共一百一十六頁(yè)備注(bizh)系統(tǒng)默認(rèn)的畫(huà)筆是實(shí)線、1像素
55、(xin s)寬、黑色。CDC函數(shù)MoveTo(int x, int y) /直線的起點(diǎn)LineTo(int x, int y)/直線的終點(diǎn)以當(dāng)前的畫(huà)筆畫(huà)一條直線。共一百一十六頁(yè)8、使用(shyng)畫(huà)刷 CBrush畫(huà)刷能用來(lái)(yn li)填充封閉的區(qū)域3 還原畫(huà)刷2 選擇畫(huà)刷1 創(chuàng)建畫(huà)刷畫(huà)圖開(kāi)始CBrush的構(gòu)造函數(shù)CBrush的3種Create函數(shù)設(shè)備環(huán)境類(lèi)的SelectObject函數(shù)設(shè)備環(huán)境類(lèi)的SelectObject函數(shù)CBrush的DeleteObject 函數(shù)畫(huà)圖結(jié)束畫(huà)圖共一百一十六頁(yè)畫(huà)刷的類(lèi)型(lixng)畫(huà)刷有三種基本類(lèi)型(lixng):純色畫(huà)刷、陰影畫(huà)刷和圖案畫(huà)刷.共一百
56、一十六頁(yè)1)創(chuàng)建(chungjin)畫(huà)刷(構(gòu)造函數(shù)方式和Create函數(shù)方式)創(chuàng)建(chungjin)純色畫(huà)刷CBrush brush1(RGB(255,0,0);/CBrush brush1; /brush1. CreateSolidBrush(RGB(255,0,0);創(chuàng)建陰影畫(huà)刷CBrush brush2(HS_DIAGCROSS, RGB(255,0,0);/CBrush brush2;/brush2. CreateHatchBrush(HS_DIAGCROSS, RGB(255, 0, 0);創(chuàng)建圖案畫(huà)刷CBitmap bmp;bmp.LoadBitmap(IDB_BRUSH);CB
57、rush brush3(&bmp);/CBrush brush3;/brush3. CreatePatternBrush(&bmp);共一百一十六頁(yè)陰影(ynyng)畫(huà)刷的樣式CBrush brush2(HS_DIAGCROSS, RGB(255,0,0);HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONALHS_HORIZONTALHS_VERTICAL共一百一十六頁(yè)2)選擇(xunz)畫(huà)刷使用設(shè)備環(huán)境類(lèi)的成員函數(shù)(hnsh)SelectObject來(lái)選擇畫(huà)刷作為當(dāng)前使用的畫(huà)刷。返回值為舊畫(huà)刷的指針。CBrush brushRed(RGB(255,0,0)
58、;CBrush* pBrushOld=pDC-SelectObject(&brushRed);共一百一十六頁(yè)3)還原(hun yun)畫(huà)刷仍然(rngrn)使用SelectObject函數(shù)pDC-SelectObject(pBrushOld);共一百一十六頁(yè)使用(shyng)畫(huà)刷的例子/畫(huà)圖開(kāi)始/創(chuàng)建畫(huà)刷CBrush brush;brush.CreateHatchBrush(HS_VERTICAL , RGB(255, 0, 0);/保存舊畫(huà)刷CBrush *pOldBrush = pDC-SelectObject(&brush);/畫(huà)圖:畫(huà)矩形(jxng)pDC-Rectangle(50,
59、50, 200, 200);/還原畫(huà)刷pDC-SelectObject(pOldBrush);/銷(xiāo)毀畫(huà)刷brush.DeleteObject();/畫(huà)刷結(jié)束/共一百一十六頁(yè)備注(bizh)系統(tǒng)默認(rèn)(mrn)畫(huà)刷為純色、白色的畫(huà)刷。CDC函數(shù)Rectangle(int x1, int y1, int x2, int y2)是以當(dāng)前的畫(huà)筆畫(huà)矩形邊框,內(nèi)部以當(dāng)前畫(huà)刷填充x1, y1x2, y2共一百一十六頁(yè)9、使用系統(tǒng)(xtng)定義的畫(huà)筆和畫(huà)刷(堆對(duì)象) Windows預(yù)定義了一些簡(jiǎn)單風(fēng)格的GDI對(duì)象,用戶使用(shyng)這些GDI對(duì)象時(shí),無(wú)需自己創(chuàng)建它們,可以直接將它們選入當(dāng)前的設(shè)備環(huán)境,這些
60、GDI對(duì)象稱(chēng)作為堆(Stock)對(duì)象。堆對(duì)象包括堆畫(huà)筆、堆畫(huà)刷和堆字體等。共一百一十六頁(yè)堆畫(huà)筆、畫(huà)刷的樣式(yngsh)及說(shuō)明樣 式說(shuō) 明樣 式說(shuō) 明BLACK_PEN黑色畫(huà)筆WHITE_PEN白色畫(huà)筆NULL_PEN空畫(huà)筆BLACK_BRUSH黑色畫(huà)刷WHITE_BRUSH白色畫(huà)刷NULL_BRUSH空畫(huà)刷GRAY_BRUSH灰色畫(huà)刷DKGRAY_BRUSH深灰色畫(huà)刷LTGRAY_BRUSH淺灰色畫(huà)刷HOLLOW_BRUSH虛畫(huà)刷共一百一十六頁(yè)使用(shyng)堆對(duì)象函數(shù)CDC:SelectStockObject()可以選擇一個(gè)(y )堆對(duì)象繪圖工具,以下代碼將堆畫(huà)筆和堆畫(huà)刷作為當(dāng)前的繪圖工
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 車(chē)輛維修與改裝
- 2025年度藝術(shù)創(chuàng)作場(chǎng)地借用與版權(quán)保護(hù)合同3篇
- 《市場(chǎng)定性預(yù)測(cè)方法》課件
- 2025年度綠色節(jié)能型住宅門(mén)窗安裝施工合同范本3篇
- 2025年大連二手房房產(chǎn)買(mǎi)賣(mài)合同違約責(zé)任明確4篇
- 二零二五年度農(nóng)業(yè)生態(tài)除草服務(wù)項(xiàng)目合同3篇
- 礦井瓦斯災(zāi)害防治和防滅火
- 個(gè)性心理特征與安全概述
- 2024配音作品發(fā)布合同模板及推廣方式2篇
- 2025年涂料工程施工安全責(zé)任合同范本3篇
- 春節(jié)行車(chē)安全常識(shí)普及
- 電機(jī)維護(hù)保養(yǎng)專(zhuān)題培訓(xùn)課件
- 汽車(chē)租賃行業(yè)利潤(rùn)分析
- 春節(jié)拜年的由來(lái)習(xí)俗來(lái)歷故事
- 2021火災(zāi)高危單位消防安全評(píng)估導(dǎo)則
- 佛山市服務(wù)業(yè)發(fā)展五年規(guī)劃(2021-2025年)
- 房屋拆除工程監(jiān)理規(guī)劃
- 醫(yī)院保安服務(wù)方案(技術(shù)方案)
- 高效能人士的七個(gè)習(xí)慣:實(shí)踐應(yīng)用課程:高級(jí)版
- 小數(shù)加減法計(jì)算題100道
- 通信電子線路(哈爾濱工程大學(xué))智慧樹(shù)知到課后章節(jié)答案2023年下哈爾濱工程大學(xué)
評(píng)論
0/150
提交評(píng)論