首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2012中考 | 2012高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 托业 | 雅思 | 专四专八 | 口译笔译 | 博思
GRE GMAT | 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 |
零起点法语 | 零起点德语 | 零起点韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师 | 秘书资格 | 心理咨询师 | 出版专业资格 | 广告师职业水平 | 驾驶员
网络编辑 | 公共营养师 | 国际货运代理人 | 保险从业资格 | 电子商务师 | 普通话 | 企业培训师
营销师
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
化工工程师 | 材料员
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
计算机等级考试
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > C加加 > 复习资料 > 正文

2012年计算机等考二级C++备考笔记(十二)

来源:考试吧Exam8.com) 2012-7-24 10:20:52 考试吧:中国教育培训第一门户 模拟考场

  9.5创建进度条

  MFC中,有一个CProgressCtrl的类,如果要创建一个进度条,首先需要创建一个CProgressCtrl类的对象,然后调用Create成员函数来创建。MSDN中给出了一个相关的实例程序。

  1 CProgressCtrl myCtrl;

  2 // Create a smooth child progress control.

  3 myCtrl.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH, CRect(10,10,200,30),

  4 pParentWnd, 1);

  如何要在状态栏中创建一个进度条?

  状态栏属于框架类,在状态栏中创建进度条,首先同样需要获取创建的区域。这之前需要String表中添加进度条的字串。然后将字串ID添加到:

  1 static UINT indicators[] =

  2 {

  3 ID_SEPARATOR, // status line indicator

  4 ID_INDICATOR_CAPS,

  5 ID_INDICATOR_NUM,

  6 ID_INDICATOR_SCRL,

  7 IDS_PROGRESS,//用来显示进度条区域

  8 };

  为了获取进度条所处于的区域,可以调用GetItemRect函数。

  void GetItemRect(index,LPRECT lprect) const;其中第一个参数为状态栏中网格的在indicators[]中的索引号。由于OnCreate函数实际上是响应的WM_ OnCreate函数,只有在这个函数完成之后才能获取到状态栏的矩形区域。因此需要在此处添加一个消息响应函数,等窗口创建完成之后,发送生成进度条消息。

  MFC的每个标准消息都有一个消息编号,要创新一个新的消息,首先要创建消息编号。

  1、 在Frame的头文件中添加一个消息标识宏#define UM_PROGRESS WM_USER+1;

  2、 按照标准消息的格式和流程,分别在头文件和源文件中添加消息映射。

  头文件

  1 //{{AFX_MSG(CMainFrame)

  2 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

  3 afx_msg void OnTimer(UINT nIDEvent);

  4 afx_msg void OnPaint();

  5 afx_msg void OnProgress();//消息

  6 //}}AFX_MSG

  源文件

  1 //{{AFX_MSG_MAP(CMainFrame)

  2 ON_WM_CREATE()

  3 ON_WM_TIMER()

  4 ON_WM_PAINT()

  5 ON_MESSAGE(UM_PROGRESS,OnProgress) //消息

  6 //}}AFX_MSG_MAP

  3、 在源文件中添加消息响应函数

  1 void CMainFrame::OnProgress()

  2 {

  3 CRect rect;

  4 m_wndStatusBar.GetItemRect(5,&rect);

  5 m_cpc.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,rect,&m_wndStatusBar,123);

  6 m_cpc.SetPos(50);

  7 }

  4、 在源文件的OnCreate函数中添加PostMessage(UM_PROGRESS);

  这样便可以在状态栏动态创建一个进度条。这里有个一SendMessage函数和PostMessage函数的区别说明。

  1、 SendMessage:直接把消息发送给消息响应函数,等消息响应函数处理完之后再返回。

  2、 PostMessage:把消息发送到消息队列,然后立即返回。

  由于OnProgress函数需要在OnCreate执行完之后再响应,因此此处采用PostMessage函数来发送该消息。

  创建进度条完成之后,显示正常,但是如果此时拉动窗口,改变大小,会发现进度条的位置不正确了,为了保证进度条的位置正确,需要添加OnPaint函数。

  01 void CMainFrame::OnPaint()

  02 {

  03 CPaintDC dc(this); // device conText for painting

  04 // TODO: Add your message handler code here

  05 CRect rect;

  06 m_wndStatusBar.GetItemRect(5,&rect);

  07 if(!m_cpc.m_hWnd)

  08 {

  09 m_cpc.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,rect,&m_wndStatusBar,123);

  10 }

  11 else

  12 {

  13 m_cpc.MoveWindow(rect);

  14 }

  15 m_cpc.SetPos(50);

  16 // Do not call CFrameWnd::OnPaint() for painting messages

  17 }

  因此WM_PAINT消息是自动执行的,这样就不需要在OnCreate函数中再添加PostMessage函数来发送消息了。

  完成进度条的创建之后,可以再OnTimer函数中添加代码,实现进度条的动态效果,代码就不贴上来了,都是调用相关函数来实现。

  9.6在状态栏上显示鼠标

  在View类上添加WM_MOUEOVER函数

  1 void CStyleView::OnMouseMove(UINT nFlags, CPoint point)

  2 {

  3 // TODO: Add your message handler code here and/or call default

  4 CString str;

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

  6 ((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);

  7 CView::OnMouseMove(nFlags, point);

  8 }

  这之前需要在View类中引入Frame类的头文件,并将Frame类的m_wndStatusBar设置为public。

  相关推荐:

  2012年计算机等考四级数据库工程师备考笔记汇总

  2012年计算机等级考试二级VB重点知识汇总

  2012年下半年计算机等级考试报名时间及入口汇总

文章责编:renyinan  
看了本文的网友还看了
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。