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