MFC--状态栏中鼠标坐标会实时变化,时间也会跟随系统变化

 

 

创建状态框

第一步:

在资源文件的string table中新加入两个ID,

 第二步:

在xxxxxdlg.h中加入  

 CStatusBar m_bar;

 CRect rect;

第三步:

初始化文本框格式,

m_bar.Create(this);
	m_bar.SetIndicators(indicators, 3);
	GetClientRect (&rect);
	CString s1;
	m_bar.SetPaneInfo(0, IDS_STRING101, SBPS_POPOUT, rect.Width() / 3);//用来设置风格的函数
	m_bar.SetPaneInfo(1, IDS_STRING102, SBPS_POPOUT, rect.Width() - 500);
	m_bar.SetPaneText(2, s1, 1);	//设置状态栏的窗格文本
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);

//如果要直接抄答案,这个就不用管了,看下面的初始化 

创建反映鼠标和坐标的函数

第一步:

在xxxxxdlg.h中加入      CTime t;

第二步:更新初始化的代码

HCURSOR CStatusbarDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
void CStatusbarDlg::InitStatus()
{
	m_bar.Create(this);
	m_bar.SetIndicators(indicators, 3);
	GetClientRect (&rect);
	CString s1;
	t = CTime::GetCurrentTime();
	s1 = t.Format("%Y年%m月%d日 %H:%M:%S");	//转换格式函数
	m_bar.SetPaneInfo(0, IDS_STRING101, SBPS_POPOUT, rect.Width() / 3);//用来设置风格的函数
	m_bar.SetPaneInfo(1, IDS_STRING102, SBPS_POPOUT, rect.Width() - 500);
	m_bar.SetPaneText(2, s1, 1);	//设置状态栏的窗格文本
	SetTimer(1, 1000, NULL);	//设置时间间隔的函数,
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);
	这个函数的功能是将可用的客户区区域信息放到消息WM_SIZEPARENT的消息参数里,然后枚举本窗口的所有子窗口,
	//给每个子窗口 (除掉一个特定的子窗口,相当于上文提到的最后一个子窗口)都发送这个消息,
	//每个响应这个消息的子窗口都会把可用客户区切去一块。最后把那个特定的子窗口的尺寸和位置
	//	调整到刚好放在最后剩下的可用区域里

}

第三步:写一个输出时间的函数

void CStatusbarDlg::showtime()
{
	CString s;
	t = CTime::GetCurrentTime();
	s = t.Format("%Y年%m月%d日 %H:%M:%S"); //转换格式函数
	m_bar.SetPaneText(2, s, 1);//设置状态栏的窗格文本
}
void CStatusbarDlg::OnTimer(UINT_PTR nIDEvent)
{
	switch (nIDEvent)
	{
		case1:
		{
			showtime();
		break;
		}
	default:
		break;
	}
	CDialogEx::OnTimer(nIDEvent);
}

 第四步:写关于鼠标的函数

void CStatusbarDlg::OnMouseMove(UINT nFlags, CPoint point)
{

	//TODO: 在此添加消息处理程序代码和/或调用默认值
	CString s;
	CDC* pDC = GetDC();//CDC类定义的是设备上下文对象的类,CDC对象的成员函数进行所有的绘图。
	s.Format(_T("X = %d,y=%d"), point.x, point.y);//unicode环境下
	m_bar.SetPaneText(0, s);
	ReleaseDC(pDC);
	CDialogEx::OnMouseMove(nFlags, point);

}

步骤到这就结束了:

如果写完这些东西发现根本就没有状态框出现,那可能是缺少宏

BEGIN_MESSAGE_MAP(CStatusbarDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_TIMER()
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

就是可能缺少这些东西,看情况叭

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值