MFCSDI单文档状态栏进度条启动画面编程技巧.

MFC SDI单文档状态栏进度条启动画面编程技巧
状态栏的编程离不开CStatusBar类CProgressCtrl 进度条相关的控件下面我们介绍状态栏编程技巧以及在状态栏添加进度条应用程序的启动界面
状态栏的添加步骤SDI 单文档中下面是MFC给的状态栏的创建步骤
Construct the CStatusBar object.
构造一个CStatusBar对象
Call the Create (or CreateEx function to create the status-bar window and attach it to the CStatusBar object.
调用CreateEx函数创建一个状态栏
Call SetIndicators to associate a string ID with each indicator
调用SetIndicators 为每个指示器附加一个字符串资源ID static UINT indicators[]={ ........
};
胡舒立1. 下面是在框架类的处理添加我们自己的状态栏指示器我们可以定义自己的指示器数组
static UINT indicator[] =
{
ID_SEPARATOR, // status line indicator 最长的那个格索引为0
ID_INDICATOR_CAPS, //每个代表一个字符串资源
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
...... //这里增加字符串资源会反映到状态栏
};
OnCreate(LPCREATESTRUCTION lp函数中有如下代码
if (!m_wndStatusBar.Create(this || //创建
!m_wndStatusBar.SetIndicators(indicator, //设置指示器的个数
sizeof(indicator/sizeof(UINT
{
TRACE0("Failed to create status bar\n";
return -1; // fail to create
}
2.给状态栏指定ID号的指示器增加时间这时候用到CTime类获得系统时间下面是代码CStatusBar m_statusBar; 在相应WM_PAINT消息相应函数OnPaint SetTimer(1000,1000,NULL;
捕获WM_TIMER消息在OnTimer函数中添加如下代码
CTime time=CTime::GetCurrentTime(;// 经过静态方法返回一个CTime对象
CString str=time.Format("%H:%M:%S"; //格式化时间到str CClientDC dc(this; //创建一个框架类的dc
CSize size=dc.GetTextExtent(str; //获得字符串中在屏幕上显示的尺寸
int index =m_wndStatusBar.CommandToIndex(IDS_TIMER; //通过ID获取索引m_wndStatusBar.SetPaneInfo(index,IDS_TIMER,SBPS_; //设置指示器的宽度
m_wndStatusBar.SetPaneText(index,str; //设置指定索引指示器的文本
chinese农村ree3.在状态栏的IDS_PROGRESS上添加一个进度条CProgressCtrl 类在框架类增加变量CProgressCtrl m_progress;
在OnPaint函数添加代码响应WM_PAINT消息
CRect rect; //创建CRect对象
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS ,▭ //获得一个指定索引的指示器的矩形区域
if(!m_progress.m_hWnd //判断句柄是否为空
{
m_progress.Create(PBS_SMOOTH|WS_CHILD|WS_VISIBLE,rect,&m_wndStatusBar,1 23; //如果句柄为空那么创建进度条
}
else
{
m_progress.MoveWindow(▭ //否则移动到当前区域
}
m_progress.SetPos(50; //设置进度条初始位置50
在OnTimer函数中加上m_stausBar.StepIt(;//进度条按指定步长一秒前进一次
安桥606
4.在最长的指示器上显示视图的X Y坐标我们需要相应视图的WM_MOUSEMOVE 事件并且调用框架类的函数执行汕尾发展论坛
#include "MainFrm.h"
void CMyView::OnMouseMove(UINT nFlags, CPoint point
{
CString str="";
str.Format("x=%d,y=%d",point.x,point.y;
// (((CMainFrame*GetParent(->m_wndStatusBar.SetWindowText(str; //直接通过状态栏指针设置索引为0指示器
/
/ (((CMainFrame*GetParent(->m_wndStatusBar.SetPaneText(0,str; //设置按钮文本索引为0
// ((CMainFrame*GetParent(->SetMessageText(str;//框架类的函数直接设置索引为0的状态栏指示器文本
上海吴凡被网暴// ((CMainFrame*GetParent(->GetMessageBar(->SetWindowText(str; //通过框架类函数获得状态栏指针然后调用SetWindowText设置文本
GetParent(->GetDescendantWindow(AFX_IDW_STATUS_BAR->SetWindowText(str ; //CWnd类的函数获得一个子孙窗体的指针我们可以传递状态栏ID获得
CView::OnMouseMove(nFlags, point;
}
斩波器5.增加启动画面我们可以利用向导增加之后我们自行设置启动画面的style
project->add to project ->comments controls 添加-> vc++ components -> splash screen
就完成了启动画面的添加
对于启动时间画面我们可以自行在生成的类中设置

本文发布于:2024-09-21 11:10:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/399625.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:状态栏   指示器   函数   设置   进度条   启动   添加   画面
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议