版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教材目錄1第1章VisualC++2019開發(fā)環(huán)境第2章MFC應用程序第3章圖形與文本第4章菜單、工具欄與狀態(tài)欄第5章對話框第6章Windows常用控件第7章文檔與視圖第8章打印編程第9章動態(tài)鏈接庫編程第10章多線程編程第11章數(shù)據(jù)庫編程第12章多媒體編程第13章綜合應用實例2第3章圖形與文本3.1圖形設備接口和設備環(huán)境3.2GDI對象CGdiObject3.3畫筆和畫刷的使用3.4處理文本3.5位圖3.6應用實例33.1圖形設備接口和設備環(huán)境3.1.1圖形設備接口Windows提供了一個稱為圖形設備接口(GraphicsDeviceInterface,GDI)的抽象接口。GDI負責管理用戶繪圖操作時功能的轉換,實現(xiàn)設備無關性。應用程序可以使用GDI創(chuàng)建3種類型的圖形輸出:矢量圖形、光柵圖形和文本。41、矢量圖形矢量圖形輸出是指畫線和填充圖形,包括點、直線、曲線、多邊形、扇形和矩形等。2、光柵圖形光柵圖形輸出是指光柵圖形函數(shù)對以位圖形式存儲的數(shù)據(jù)進行操作,它包括各種位圖和圖標的輸出。3、文本與DOS字符方式下輸出文本不同,Windows中的文本是按圖形方式輸出的。5Windows應用程序的輸出不直接面向顯示器或打印機等物理設備,而是面向一個稱之為設備環(huán)境(DeviceContext,DC)的虛擬邏輯設備。設備環(huán)境DC,也稱設備描述表或設備上下文。它是由GDI創(chuàng)建、用來代表設備連接的數(shù)據(jù)結構。DC的主要功能有以下幾種:3.1.2設備環(huán)境6允許應用程序使用一個輸出設備。提供Windows應用程序、設備驅動和輸出設備之間的連接。保存當前信息,例如當前的畫筆、畫刷、字體和位圖等圖形對象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。保存窗口剪切區(qū)域,限制程序輸出到輸出設備中窗口覆蓋的區(qū)域。71、設備環(huán)境類CDC及其功能所有設備環(huán)境類的基類,對GDI的所有繪圖函數(shù)進行了封裝用于響應窗口重繪消息的繪圖輸出,不僅可對客戶區(qū)進行操作,還可以對非客戶區(qū)進行操作代表窗口客戶區(qū)的設備環(huán)境代表整個窗口的設備環(huán)境,包括客戶區(qū)和非客戶區(qū)代表Windows圖元文件設備環(huán)境3.1.3設備環(huán)境類82、設備環(huán)境類CDC的一些常用函數(shù)9Windows用COLORREF類型的數(shù)據(jù)存放顏色,它是一個32位整數(shù)。任何一種顏色都是由紅、綠、藍3種基本顏色組成的,COLORREF類型數(shù)據(jù)的低位字節(jié)存放紅色強度值,第2個字節(jié)存放綠色強度值,第3個字節(jié)存放藍色強度值,高位字節(jié)為0,每一種顏色分量的取值范圍為0~255。3.1.4顏色的設置MFC提供了RGB宏,用于設置顏色,其使用形式為:
RGB(byRed,byGreen,byBlue)
其中,參數(shù)byRed、byGreen和byBlue分別表示紅、綠、藍分量值(范圍0~255)。10下表列出了一些常用顏色的RGB值:111、傳統(tǒng)的SDK獲取設備環(huán)境的方法采用SDK方法編程,獲取設備環(huán)境的方法有兩種:在WM_PAINT消息處理函數(shù)中通過調用API函數(shù)BeginPaint()獲取設備環(huán)境,在消息處理函數(shù)返回前調用API函數(shù)EndPaint()釋放設備環(huán)境。如果繪圖操作不是在WM_PAINT消息處理函數(shù)中,需要通過調用API函數(shù)GetDC()獲取設備環(huán)境,調用API函數(shù)ReleaseDC()釋放設備環(huán)境。3.1.5獲取設備環(huán)境122、MFC應用程序獲取設備環(huán)境的方法在一個MFC應用程序中獲得DC的方法主要有兩種:接受一個參數(shù)為指向CDC對象的指針;聲明一個MFC設備環(huán)境類的對象,并使用this指針為該對象賦值。13【例3.1】編寫一個單文檔的MFC應用程序Li3_1,利用表3.2中的函數(shù)繪制幾種常見的幾何圖形。當程序運行時,顯示如圖3.3所示的結果。3.1.6編程實例14(1)創(chuàng)建一個單文檔的MFC應用程序Li3_1。(2)打開OnDraw()函數(shù),并添加如下代碼。
voidCLi31View::OnDraw(CDC*pDC){
CLi31Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
……pDC->RoundRect(100,30,250,100,30,30);//繪制圓角矩形
pDC->Ellipse(200,100,400,150); //繪制橢圓}(3)編譯、鏈接并運行程序。OnDraw()函數(shù)自動接受一個參數(shù)為指向CDC對象的指針,通過該指針調用成員函數(shù)繪出圖形
15【例3.2】編寫一個單文檔的MFC應用程序Li3_2,使用CPaintDC類完成例3.1同樣的功能。(1)創(chuàng)建一個單文檔應用程序Li3_2。(2)打開類向導工具,在CLi32View類中添加消息WM_PAINT的消息響應函數(shù)OnPaint()。(3)在OnPaint()函數(shù)中添加如下代碼。16voidCLi3_2View::OnPaint(){CPaintDCdc(this);dc.RoundRect(100,30,250,100,30,30); //繪制圓角矩形dc.Ellipse(200,100,400,150); //繪制橢圓//DonotcallCView::OnPaint()forpaintingmessages}(4)編譯、鏈接并運行程序。在OnPaint()函數(shù)中聲明一個CPaintDC類的對象,并使用this指針為該對象賦值。然后再使用。17【例3.3】編寫一個基于對話框的MFC應用程序Li3_3,程序運行后,當用戶在窗口中單擊鼠標左鍵時,在窗口中繪制一個矩形。(1)創(chuàng)建一個基于對話框的應用程序Li3_3。(2)打開對話框編輯器,刪除主對話框中的靜態(tài)文本及按鈕。(3)進入類向導,在CLi33Dlg類中增加消息WM_LBUTTONDOWN的消息響應函數(shù)OnLButtonDown()。(4)在函數(shù)OnLButtonDown()中添加如下代碼。18voidCLi33Dlg::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault CClientDCdc(this); dc.Rectangle(100,0,200,150); CDialog::OnLButtonDown(nFlags,point);}(4)編譯、鏈接并運行程序。先聲明一個CClientDC類的對象,通過該對象引用成員函數(shù)繪圖
19【例3.4】編寫一個基于對話框的MFC應用程序Li3_4,使用CWindowDC類完成例3.3同樣的功能。(1)創(chuàng)建一個基于對話框的應用程序Li3_4。(2)打開對話框編輯器,刪除主對話框中的靜態(tài)文本及按鈕。(3)進入類向導工具,在CLi34View類中增加消息WM_LBUTTONDOWN的消息響應函數(shù)OnLButtonDown()。(4)在函數(shù)OnLButtonDown()中添加如下代碼。20voidCLi34Dlg::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CWindowDCdc(this); dc.Ellipse(100,0,200,150); CDialog::OnLButtonDown(nFlags,point);}(4)編譯、鏈接并運行程序。先聲明一個CWindowDC類的對象,通過該對象引用成員函數(shù)繪圖
213.2GDI對象類CGdiObjectGDI對象是Windows圖形設備接口的抽象繪圖工具。除了畫筆和畫刷,其他GDI對象還包括字體、位圖和調色板。MFC對GDI對象進行了很好的封裝,提供了封裝GDI對象的類,如CPen、CBrush、CFont、Cbitmap和CPalette等,這些類都是GDI對象類CGdiObject的派生類,它們的繼承關系如圖所示。22畫筆。繪制對象的邊框以及直線和曲線。畫刷。填充一個封閉圖形對象內部區(qū)域字體對象。用來繪制文本位圖。裝載和操作位圖調色板。包含系統(tǒng)可用的色彩信息,是應用程序和彩色輸出設備環(huán)境的接口區(qū)域。用于設備環(huán)境(通常是窗口)內的區(qū)域操作233.3畫筆和畫刷的使用無論以CDC類對象指針形式還是以CDC子類對象形式獲得設備環(huán)境,系統(tǒng)都默認指定了一組繪圖屬性,見表3.4。243.3.1使用庫存(stock)對象庫存(stock)對象是由操作系統(tǒng)維護的、用于繪制屏幕的常用對象,包括庫存畫筆、畫刷、字體等。25選擇庫存對象:使用SelectStockObject()函數(shù)如果選擇成功,函數(shù)SelectStockObject()將返回以前的CGdiObject對象的指針。利用CGdiObject類的成員函數(shù)CreateStockObject()將GDI對象設置成指定的庫存對象。聲明一個GDI對象,調用成員函數(shù)SelectObject(),將與庫存對象關聯(lián)的GDI對象選入當前的設備環(huán)境,代碼如下所示。
CBrush*BrushOld,BrushNew;//關聯(lián)庫存畫刷對象BrushNew.CreateStockObject(BLACK_BRUSH);BrushOld=pDC->SelectObject(&BrushNew);26【例3.5】編寫一個單文檔應用程序Li3_5,使用庫存畫筆和畫刷在視圖中繪制圖形。(1)創(chuàng)建一個單文檔應用程序Li3_5。(2)展開CLi3_5View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。27voidCLi35View::OnDraw(CDC*pDC){ CLi35Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc);
CPen*PenOld,PenNew; CBrush*BrushOld,BrushNew;
//選用庫存黑色畫筆PenOld=(CPen*)pDC->SelectStockObject(BLACK_PEN);
//選用庫存淺灰色畫刷BrushOld=(CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH); pDC->Rectangle(100,100,300,300);28 //關聯(lián)GDI庫存對象
PenNew.CreateStockObject(WHITE_PEN); pDC->SelectObject(&PenNew); pDC->MoveTo(100,100); pDC->LineTo(300,300); pDC->MoveTo(100,300); pDC->LineTo(300,100); //恢復系統(tǒng)默認的GDI對象
pDC->SelectObject(PenOld); pDC->SelectObject(BrushOld);}庫存白色畫筆畫對角線29黑色邊框淺灰色填充白色對角線(4)編譯、鏈接并運行Li3_5。30如果要在設備環(huán)境中使用自己的畫筆繪圖,首先需要創(chuàng)建一個指定風格的畫筆,然后選擇所創(chuàng)建的畫筆,最后還原畫筆。1、創(chuàng)建畫筆畫筆的樣式如下表所示。3.3.2創(chuàng)建和使用自定義畫筆31(1)定義畫筆對象時直接創(chuàng)建
CPenPenNew(PS_DASH,1,RGB(255,0,0));
筆的樣式線的寬度線的顏色(2)先定義一個沒有初始化的畫筆對象,再調用CreatePen()函數(shù)創(chuàng)建指定畫筆。
CPenPen;
pen.CreatePen(PS_DASH,1,RGB(255,0,0));
創(chuàng)建畫筆的2種方法:322、選擇創(chuàng)建的畫筆調用CDC類的成員函數(shù)SelectOject(),將創(chuàng)建的畫筆選入當前設備環(huán)境。選擇新的畫筆時應該保存以前的畫筆對象。例如:
CPen
*PenOld;
PenOld=pDC->SelectObject(&PenNew); 選擇新畫筆保存原來的畫筆333、還原畫筆繪圖完成后,調用CDC類的成員函數(shù)SelectOject()恢復設備環(huán)境以前的畫筆工具,并通過調用CGdiObject類的成員函數(shù)DeleteObject()來刪除畫筆,釋放GDI對象所占的內存資源。例如:恢復設備環(huán)境DC中原來的畫筆:
pDC->SelectObject(PenOld);刪除創(chuàng)建的畫筆:
PenNew.DeleteObject(); 34【例3.6】編寫一個單文檔應用程序Li3_6,繪制不同樣式、線寬及顏色的矩形。35(1)創(chuàng)建一個單文檔應用程序Li3_6。(2)展開CLi3_6View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。36voidCLi36View::OnDraw(CDC*pDC){ CLi36Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere CPen*PenOld,PenNew; intPenStyle[]={PS_SOLID,PS_DOT,PS_DASH};//畫筆樣式:實線點線虛線
COLORREFrgbPenClr[]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255)};
畫筆對象設置紅、綠、藍三種顏色37for(inti=0;i<3;i++){//創(chuàng)建畫筆PenNew.CreatePen(PenStyle[i],2-i,rgbPenClr[i]);//選用畫筆 PenOld=pDC->SelectObject(&PenNew);pDC->Rectangle(20+50*i,20+50*i,120+50*i,50+50*i);//還原畫筆pDC->SelectObject(PenOld);//釋放畫筆PenNew.DeleteObject();}}38包括三個步驟:
創(chuàng)建畫刷:先構造一個沒有初始化的CBrush畫刷對象,再調用CBrush類的初始化成員函數(shù)創(chuàng)建定制的畫刷工具。類型不同的畫刷使用不同的函數(shù)實現(xiàn)。
選擇創(chuàng)建的畫刷
還原畫刷。CBrush類提供的創(chuàng)建函數(shù)中常用的有以下幾個:3.3.3創(chuàng)建和使用自定義畫刷39(1)創(chuàng)建指定顏色的實心畫刷函數(shù)CreateSolidBrush()其原型為:
BoolCreateSolidBrush(COLORREFcrColor);
例如創(chuàng)建一個紅色的實心畫刷:
CBrushbrush;
brush.CreateSolidBrush(RGB(255,0,0));40(2)創(chuàng)建陰影畫刷函數(shù)CreateHatchBrush()
其原型為:BoolCreateHatchBrush(intnIndex,COLORREFcrColor);
參數(shù)nIndex用于指定陰影樣式,它的值見下表。例如:創(chuàng)建一個具有水平和垂直交叉陰影線的紅色畫刷
CBrushbrush;
brush.CreateHatchBrush(HS_CROSS,RGB(255,0,0));41
畫刷的陰影樣式42(3)創(chuàng)建位圖畫刷函數(shù)CreatePatternBrush()
采用8像素×8像素的位圖。例如:
CBitMapmybmp;mybmp.LoadBitMap(IDB_MYBMP);CBrushbrush;brush.CreatePatternBrush(&mybmp);
先加載位圖43【例3.7】編寫一個單文檔應用程序Li3_7,繪制不同顏色、不同陰影形式的填充矩形。(1)創(chuàng)建一個單文檔應用程序Li3_7。(2)展開CLi3_7View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。44voidCLi37View::OnDraw(CDC*pDC){ CLi37Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere CBrush*BrushOld,BrushNew; //陰影樣式intHatchStyle[]={HS_BDIAGONAL,HS_FDIAGONAL,HS_CROSS}; COLORREFBrushClr[]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255)};45for(inti=0;i<6;i++) { if(i<3)//創(chuàng)建實心畫刷 BrushNew.CreateSolidBrush(BrushClr[i]); else//創(chuàng)建陰影畫刷BrushNew.CreateHatchBrush(HatchStyle[i-3],RGB(0,0,0));BrushOld=pDC->SelectObject(&BrushNew);//選用畫刷pDC->Rectangle(20+40*i,20+40*i,120+40*i,50+40*i);pDC->SelectObject(BrushOld);//還原畫刷BrushNew.DeleteObject();//釋放畫刷 }}46(4)編譯、鏈接并運行程序。473.4處理文本3.4.1
設置文本顯示屬性在默認情況下輸出文本時,字體顏色是黑色,背景顏色是白色,背景模式為不透明模式。通過調用CDC類成員函數(shù)重新設置字體顏色、背景顏色和文本對齊方式等文本顯示屬性,下表是文本屬性顯示的常用函數(shù)。481、設置背景模式SetBkMode()函數(shù)原型為:
intSetBkMode(intnBkMode);
其中,nBkMode指定背景模式,其值是OPAQUE(不透明)或TRANSPARENT(透明)。2、設置文本對齊方式SetTextAlign()函數(shù)改變文本對齊方式:
UINTSetTextAlign(UINTnFlags);
其中,nFlag
為下表中列出的標志的組合。49字體也是一種GDI對象,字體對象的創(chuàng)建、選擇、使用和刪除的步驟與其他GDI對象類似。CFont類提供的創(chuàng)建函數(shù)中常用的有以下幾個:3.4.2設置字體1、CreatePointFont()
BOOLCreatePointFont(intnPointSize,LPCTSTRlpszFaceName,CDC*pDC=NULL);
參數(shù)說明:nPointSize:字體大小,以1/10磅為單位;lpszFaceName:創(chuàng)建字體對象所使用的字體名稱;pDC:指向一個設備環(huán)境對象。502、CreateFontIndirect()
BOOLCreateFontIndirect(constLOGFONT*lpLogFont);
其中參數(shù):lpLogFont
為指向LOGFONT結構的指針;LOGFONT結構用來說明一種字體的所有屬性;513、CreateFont()該函數(shù)包括大量參數(shù),其原型為:
BOOLCreateFont(intnHeight;intnWidth;intnEscapement;intnOrientation;intnWeight;BYTEbItalic;BYTEbUnderline;BYTEcStrikeOut;BYTEnCharSet;BYTEnOutPreclsion;BYTEnClipPrecision;BYTEnQuality;BYTEnPitchAndFamily;LPCTSTRlpszFacename;)52可以選擇庫存字體來重新設置字體。當選擇庫存字體作為文本輸出的字體時,無須創(chuàng)建字體對象,只需簡單地調用成員函數(shù)CDC::SelectStockObject(),將庫存字體對象選入設備環(huán)境。53【例3.8】編寫一個單文檔的應用程序Li3_8,采用不同的方法創(chuàng)建字體,并根據(jù)創(chuàng)建的字體輸出不同的文本。(1)創(chuàng)建一個單文檔應用程序Li3_8。(2)展開CLi38View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。54voidCLi38View::OnDraw(CDC*pDC){ CLi38Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere CStringoutstr[5]; outstr[1]="1.使用函數(shù)CreatePointFont()創(chuàng)建宋體字"; outstr[2]=“2.使用函數(shù)CreateFontIndirect()創(chuàng)建傾斜、帶下劃線的黑體字”;outstr[3]="3.使用函數(shù)CreateFont()創(chuàng)建帶刪除線的大號字";outstr[4]="4.使用庫存字體對象創(chuàng)建ANSI標準的等寬字";55 CFont*OldFont,NewFont; LOGFONTMyFont={ 30, 10, 0, 0, 0, 1, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "黑體" };56 pDC->TextOut(0,10,"創(chuàng)建字體的幾種方法:"); for(inti=1;i<5;i++) { switch(i) { case1: //使用函數(shù)CreatePointFont()創(chuàng)建字體
NewFont.CreatePointFont(200,"宋體",NULL); break; case2: //使用函數(shù)CreateFontIndirect()創(chuàng)建字體
NewFont.CreateFontIndirect(&MyFont); break;57 case3: //使用函數(shù)CreateFont()創(chuàng)建字體NewFont.CreateFont(30,10,0,0,FW_HEAVY,false,false,
true,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"大號字"); break; case4: //使用庫存字體對象創(chuàng)建字體
pDC->SelectStockObject(ANSI_FIXED_FONT); }58 OldFont=pDC->SelectObject(&NewFont); pDC->TextOut(0,60*i,outstr[i]); pDC->SelectObject(OldFont); NewFont.DeleteObject(); }}59文本的顯示是以像素為單位,在繪制任何文本之前,需要精確地知道文本的詳細屬性,如高度、寬度等,用來計算文本坐標。CDC類提供了幾個文本測量成員函數(shù):3.4.3格式化文本1、GetTextExtent()獲得所選字體中指定字符串的寬度和高度。
CSizeGetTextExtent(LPCTSTRlpszString,intnCount);
其中,1pszString是字符串的指針,nCount是所包括的字符數(shù)。返回值CSize是包含兩個成員的結構,cx是字符串的寬度,cy是字符串的高度。602、GetTextMetrics()獲得當前字體TEXTMETRIC結構的數(shù)據(jù)。
BOOLGetTextMetric(constTEXTMETRIC*lpTextMetric);
其中參數(shù):lpTextMetric為指向結構TEXTMETRIC的指針;TEXTMETRIC結構用來描述字體信息。61【例3.9】編寫一個單文檔的應用程序Li3_9,采用不同的格式輸出文本串。62(1)創(chuàng)建一個單文檔的MFC應用程序Li3_9。(2)展開CLi3_9View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。
voidCLi37View::OnDraw(CDC*pDC){ …intExternalLeading,y=0; TEXTMETRICtm; CStringc,outString=L"VisualC++"; CFont*OldFont,NewFont; CSizesize;63 LOGFONTMyFont={ 30, 10, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, L"黑體" };64 for(inti=0;i<outString.GetLength();i++) { //設置字符高度
MyFont.lfHeight=30+10*i; //創(chuàng)建字體
NewFont.CreateFontIndirect(&MyFont); OldFont=pDC->SelectObject(&NewFont); //獲得當前字體的TEXTMETRIC結構數(shù)據(jù)
pDC->GetTextMetrics(&tm); //獲得行間距值65ExternalLeading=tm.tmExternalLeading;//獲得字符串的寬度和高度值size=pDC->GetTextExtent(outString,i);//計算縱坐標值y=10+y+(int)(0.1*size.cy)+ExternalLeading;//輸出字符c.Format(L"%c",outString.GetAt(i));pDC->TextOut(200+size.cx,y,c);pDC->SelectObject(OldFont);NewFont.DeleteObject();}}66MFCCDC類中常用的文本輸出函數(shù)有以下幾個:1、TextOut()該函數(shù)使用當前設定的字體、顏色、對齊方式在指定位置上輸出文本。
vitualBOOLTextOut(intx,inty,LPCTSTRlpszString,intnCount);
或:
BOOLTextOut(intx,inty,constCstring&str);
其中,參數(shù)(x,y)指定輸出文本串的開始位置;參數(shù)lpszString和str為輸出的文本串;參數(shù)nCount指定文本串的長度。3.4.4常用文本輸出函數(shù)672、DrawText()該函數(shù)在給定的矩形區(qū)域內輸出文本,并可調整文本在矩形區(qū)域內的對齊方式以及對文本行進行換行處理等。函數(shù)原型為:
VirtualintDrawText(LPCTSTRlpszString,intnCount,LPRECTlpRect,UINTnFormat);或:
intDrawText(constCString&str,LPRECTlpRect,UINTnFormat);
其中,參數(shù)lpszString和str為要輸出的文本串,可以使用換行符“\n”;參數(shù)nCount指定文本串長度;參數(shù)lpRect指定用于顯示文本串的矩形區(qū)域;參數(shù)nFormat指定如何格式化文本串。683、ExtTextOut()該函數(shù)的功能與TextOut()相似,但可以根據(jù)指定的矩形區(qū)域裁剪文本串,并調整字符間距。函數(shù)原型為:
VirtualBOOLExtTextOut(intx,inty,UINTnOptions,LPCRECTlpRect,LPCTSTRlpszString,UINTnCount,LPINT
lpDxWidths);或:
BOOLExtTextOut(intx,inty,UINTnOptions,LPCRECTlpRect,constCString&str,LPINTlpDxWidths);4.TabbedTextOut()該函數(shù)的功能與TextOut()相似,但可按指定的制表間距擴展制表符。69【例3.10】編寫一個單文檔的應用程序Li3_10,采用不同的函數(shù)輸出文本串。(1)創(chuàng)建一個單文檔的MFC應用程序Li3_10。(2)展開CLi310View類,打開其成員函數(shù)OnDraw()。(3)在函數(shù)OnDraw()中添加如下代碼。70voidCLi310View::OnDraw(CDC*pDC){ CLi310Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere CStringoutstr[5];CRectrect; outstr[1]="使用TextOut()函數(shù)輸出文本"; outstr[2]="使用DrawText()函數(shù)輸出文本"; outstr[3]="使用ExtTextOut()函數(shù)輸出文本"; outstr[4]="使用TabbedTextOut()函數(shù)輸出文本";71
//使用函數(shù)TextOut()輸出文本 pDC->TextOut(10,10,L"常用文本輸出函數(shù):"); pDC->TextOut(50,30,outstr[1]); pDC->SetBkColor(RGB(255,255,0)); //使用函數(shù)DrawText()輸出文本 rect.SetRect(CPoint(50,60),CPoint(150,110));pDC->DrawText(outstr[2],&rect,DT_WORDBREAK|DT_CENTER);//使用函數(shù)ExtTextOut()輸出文本 rect.SetRect(CPoint(50,100),CPoint(200,200));pDC->ExtTextOut(50,120,ETO_CLIPPED,&rect,outstr[3],NULL);}(4)編譯、鏈接并運行程序。723.5位圖位圖是一個由位構成的圖像,它是由一系列0和1排列而成的點陣結構。Windows支持兩種不同形式的位圖:設備相關位圖(DeviceDependentBitmap,DDB)設備無關位圖(DeviceIndependentBitmap,DIB)73DDB又稱GDI位圖,它依賴于具體設備,只能存在于內存中。DIB是不依賴硬件的位圖,因為它包含了創(chuàng)建DIB位圖時所在設備的顏色格式、分辨率和調色板等信息。DIB位圖不能直接顯示,需要先轉換為與設備相關的格式,再由具體的設備顯示。DIB位圖通常以BMP后綴名的文件形式存儲在磁盤中,或者以資源的形式存在于EXE或DLL文件中。3.5.1設備相關圖(DDB)和設備無關圖(DIB)74MFC提供了大量的類和函數(shù)來處理位圖的操作。1、創(chuàng)建DDB函數(shù)
BOOLLoadBitmap(LPCTSTRlpszResourceName);BOOLLoadBitmap(UINTnlDResource);
其中,參數(shù)lpszResourceName或nlDResouree分別為位圖資源名稱或位圖資源標識。該函數(shù)從資源中裝入一幅位圖,若載入成功,則返回值為真,否則返回值為假。3.5.2位圖操作函數(shù)75BOOLCreateCompatibleBitmap(CDC*pDC,intnWidth,intnHeight);
其中參數(shù):pDC指向一個設備環(huán)境;參數(shù)nWidth和nHeight以像素為單位,用來指定位圖的寬度和高度。該函數(shù)創(chuàng)建一個與指定設備環(huán)境兼容的DDB。若創(chuàng)建成功,函數(shù)返回值為真,否則為假。762、獲取位圖信息函數(shù)
intGetBitmap(BITMAP*pBitMap);該函數(shù)用來獲取與DDB有關的信息,參數(shù)pBitMap是BITMAP結構的指針。3、輸出位圖函數(shù)BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,int
xSrc,intySrc,DWORDdwRop);該函數(shù)共有8個參數(shù):x、y、nWidth、nHeight:定義當前設備環(huán)境的復制區(qū)域;pSrcDC:為指向原設備環(huán)境對象的指針;xSrc、ySrc:為原位圖的左上角坐標;dwRop:定義了進行復制時的光柵操作方式。77BOOLPatBlt(intx
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年岳麓版選修6歷史下冊階段測試試卷含答案
- 2025年華師大版選修2地理下冊階段測試試卷
- 2025年北師大新版選修5歷史上冊階段測試試卷含答案
- 2025年外研版三年級起點選擇性必修3歷史上冊月考試卷含答案
- 2025年浙教版選修6歷史下冊月考試卷
- 二零二五版面料行業(yè)標準制定與采購合同范本3篇
- 二零二五年度生物制藥項目與派遣公司研發(fā)人員派遣合同4篇
- 二零二五版派遣人力資源管理顧問人才派遣與咨詢合同4篇
- 二零二五版商業(yè)綜合體租賃合同范本4篇
- 二零二五年度個人汽車租賃貸款合同范本3篇
- 南安市第三次全國文物普查不可移動文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識培訓課件
- 項目前期選址分析報告
- 急性肺栓塞搶救流程
- 《統(tǒng)計學-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時間序列分析和預測
- 《形象價值百萬》課件
- 紅色文化教育國內外研究現(xiàn)狀范文十
- 中醫(yī)基礎理論-肝
- 小學外來人員出入校門登記表
- 《土地利用規(guī)劃學》完整課件
- GB/T 25283-2023礦產資源綜合勘查評價規(guī)范
評論
0/150
提交評論