資源描述:
《mfc變色進(jìn)度條制作》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、VC-MFC制作變色進(jìn)度條一.實驗?zāi)康?熟悉進(jìn)度條的制作原理?防止閃動的緩沖技術(shù)應(yīng)用?Windows消息處理二.添加一個內(nèi)存緩沖類2.1頭文件的定義在創(chuàng)建基于對話框的MFC工程之后,添加一個內(nèi)存緩沖類CMemDC,繼承自CDC。由于MFC新建類向?qū)е械幕愡x項沒有CDC這個基類。所以只有手動在類視圖中添加,并選擇GenericClass。在頭文件中定義兩個操作符:取子域和解引用。MemDC*operator->(){returnthis;}operatorMemDC*(){returnthis;}再添加幾個變量,分別如下:BOOLm_bMemDC;//用于標(biāo)記不是打印DC,僅僅是
2、顯示器CRectm_rect;//定義圖形所顯示的矩形區(qū)域CBitmap*m_pOldBitmap;//存儲用于輸出到設(shè)備上的位圖文件CBitmapm_bitmap;//與設(shè)備匹配的內(nèi)存位圖存儲CDC*m_pDC;//設(shè)備上下文2.2函數(shù)的實現(xiàn)這里我們只需要實現(xiàn)兩個函數(shù),即構(gòu)造函數(shù)和析構(gòu)函數(shù)。代碼如下:ASSERT(pDC!=NULL);m_pDC=pDC;m_pOldBitmap=NULL;m_bMemDC=!pDC->IsPrinting();//判斷不是打印機(jī)if(m_bMemDC){pDC->GetClipBox(&m_rect);//獲取局部剪裁區(qū)域CreateComp
3、atibleDC(pDC);//創(chuàng)建內(nèi)存匹配的設(shè)備上下文m_bitmap.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());m_pOldBitmap=SelectObject(&m_bitmap);//選擇對象到設(shè)備SetWindowOrg(m_rect.left,m_rect.top);//設(shè)置窗口的起點坐標(biāo)}else{m_bPrinting=pDC->m_bPrinting;m_hDC=pDC->m_hDC;m_hAttribDC=pDC->m_hAttribDC;}一.進(jìn)度條的編寫3.1頭文件的定義新建一個
4、新類GradientProgress,繼承自CProgressCtrl類。在頭文件中我們添加幾個操作的接口。intStepIt(void);//使進(jìn)度條前進(jìn),按照步長更新到新位置intSetStep(intnStep);//設(shè)置步長intSetPos(intnPos);//設(shè)置進(jìn)度條的邏輯位置voidSetRange(intnLower,intnUpper);添加幾個變量,如下:COLORREFm_clrText,m_clrBk,m_clrStart,m_clrEnd;//文字、背景、左端、右端intm_nLower,m_nUpper,m_nStep,m_nCurrentPosi
5、tion;//進(jìn)度條控制參數(shù)BOOLm_bShowPercent;//是否顯示進(jìn)度信息添加幾個設(shè)置和獲取方法://SetFunctionsvoidSetTextColor(COLORREFcolor){m_clrText=color;}//設(shè)置文字顏色voidSetBkColor(COLORREFcolor){m_clrBk=color;}//背景voidSetStartColor(COLORREFcolor){m_clrStart=color;}//前端voidSetEndColor(COLORREFcolor){m_clrEnd=color;}//后端//GetFunctio
6、nsCOLORREFGetTextColor(void){returnm_clrText;}//獲取文字顏色COLORREFGetBkColor(void){returnm_clrBk;}//背景COLORREFGetStartColor(void){returnm_clrStart;}//前端COLORREFGetEndColor(void){returnm_clrEnd;}//后端定義獲取是否顯示進(jìn)度信息的變量://是否顯示進(jìn)度信息voidShowPercent(BOOLbShowPercent=TRUE){m_bShowPercent=bShowPercent;}定義畫進(jìn)度
7、條函數(shù)DrawGradient()voidDrawGradient(CPaintDC*pDC,//用于響應(yīng)WM_PAINT消息,受OnPaint調(diào)用constRECT&rectClient,//畫對象的區(qū)域constint&nMaxWidth//進(jìn)度條最大寬度);用類向?qū)砑觾蓚€消息處理函數(shù)OnPaint()和OnEraseBkgnd()函數(shù)。3.2函數(shù)實現(xiàn)實現(xiàn)DrawGradient()函數(shù):RECTrectFill;floatfStep;CBrushbrush;MemDCme