MFC应用程序实例
此程序是開發(fā)一個'口令'對話框程序,包含了模式對話框與非模式方式調(diào)用對話框。
詳細(xì)見源文件,地址:
共享鏈接:http://u.163.com/b47tr9n提取碼:zxx0o2v2
主要包含了定時器的啟動與關(guān)閉的應(yīng)用,菜單狀態(tài)的更新。
詳細(xì)見源文件,地址:
共享鏈接:http://u.163.com/0Nkr提取碼:hdlov0uq
主要包含了對話框與常用控件的使用,windows消息處理。
????詳細(xì)見源文件,地址:
????共享鏈接:http://u.163.com/JOssJQN提取碼:7ahmgfk9
主要包含了對文檔與視圖結(jié)構(gòu)的應(yīng)用,文檔的存儲和裝入,添加串行化功能。
????詳細(xì)見源文件,地址:
????共享鏈接:http://u.163.com/JwZlq提取碼:233y2w3q
屏幕繪圖:
????一般步驟:
????利用繪圖工具類創(chuàng)建繪圖工具對象
????????如:CPen(畫筆類),CBrush(畫刷類),CFont(字體類)
????CDC類進(jìn)行繪圖:
????1.在視圖類的OnDraw()函數(shù)中繪圖
????步驟:
????????1.選擇繪圖工具
????????????例:pDC->SelectObject(LTGRAY_BRUSH);
????????2.繪制圖像
????????????例1:繪制矩形
????????????????1.定義矩形
????????????????CRect rect(10,10,200,70);
????????????????2.畫一個矩形
????????????????pDC->Rectangle(rect);
????????????例2:繪制文本
????????????????pDC->TextOut(100,80,"Hello,VC++編程");
????2.在視圖類的一般函數(shù)中繪圖
????????第1種:是在堆棧上構(gòu)造對象,構(gòu)造的對象會被自動刪除。
????????????例:
????????????void CMyHelloView::OnLbuttonDown(UINT nFlags,CPoint point)
????????????{
????????????????CDC dc(this);????????????//構(gòu)造對象dc
????????????????CRect rect(0,0,100,100)????//定義一個矩形
????????????????dc.Rectang(rect);????????//繪圖
????????????}????//dc自動地被釋放
????????第2種:調(diào)用GetDC()函數(shù)獲得顯示設(shè)備環(huán)境的指針pDC進(jìn)行繪圖,但繪圖完畢后,
????????必須調(diào)用ReleaseDC()函數(shù)來釋放它。
????????????例:
????????????void CMyHelloView::OnLbuttonDown(UINT nFlags,CPoint point)
????????????{
????????????????CDC* pDC=GetDC(); //獲取設(shè)備環(huán)境的指針
????????????????CRect rect;????????????//繪圖部分
????????????????pDC->Rectang(rect);
????????????????ReleaseDC(pDC);????????//釋放pDC
????????????}
?
????CPaintDC類進(jìn)行繪圖:
????應(yīng)用于對話框程序,它可以處理來自Windows的WM_PAINT消息,所以通常是在OnPaint消息響應(yīng)函數(shù)中使用。
????????例:
????????void MyTestDlg::OnPaint()
????????{
????????//1.創(chuàng)建一個CPaintDC類的對象
????????????CPaintDC dc(this);
????????//2.調(diào)用CPaintDC類的函數(shù)進(jìn)行繪圖
????????????dc.MoveTo(10,10);????//調(diào)用MoveTo()函數(shù),定位到點(diǎn)(10,10)
????????????dc.LineTo(100,100);????//調(diào)用LineTo()函數(shù),畫線到點(diǎn)(100,100)
????????????dc.Ellipse(120,120,160,160);????//調(diào)用畫橢圓函數(shù)Ellipse()
????????????CDialog::OnPaint();
????????}
?
????CClientDC類進(jìn)行繪圖:
????CClientDC類對象主要用來自動處理對描述窗口的客戶程序區(qū)域的設(shè)備環(huán)境進(jìn)行調(diào)用和釋放。在CClientDC類對象
????創(chuàng)建時自動調(diào)用GetDC(),在撤銷時將自動調(diào)用ReleaseDC()。
????????例:
????????void CMyHelloView::OnLbuttonDown(UINT nFlags,CPoint point)
????????{
????????????CClientDC dc(this);
????????????CRect rect;
????????????GetClientRect(&rect);
????????????dc.MoveTo(rect.left,rect.Top);????????//定位到客戶程序區(qū)域的左上角
????????????dc.LineTo(rect.right,rect.bottom);????//畫線到客戶程序區(qū)域的右下角
????????????Cview::OnLbuttonDown(nFlags,point);
????????}
?
????繪圖工具:
????????CPen(畫筆類):
????????????1.構(gòu)造和初始化對象都在帶參數(shù)的構(gòu)造函數(shù)中一步完成
????????????????CPen newPen(PS_SOLID,2,RGB(2,255,0));
????????????2.構(gòu)造和初始化分兩步完成,構(gòu)造由不帶參數(shù)的構(gòu)造函數(shù)完成,而初始化由初始函數(shù)完成。
????????????????CPen newPen;
????????????????newPen.CreatePen(PS_SOLID,2,RGB(0,255,0));
????????CBrush(畫刷類):
????????????1.構(gòu)造和初始化對象都在帶參數(shù)的構(gòu)造函數(shù)中一步完成
????????????????CBrush newBrush(RGB(0,0,255));
????????????2.構(gòu)造和初始化分兩步完成,構(gòu)造由不帶參數(shù)的構(gòu)造函數(shù)完成,而初始化由初始函數(shù)完成。
????????????????CBrush newBrush;
????????????????newBrush.CreateSolidBrush(RGB(0,255,0));
????????CFont(字體類):創(chuàng)建字體由兩步完成
????????????1.定義一個CFont類的對象,應(yīng)用框架會調(diào)用構(gòu)造函數(shù)
????????????????CFont myFont;
????????????2.調(diào)用CFont類的創(chuàng)建字體函數(shù),將構(gòu)造的CFont類對象與Windows的某種字體相關(guān)聯(lián)
????????????????myFont.CreateFont(...);
????????????????其中,CreateFont()原型為:
????????????????BOOL CreateFont(
????????????????????int nHeight,????????//字體高度
????????????????????int nWidth,????????????//字符平均寬度
????????????????????int nEscapement,????//文本行角度
????????????????????int nOrientation,????//字符角度
????????????????????int nWeight,????????//字符粗細(xì)度
????????????????????BYTE bItalic,????????//斜體
????????????????????BYTE bUnderline,????//下劃線
????????????????????BYTE cStrikeOut,????//刪除線
????????????????????BYTE nCharSet,????????//字符集
????????????????????BYTE nOutPrecison,????//字體輸出結(jié)果和要求的匹配程度
????????????????????BYTE nClipPrecison,????//如何裁剪落于裁剪區(qū)之外的字符
????????????????????BYTE nQuality,????????//字體屬性匹配的精確程度
????????????????????BYTE nPitchAnFamily,//字體間距和字體簇
????????????????????BYTE lpszFacename????//字體名稱
????????????????);
?
????????矢量圖形:
????????點(diǎn)(CPoint):
????????????CPoint類是對Windows結(jié)構(gòu)POINT的封裝,POINT結(jié)構(gòu):
????????????????Typedef struct tagPOINT
????????????????{
????????????????????LONG X;
????????????????????LONG Y;
????????????????}POINT;
????????????畫點(diǎn)的函數(shù):CDC::SetPixel(),原型為:
????????????????COLORREF SetPixel(POINT point,COLORREF crColor);
????????????例:
????????????????CClientDC dc(this);
????????????????CPoint point(100,200);
????????????????dc.SetPixel(point,RGB(255,0,0));
?
????????直線:繪制線條函數(shù)由CDC::MoveTo()和CDC::LineTo()完成
????????????MoveTo()函數(shù)用于設(shè)定當(dāng)前點(diǎn)的位置,其原型為:
????????????????CPoint MoveTo(int x,int y);
????????????????CPoint MoveTo(CPoint point);
????????????LineTo()函數(shù)用于畫一條從當(dāng)前點(diǎn)到指定點(diǎn)的直線,然后將指定咪設(shè)為當(dāng)前點(diǎn)。
????????????畫線的樣式取決于指定的畫筆,其原型為:
????????????????BOOL LineTo(int x,int y);
????????????????BOOL LineTo(CPoint point);
????????????例:
????????????????在屏幕上從點(diǎn)p1(100,200)到p2(150,300)畫一個線段
????????????????????CClientDC dc(this);
????????????????????CPoint p1(100,200),p2(150,300);
????????????????????dc.MoveTo(p1);
????????????????????dc.LineTo(p2);
?
????????矩形(CRect):
????????Windows定義了一個描述矩形的結(jié)構(gòu)RECT:
????????????Typedef struct tagRECT
????????????{
????????????????LONG left;
????????????????LONG top;
????????????????LONG right;
????????????????LONG botton;
????????????}RECT,*PRECT,NEAR* NPRECT,FAR* LPRECT;
????????????畫矩形的常用函數(shù)是CDC::Rectangle()和CDC::FillRect(),
????????????CDC::Rectangle()函數(shù)原型為:
????????????????BOOL Rectangle(int x1,int y1,int x2,int y2);
????????????????BOOL Rectangle(LPCRECT lpRect);
????????????CDC::FillRect()函數(shù)原型為: 該函數(shù)使用給定的畫刷給矩形填充顏色
????????????????void FillRect(LPCRECT lpRect,CBrush* pBrush);
????????????例:
????????????????CPaintDC dc(this);
????????????????dc.Rectangle(120,120,160,160);
????????
????????橢圓:畫橢圓的函數(shù)為CDC::Ellipse()
????????????CDC::Ellipse()函數(shù)原型為:
????????????????BOOL Ellipse(int x1,int y1,int x2,int y2);
????????????????BOOL Ellipse(LPCRECT lpRect);
????????????例:
????????????????CPaintDC dc(this);
????????????????dc.Ellipse(120,120,160,160);
?
????????CBitmap(位圖類):CBitmap類封裝了Windows的GDI位圖操作所需的大部分函數(shù)。
????????????LoadBitmap是位圖的初始化函數(shù),從應(yīng)用程序中調(diào)用一個位圖資源,其函數(shù)原型為:
????????????????BOOL LoadBitmap(LPCTSTR lpszResourceName);
????????????????BOOL LoadBitmap(UINT nIDResource);
????????????若要直接創(chuàng)建一個位圖對象,可使用CBitmap類中的CreateBitmap(),CreateBitmapIndirect()以及
????????????CreateCompatibleBitmap()函數(shù),其函數(shù)原型為:
????????????????BOOL CreateBitmap(int nWidth,int nHeight,UINT nPlanes,UINT nBitcount,const void* lpBits);
????????????????BOOL CreateBitmapIndirect(LPBITMAP lpBitmap);
????????????????BOOL CreateCompatibleBitmap(CDC* pDC,int nWidth,,int nHeight);
????????????
????????????????GDI位圖的顯示
????????????????步驟:
????????????????????1.調(diào)用CBitmap類的CreateBitmap(),CreateCompatibleBitmap()以及CreateBitmapIndirect()函數(shù)創(chuàng)建
????????????????????一個適當(dāng)?shù)奈粓D對象。
????????????????????2.調(diào)用CDC::CreateCompatibleDC()函數(shù)創(chuàng)建一個內(nèi)存設(shè)備環(huán)境,以便位圖在內(nèi)存中保存下來,并與指定的
????????????????????設(shè)備(窗口設(shè)備)環(huán)境相兼容。
????????????????????3.調(diào)用CDC::SelectObject()函數(shù)將位圖對象選入設(shè)備環(huán)境中。
????????????????????4.調(diào)用CDC::BitBlt()或CDC::StretchBlt()函數(shù)將位圖復(fù)制到實(shí)際設(shè)備環(huán)境中。
????????????????????5.使用之后恢復(fù)原來的內(nèi)存設(shè)備環(huán)境。
????????????????例:
????????????????????見本工程中 void CMyDraw::OnShowbitmap()函數(shù)
????????????????
????????????????BMP文件的顯示
????????????????步驟:
????????????????????1.定義一個HBITMAP類型變量bitmap,通過它的LoadImage()函數(shù)將指定的位圖文件讀取進(jìn)來。
????????????????????2.創(chuàng)建兼容的內(nèi)存設(shè)備描述表,并通過SelectObject()將位圖選入內(nèi)存設(shè)備描述表中。
????????????????????3.調(diào)用BitBlt()函數(shù)將位圖繪制在客戶程序區(qū)域。
????????????????例:
????????????????????見本工程中 void CMyDrawView::OnDbmp()函數(shù)
????????CPalette(調(diào)色板類),CRgn(繪圖區(qū)域類)。。。暫留。。
????詳細(xì)見源文件,地址:
????共享鏈接:http://u.163.com/33DA提取碼:xqj1ft5x
命令字符串接口控制,媒體文件的控制,封裝一個MCI控制類。(此程序還不夠完整,封裝MCI控制類還有點(diǎn)錯誤,還有待修改:CMCIClass類插入項(xiàng)目、為'WAVE'Radio控件引入變量、按鈕狀態(tài)更新、添加進(jìn)度條)
詳細(xì)見源文件,地址:
共享鏈接:http://u.163.com/qBhuJKFq提取碼:1qpodlx9
使用ODBC類編程的一般步驟:
????1.連接數(shù)據(jù)源
????2.創(chuàng)建并執(zhí)行SQL語句
????3.檢查結(jié)果記錄
????4.斷開數(shù)據(jù)源
包含了對數(shù)據(jù)記錄的基本操作。
詳細(xì)見源文件,地址:
共享鏈接:http://u.163.com/qdBP1Ghn提取碼:yfvd8njd
詳細(xì)見源文件,地址:
共享鏈接:http://u.163.com/5iTVvUp提取碼:itxwk1rf
MyQQ客戶端程序
MyQQ服務(wù)器端程序
????????詳細(xì)見源文件,地址:
????????共享鏈接:http://u.163.com/0IhA提取碼:fbcdiicr
桌面差時鐘,包含了多線程的應(yīng)用,線程的控制,以及線程間的通信。
????????詳細(xì)見源文件,地址:
????????共享鏈接:http://u.163.com/AaI3j提取碼:mxcr7nkc
????線程同步,使用臨界區(qū)、互斥對象、信號量對象進(jìn)行線程同步。
????????詳細(xì)見源文件,地址:
????????共享鏈接:http://u.163.com/1oCw提取碼:rr14f9f7
(還未完成)
????源文件,地址:
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/luowei010101/archive/2011/09/07/2170167.html
總結(jié)
- 上一篇: 推荐12款非常有用的流行 jQuery
- 下一篇: 虚拟机四种网络连接模式比较