19.对话框的状态栏操作

让对话框的状态栏显示时钟、鼠标位置、鼠标点的颜色信息
1 添加字符串资源
ID_INDICATION_POS = 鼠标所在位置
ID_INDICATION_COLOR = 鼠标位置颜色
ID_INDICATION_TIME = 当前系统事件
2.在对话框类的头文件中进行状态栏对象的定义
CStatusBar mWndStatusBar;
3.定义窗格数组
static UINT indicators[] =
{
ID_INDICATION_POS,//鼠标所在位置
ID_INDICATION_COLOR,// 鼠标位置颜色
ID_INDICATION_TIME//当前系统事件
};
4.在对话框源文件的初始化函数中添加以下代码

if (!mWndStatusBar.CreateEx(this) || !mWndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT)))
	{
		return false;
	}

	CRect rect;
	GetClientRect(&rect);//状态栏矩形大小

	mWndStatusBar.SetPaneInfo(0, ID_INDICATION_POS, SBPS_NORMAL, rect.Width() / 3);
	mWndStatusBar.SetPaneInfo(1, ID_INDICATION_COLOR, SBPS_STRETCH, rect.Width() / 3);
	mWndStatusBar.SetPaneInfo(2, ID_INDICATION_TIME, SBPS_STRETCH, rect.Width() / 3);
									// TODO: 在此添加额外的初始化代码
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);

5.在按钮响应函数中启动定时器
SetTimer(1, 50, NULL);//响应定时器
6.响应对话框的WM_TIMER消息,在OnTimer中添加如下代码

//获取当前时间
	CTime mTime;
	mTime = CTime::GetCurrentTime();
	
	mWndStatusBar.SetPaneText(2, mTime.Format(_T("%H:%M:%S")));
	//获取当前鼠标位置
	CPoint mPt;
	GetCursorPos(&mPt);
	CString strPos;
	strPos.Format(_T("x=%d,y=%d"), mPt.x, mPt.y);
	mWndStatusBar.SetPaneText(0, strPos);
	//获取当前颜色
	HDC hDc = ::GetDC(NULL);
	COLORREF clr = ::GetPixel(hDc, mPt.x, mPt.y);
	CString strColor;
	strColor.Format(_T("R = %d,G = %d,B = %d"), GetRValue(clr), GetGValue(clr), GetBValue(clr));
	mWndStatusBar.SetPaneText(1, strColor);

7.重载对话框的OnCancel()函数,在OnCancel中添加如下代码,销毁定时器
KillTimer(1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值