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);
}
搞定了,你意下如何?
下面我们来创建一个状态栏,然后在状态栏里添加几个分栏,分别放置一个本地时间,一个进度条和一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);
}
搞定了,你意下如何?
相关文章推荐
- 设置FormPanle的topBar或bottomBar的status (JS)
- Status bar and navigation bar appear over my view's bounds in iOS 7
- Showing progress bar in a status bar pane
- Android使用fitsSystemWindows属性实现--状态栏【status_bar】各版本适配方案
- 给Flex 4的 Spark Panel 添加titlebar status
- 《Android开发从零开始》——40.Status Bar Notifications
- Status Bar Notification
- Android使用fitsSystemWindows属性实现–状态栏【status_bar】各版本适配方案
- 《Android开发从零开始》——19.Status Bar Notifications学习
- View controller-based status bar appearance
- 《iOS Human Interface Guidelines》——The Status Bar
- S 7 - Status bar overlaps the view
- Customizing Navigation Bar and Status Bar
- CExtStatusControlBar - Managing status bar's panes is getting easier
- Status Bar Notifications(StatusBarNotification)
- How to: Display Command Information in the Status Bar在状态栏中显示命令信息
- Android使用fitsSystemWindows属性实现--状态栏【status_bar】各版本适配方案
- Android-transulcent-status-bar总结
- 认识头部和部件 status_bar.xml
- Android之Status bar notification基础学习