VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 419|回复: 2

VC++基础班-[19]对话框的状态栏操作

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-1-28 21:16:09 | 显示全部楼层 |阅读模式
------------------------------------------ Begin ----------------------------------------

让对话框的状态栏显示时钟、鼠标位置、鼠标点的颜色信息等……

①、添加字符串资源:
ID_INDICATOR_POS=鼠标所在位置
ID_INDICATOR_COLOR=鼠标位置颜色
ID_INDICATOR_TIME=当前系统时间

②、在对话框类头文件中进行状态栏对象的定义:CStatusBar m_wndStatusBar;
③、定义窗格数组:
  1. static UINT indicators[] =
  2. {
  3.         ID_INDICATOR_POS,                //鼠标所在位置
  4.         ID_INDICATOR_COLOR,        //鼠标位置颜色
  5.         ID_INDICATOR_TIME                //当前系统时间
  6. };
复制代码


④、在对话框类的初始化函数 OnInitDialog() 中进行状态栏的创建:
  1. if (!m_wndStatusBar.CreateEx(this) ||
  2.         !m_wndStatusBar.SetIndicators(indicators,
  3.         sizeof(indicators)/sizeof(UINT)))
  4. {
  5.         TRACE0("Failed to create status bar\n");
  6.         return -1;      // fail to create
  7. }

  8. CRect rect;
  9. GetClientRect(&rect);

  10. m_wndStatusBar.SetPaneInfo(0, ID_INDICATOR_POS, SBPS_NORMAL, rect.Width()/3);
  11. m_wndStatusBar.SetPaneInfo(1, ID_INDICATOR_COLOR, SBPS_STRETCH , rect.Width()/3);
  12. m_wndStatusBar.SetPaneInfo(2, ID_INDICATOR_TIME, SBPS_STRETCH , rect.Width()/3);

  13. RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);
复制代码


⑤、在按钮想响应函数中启动定时器:SetTimer(1, 50, NULL);
⑥、响应对话框类的 WM_TIMER 消息;
⑦、在 OnTimer 中添加如下代码:
  1. if (nIDEvent == 1){
  2.         //显示时间信息
  3.         CTime mTime;
  4.         mTime = CTime::GetCurrentTime();
  5.         m_wndStatusBar.SetPaneText(2, mTime.Format(_T("%H:%M:%S")));

  6.         //显示鼠标坐标信息
  7.         CPoint pt;
  8.         GetCursorPos(&pt);
  9.         CString strPos;
  10.         strPos.Format(_T("x = %d, y = %d"), pt.x, pt.y);
  11.         m_wndStatusBar.SetPaneText(0, strPos);

  12.         //显示鼠标所在位置的颜色信息
  13.         HDC hDc = ::GetDC(NULL);
  14.         COLORREF clr = ::GetPixel(hDc, pt.x, pt.y);
  15.         CString strColor;
  16.         strColor.Format(_T("R = %d, G = %d, B = %d"), GetRValue(clr), GetGValue(clr), GetBValue(clr));
  17.         m_wndStatusBar.SetPaneText(1, strColor);
  18. }
复制代码

  1. ⑧、重载对话框类的 OnCancel() 函数,进行定时器的销毁工作:
复制代码
KillTimer(1);

------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:https://www.cctry.com/thread-17282-1-1.html
VC驿站Vip会员详情请见:https://www.cctry.com/static/vip/index.html




上一篇:VC++基础班-[18]对话框的工具栏操作
下一篇:VC++基础班-[20]实现一个简单的计算器

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 05:09

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表