MFC定时器、进度条和滑动条

MFC定时器、进度条和滑动条

编码文章call10242025-05-21 12:36:305A+A-

创建和销毁定时器

MFC的CWnd类提供的成员函数SetTimer用于设置并启动定时器。第一个参数是我们设置的定时器ID,第二个参数是定时时间(单位毫秒),第三个参数是回调函数地址(如果设置为NULL,则通过WM_TIMER消息的消息响应函数处理定时事件)。

void CDemoDlg::OnBnClickedBtnStart()
{
	SetTimer(1001, 1000, NULL);
}

void CDemoDlg::OnBnClickedBtnStop()
{
	KillTimer(1001);
}
void CDemoDlg::OnTimer(UINT_PTR nIDEvent)
{
	if (nIDEvent == 1001) {
		CTime now = CTime::GetCurrentTime();

		CString str = now.Format(_T("%Y-%m-%d %H:%M:%S"));
		SetDlgItemText(IDC_STATIC_Show_Time, str);
	}

	CDialogEx::OnTimer(nIDEvent);
}

滑动条控件

用Windows的定时器实现按钮按下滑动条自动增加,到达最大值归零。

初始化:

g_dlg = this;
m_progress.SetRange(0, 100);
m_progress.SetPos(0);

设置定时器,自定义回调函数:

void CDemoDlg::OnBnClickedButnStartProgress() {
	::SetTimer(GetSafeHwnd(), 1002, 10, TimerProc);
	m_btn_start_progress.EnableWindow(FALSE);
}

设置回调函数(固定格式):

VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
	int minv, maxv;
	g_dlg->m_progress.GetRange(minv, maxv);

	int pos = g_dlg->m_progress.GetPos();
	pos++;

	if (pos > maxv) {
		pos = 0;
		::KillTimer(hwnd, 1002);
		g_dlg->m_btn_start_progress.EnableWindow(TRUE);
	}

	g_dlg->m_progress.SetPos(pos);
}

滑动条

一般和静态文本框搭配使用,用于显示

给滑动条添加拖动事件:

void CDemoDlg::OnNMCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	
	m_static_show_slider_value = m_slider.GetPos();

	UpdateData(FALSE);

	*pResult = 0;
}
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4