VS2015 MFC 進度欄編程

一 CMainFrame中定義成員變量:protected: CProgressCtrl m_progressBar;函數

二 CMainFrame::OnCreate()函數返回以前,建立對象  this

m_progressBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 100, 200, 120), this, 8899); //建立水平進度欄
    m_progressBar.SetPos(50);                                                          //設置進度欄位置
    m_progressBarVer.Create(WS_CHILD | WS_VISIBLE | PBS_VERTICAL,CRect(10,150,30,200),this,8900); //建立垂直進度欄
    m_progressBarVer.SetPos(50);

三 把進度欄放在狀態欄中:spa

 CRect rect; m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS), &rect); m_progressBar.Create(WS_CHILD | WS_VISIBLE|PBS_SMOOTH, rect, &m_wndStatusBar, 8899); //建立水平進度欄
    m_progressBar.SetPos(50);

四  當觸發水平重繪或垂直重繪時,進度條不在所需位置時code

 

void CMainFrame::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此處添加消息處理程序代碼 // 不爲繪圖消息調用 CFrameWnd::OnPaint()
 CRect rect; m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS), &rect); //每次重繪發生時,都去獲取一個矩形區域 if (!m_progressBar.m_hWnd) { m_progressBar.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH, rect, &m_wndStatusBar, 8899); //建立水平進度欄
 } else { m_progressBar.MoveWindow(rect);// 也可用SetWindowPos函數,可是相對麻煩些 } m_progressBar.SetPos(70); }

========================================================orm

  讓進度欄動起來對象

        CProgressCtrl的成員函數:SetRange() //設置進度欄範圍 缺省0-100blog

  CProgressCtrl的成員函數:SetStep()// 設置步長索引

  CProgressCtrl的成員函數: StepIt() //使進度條按照SetStep()設定的步長動起來class

==========================================================變量

  讓鼠標的座標點顯示在狀態欄中。

       狀態欄是屬於CMainFrame的,而鼠標活動在View層,所以須要在View類中增長一個消息,WM_MOUSEMOVE,在消息處理函數中

#include "MainFrm.h"
void CPropView::OnMouseMove(UINT nFlags, CPoint point) { CString str; str.Format(L"x=%ld,y=%ld",point.x,point.y); /*注意變量的訪問權限問題*/
    //((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowTextW(str); //方法1:將指定文本顯示在狀態欄最長的一個窗格中 //((CMainFrame*)GetParent())->SetMessageText(str); //方法2:調用CMainFrame::SetMessageText() 將文本設定在狀態欄索引值爲0的窗格中 //((CMainFrame*)GetParent())->GetMessageBar()->SetWindowTextW(str); //方法3:不須要修改變量的保護級別。 // 可能須要將成員變量m_wndProgressBar從Protected 修改成Publi才能用
    GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowTextW(str); //方法4 用CMainWnd的成員函數
 CView::OnMouseMove(nFlags, point); }
相關文章
相關標籤/搜索