日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WTL 自绘 进度条Progressbar

發(fā)布時(shí)間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WTL 自绘 进度条Progressbar 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

WTL 繪制的進(jìn)度條,邏輯清晰明了,代碼函數(shù)清晰易懂:基本思路就是 首先繪制 進(jìn)度條背景圖,然后根據(jù)動(dòng)態(tài)進(jìn)度不斷重繪前景進(jìn)度條,繪制操作在OnPaint函數(shù)里畫。該類可以直接用于項(xiàng)目中。

使用示例:

MyProgress* pMyProgress = new MyProgress;
CRect rcProgress;
rcProgress.top = 500;
rcProgress.left = 240;
rcProgress.right = rcProgress.left + 500;
rcProgress.bottom = rcProgress.top + 20;
CString strFore = Util::GetCurrentDir();
strFore += L"\\img\\ui\\progress_fore.png";
CString strBgnd = Util::GetCurrentDir();
strBgnd += L"\\img\\ui\\progress_bgnd.png";
pMyProgress->SetRange(0,100);
pMyProgress->SetProgressBmp(strFore,strBgnd);
pMyProgress->Create(m_hWnd,rcProgress,NULL,WS_CHILD|WS_VISIBLE);

效果圖如下:

進(jìn)度條自定義類代碼如下:

#pragma once#pragma comment(lib, "gdiplus.lib") static ULONG_PTR s_gdiplusToken3=0;class MyProgress:public CWindowImpl<MyProgress> { public:MyProgress(){GdiplusStartupInput gdiplusStartupInput;GdiplusStartup(&s_gdiplusToken3, &gdiplusStartupInput, NULL);}~MyProgress(){GdiplusShutdown(s_gdiplusToken3);}protected:BEGIN_MSG_MAP(MyProgress)MESSAGE_HANDLER(WM_CREATE,OnCreate)MESSAGE_HANDLER(WM_PAINT,OnPaint)MESSAGE_HANDLER(WM_DESTROY,OnDestroy)MESSAGE_HANDLER(WM_ERASEBKGND,OnEraseBkgnd)END_MSG_MAP()HBITMAP GetBitmapFromFile( LPCWSTR pFile ){std::auto_ptr<Bitmap> pBmp(new Bitmap(pFile));if(!pBmp.get())return NULL;HBITMAP hBmp = NULL;Color backColor = Color(255,0,0,0); if(Ok!=pBmp->GetHBITMAP(backColor,&hBmp))return NULL;return hBmp;}void SetProgressBmp(CString strFore,CString strBgnd){m_btm_fore.Attach(GetBitmapFromFile(strFore));m_btm_bgnd.Attach(GetBitmapFromFile(strBgnd));}BOOL DrawBmp( HDC hdc, CRect rect, HBITMAP hBitmap ){BITMAP bm;GetObject(hBitmap,sizeof(bm),(VOID*)&bm);INT nWidth = bm.bmWidth;INT nHeight = bm.bmHeight;CDC memdc;memdc.CreateCompatibleDC(hdc);CBitmap bitmap;bitmap.CreateCompatibleBitmap(hdc,nWidth,nHeight);memdc.SelectBitmap(hBitmap);//BLENDFUNCTION bf = {AC_SRC_OVER,0,255,1};//return ::AlphaBlend(hdc,rect.left,rect.top,nWidth,nHeight,memdc,0,0,nWidth,nHeight,bf);return ::StretchBlt(hdc,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,memdc,0,0,nWidth,nHeight,SRCCOPY );}void SetPos(int nPos){m_nPos = nPos;m_nPercent = GetPercent();RedrawWindow();}void SetRange(int nMin,int nMax){if(nMin > nMin)return;m_nMin = nMin;m_nMax = nMax;}int GetRange(){return m_nMax - m_nMin;}int GetPercent(){return (m_nPos * 100)/GetRange();}LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/){m_nMin = 0;m_nMax = 100;m_nPos = 0;m_nPercent =0;m_bHasDrawBgnd = FALSE;GetClientRect(&m_rcWindow);GetClientRect(&m_rcProgress);SetWindowPos(HWND_TOPMOST,m_rcWindow,SWP_SHOWWINDOW);return TRUE;}LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/){return TRUE;}LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/){return TRUE;}LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/){CPaintDC dc(m_hWnd);int nWidth = m_rcWindow.right - m_rcWindow.left;int nHeight = m_rcWindow.bottom - m_rcWindow.top;if(!m_bHasDrawBgnd){//畫背景DrawBmp(dc,m_rcWindow,m_btm_bgnd);m_bHasDrawBgnd = TRUE;}//畫動(dòng)態(tài)進(jìn)度條部分m_rcProgress.right = m_rcProgress.left + nWidth*GetPercent()/100;DrawBmp(dc,m_rcProgress,m_btm_fore);return TRUE;} private:int m_nMin;int m_nMax;int m_nPos;int m_nPercent;BOOL m_bHasDrawBgnd;CBitmap m_btm_fore;CBitmap m_btm_bgnd;CRect m_rcWindow;CRect m_rcProgress; };

  

轉(zhuǎn)載于:https://www.cnblogs.com/JczmDeveloper/p/3498296.html

總結(jié)

以上是生活随笔為你收集整理的WTL 自绘 进度条Progressbar的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。