Windows编程基础--第17节 MFC之状态栏(CStatusBar)
来源:互联网 发布:凯文先生的淘宝店 编辑:程序博客网 时间:2024/06/06 01:18
Windows编程基础–第17节 MFC之状态栏(CStatusBar)
1、CStatusBar在MFC中类继承关系:
CObject
CCmdTarget
CWnd
CControlBar
CStatusBar
2、CStatusBar成员函数介绍:
virtual BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR );
函数用途:创建一个CStatusBar并将其与CStatusBar对象关联;
参数说明:pParentWnd:指向CStatusBar的父窗口(Windows窗口);
dwStyle:CStatusBar的类型,CBRS_TOP:将Bar放在框架的顶部,CBRS_BOTTOM:将其放在框架的底部。CBRS_NOALIGN:当父窗口改变时,不重型调整Bar;
nID:toolbar的子窗口ID; 返回值:成功返回非零,否则返回零;
BOOL SetIndicators( const UINT* lpIDArray, int nIDCount );
函数用途:加载lpIDArray中的ID所对应的字符串资源,并将ID所对应的文本保存在字符串资源中;
参数说明:lpIDArray:ID队列指针
nIDCount:队列中元素的个数; 返回值:成功返回非零,否则返回零;
BOOL SetPaneText( int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE );
函数用途:将CStatustBar中的长方块设置成lpszNewText所指向的内容;
参数说明:nIndex:长方块的索引号(从零开始计,第零个固定用来状态指示)
lpszNewText:需要加载的内容;(需要在第nIndex个长方块上显示的字符串)
bUpdate:等于TRUE时,当加载了新的字符内容后,将长方块设置为无效。无效使得窗口自动刷行,那么新内容就被显示在界面上了。
void GetItemRect( int nIndex, LPRECT lpRect ) const;
函数用途:将nIndex所在的位置的矩形坐标拷贝到lpRect中。 参数说明:nIndex:长方块的标识;
lpRect:指向Rect结构的指针,用来保存获得到的矩形坐标; 返回值:无 注意:坐标是以象素为单位的,原点在左上角。
void GetPaneInfo( int nIndex, UINT& nID, UINT& nStyle, int& cxWidth ) const;
函数用途:
获得Pane的相关信息:ID,Style,宽度。
参数说明:
nIndex:需要获得的Pane的索引
nID:nIndex所对应Pane的ID
nStyle:nIndex对应的Pane的类型;
cxWidth:nIndex对应的Pane的宽度; 返回值:无
void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWidth );
函数说明:设置Pane的相关信息; 参数说明:nIndex:需要设置的Pane的索引; 其余和5相同; 返回值:无
void SetPaneStyle( int nIndex, UINT nStyle );
函数说明:设置Pane的类型 参数说明:nIndex:需要设置的Pane的索引 nStyle:类型; 返回值:无
nStyle的值可以为:
CBRS_TOP Control bar is at top of frame window.
CBRS_BOTTOM Control bar is at bottom of frame window.
CBRS_NOALIGN Control bar is not repositioned when the parent is resized.
UINT GetPaneStyle( int nIndex ) const;
函数说明:获得Pane的类型参数说明:nIndex:需要获得的Pane的索引返回值:无举例:生成一个MFC应用程序,参照如下说明修改代码:static UINT indicators[] ={ ID_SEPARATOR, // 状态行指示器 ID_INDICATOR_CLOCK, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,};说明:indicator数组提供了状态栏窗格的分配信息,它的第一项一般为ID_SEPARATOR,该ID对应的窗格用来显示命令提示信息,后三项都是字符串ID,读者可以在String Table字符串资源中找到这三个字符串分别是CAP、NUM和SCRL。它们对应的三个窗格用来显示键盘的状态。
1. 新建项目
新建一个基于对话框项目“day19”,布局如下,自行处理:
2.添加状态栏
切换到解决方案视图,进入day19Dlg.h头文件,添加一个CStatusBar成员变量(CStatusBar m_statusBar;),如下图:
现在进入BOOL Cday19Dlg::OnInitDialog()初始化函数中创建状态栏,在return前添加如下代码:
m_statusBar.Create(this); UINT nID[] = {10000,10001}; m_statusBar.SetIndicators(nID,2); m_statusBar.SetPaneInfo(0,10000,SBPS_NORMAL,100); m_statusBar.SetPaneInfo(1,10001,SBPS_STRETCH,0); RECT rect={0}; GetClientRect(&rect); m_statusBar.MoveWindow(0,rect.bottom - 30,rect.right,30,TRUE);
代码解释:
1.创建一个状态栏到当前窗体;
2.创建两个状态栏Pane的ID;
3.在状态栏上添加两个Pane,分别为正常模式,长度为100,另一个自动填充模式;
4.获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对窗口客户区的左上角而言的,因此左上角坐标为(0,0)。这里应该注意一下:坐标包含两种:屏幕坐标与客户区坐标。严格区分这两种坐标对于理解Windows编程是很重要的。
5.将状态栏设置到窗口的距离底部30,长度为窗口长度,高度为30的位置;
运行结果:
可以看到下方已经有了状态栏;
3.实现状态栏方法
编辑EDIT控件的属性:
添加EDIT控件的变量,如图所示:
添加EDIT控件的OnEnChange消息处理方法:
编辑EDIT控件的OnEnChange消息处理方法:
void Cday19Dlg::OnEnChangeEdit1(){ // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 int nLen = m_edit.GetWindowTextLength(); int linecount=m_edit.GetLineCount(); CString strText; strText.Format(_T("字数: %d 行数: %d"),nLen,linecount); m_statusBar.SetPaneText(1,strText,TRUE);}
代码解释:
1.获取文本框中的文本长度;
2.获取文本框中的文本行数;
3.格式化文本后设置到状态栏第二个Pane中;
最终效果图:
项目源码可以访问我的码云
>>>我的私人博客<<<
- Windows编程基础--第17节 MFC之状态栏(CStatusBar)
- MFC的状态栏CStatusBar编程
- MFC之状态栏操作CStatusBar类
- MFC-CStatusBar(状态栏)
- Windows编程基础--第13节 MFC之图片控件
- Windows编程基础--第18节 MFC之窗体操作
- Windows编程基础--第19节 MFC之自定义消息
- MFC对话框CDialog中使用CStatusBar状态栏
- MFC中状态栏CStatusBar的使用
- Windows编程基础--第11节 MFC之列表控件CListCtrl
- Windows编程基础--第12节 MFC之树控件CTreeCtrl
- Windows编程基础--第14节 MFC之文件对话框CFileDialog
- Windows编程基础--第15节 MFC之复选框及单选按钮
- Windows编程基础--第16节 MFC之SendMessage和PostMessage
- Windows编程基础--第3节 初探MFC
- Windows编程基础--第4节 MFC消息映射机制
- Windows编程基础--第5节 MFC对话框程序
- Windows编程基础--第10节 MFC菜单
- redis设计与实现(六)整数集合
- 静态库与动态库使用与区别
- 深入理解JVM之虚拟机类加载机制
- 如何简单使用Git上传本地项目到github
- 可能是史上最好用的 Java 文件操作帮助类
- Windows编程基础--第17节 MFC之状态栏(CStatusBar)
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- 自定义view的矩形 阶梯状 画笔 画布
- Eclipse
- AsyncTask异步工具类
- Nginx简介
- 总结
- java的基本算法
- 排序2