您的位置:首页 > 其它

cstatus bar

2013-08-30 16:53 155 查看
CStatusBar(状态栏)

下面我们来创建一个状态栏,然后在状态栏里添加几个分栏,分别放置一个本地时间,一个进度条和一view窗口的当前鼠标位置信息。

现在我们来实现它:

添加变量,当然在主框架类里:

CStatusBar
m_MyStatusBar;
在OnCreate消息里处理创建:
if(!m_MyStatusBar.Create(this,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,301))
{
TRACE0("未能创建状态栏\n");
return-1;//
}
m_MyStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
//这里的indicators是全局的一个结构体:
staticUINTindicators[]=
{
ID_SEPARATOR,
IDS_TIMER,
IDS_PROGRESS,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
//定义为static是为了局部编译
// IDS_TIMER和IDS_PROGRESS,是我们在资源视图里添加的两个字符串

其他的都是系统内置的字符串

紧接着创建之后添加以下代码:
CTimet=CTime::GetCurrentTime();
CStringstr=t.Format("%H:%M:%S");

CClientDCdc(this);
CSizesz=dc.GetTextExtent(str);
intIndex;
Index=m_MyStatusBar.CommandToIndex(IDS_TIMER);
m_MyStatusBar.SetPaneInfo(Index,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_MyStatusBar.SetPaneText(Index,str,TRUE);
这是为了设置系统时间到指定的状态栏分栏里。

虽然状态栏实现了,但是发现时间是静态的,我们要将它动态更新:
在OnCreate消息里添加定时器设置:

SetTimer(1,1000,NULL);

为框架类添加时间响应函数(WM_TIMER):

voidCMainFrame::OnTimer(UINT_PTRnIDEvent)
{

CTimet=CTime::GetCurrentTime();
CStringstr=t.Format("%H:%M:%S");

CClientDCdc(this);
CSizesz=dc.GetTextExtent(str);
intIndex;
Index=m_MyStatusBar.CommandToIndex(IDS_TIMER);
m_MyStatusBar.SetPaneInfo(Index,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_MyStatusBar.SetPaneText(Index,str,TRUE);

//m_progress.StepIt();
CFrameWnd::OnTimer(nIDEvent);
}

好了,现在添加一个进度条:

先要添加一个变量:CProgressCtrlm_progress;

添加一个消息(WM_PAINT):

voidCMainFrame::OnPaint()
{
CPaintDCdc(this);// device context for painting

CRectrect;
m_MyStatusBar.GetItemRect(2,&rect);

if(!m_progress.m_hWnd)
{
m_progress.Create(WS_CHILD|WS_VISIBLE,rect,
&m_MyStatusBar,201);
//m_progress.SetRange(0,100);

}
else
{
m_progress.MoveWindow(rect);
}
m_progress.SetPos(50);
}

在上面的OnTimer消息里添加:m_progress.StepIt();
这样进度条就搞定了。

现在来添加鼠标位置显示功能:
在view类添加消息(WM_MOUSEMOVE)

voidCstatusbarView::OnMouseMove(UINTnFlags,CPointpoint)
{

CStringstr;
str.Format("x=%d,y=%d",point.x,point.y);

GetParent()->GetDescendantWindow(301)->SetWindowText(str);
CView::OnMouseMove(nFlags,point);
}

搞定了,你意下如何?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: