现在的位置: 首页 > 综合 > 正文

Wtl中实现状态栏显示进度条

2013年12月13日 ⁄ 综合 ⁄ 共 1291字 ⁄ 字号 评论关闭

根据网上http://blog.csdn.net/yjkwf/article/details/5387444提供的方法。我模仿着修改了一个适用于在WTL中状态栏显示进度条的方法。供大家赏玩。

 

BOOL EKCreateProgressBar(

CProgressBarCtrl* pProgressCtrl,
CStatusBarCtrl* pStatusBar,
LPCTSTR szMessage = NULL,
int nPaneIndex = 0,
int cxMargin = 10,
int cxMaxWidth = -1,
UINT nIDControl = 1
)
{
ATLASSERT(pProgressCtrl);
ATLASSERT(pStatusBar);

//为进度条控件计算目标矩形
CRect rc;
pStatusBar->GetRect(nPaneIndex,&rc);

//定义进度条水平偏移
if (szMessage != NULL)
{
//计算消息文本宽度

CClientDC dc(pStatusBar->m_hWnd);
HFONT hFont = pStatusBar->GetFont();
HFONT hOldFont = dc.SelectFont(hFont);
CSize sizeText;
dc.GetTextExtent(szMessage,lstrlen(szMessage),&sizeText);

dc.SelectFont(hOldFont);
rc.left += sizeText.cx + cxMargin;
}
//计算进度条宽度
if (cxMaxWidth != -1)
{
rc.right = rc.left + min(cxMaxWidth,rc.Width());
}

//显示消息文本
pStatusBar->SetText(nPaneIndex,szMessage);
pStatusBar->RedrawWindow();

//创建进度条控件
HWND m_hProg = pProgressCtrl->Create(pStatusBar->m_hWnd,rc,0,WS_CHILD|WS_VISIBLE,0);
if (m_hProg == 0)
{
return FALSE;
}
return TRUE;
}

LRESULT CMainFrame::OnDemoLongTast1(UINT,WPARAM,LPARAM,BOOL&)
{
CProgressBarCtrl wndProgress;
EKCreateProgressBar(&wndProgress,(CStatusBarCtrl*)&GetDlgItem(ID_VIEW_STATUS_BAR),_T("Search Devices..."));
wndProgress.SetRange(0,100);
wndProgress.SetStep(1);
for(int i = 0;i < 100; i++)
{
Sleep(20);
wndProgress.StepIt();
}
return 0;

}

当然这个只是简单的测试之用,后面你可以进行相应的修改,将进度条显示在状态栏的其他方格中。如果你有更好的修改策略也不要忘了告诉我哦!

抱歉!评论已关闭.