首页 > 学院 > 开发设计 > 正文

MFC-三个基本控件ProgressControl、ScrollBarControl以及SpinControl

2019-11-06 07:09:20
字体:
来源:转载
供稿:网友

MFC中三个最基本的控件的介绍,它们分别是:PRogressControl、ScrollBarControl以及SpinControl。

1.ProgressControl

实现的功能如下所示: 这里写图片描述 关键代码如下: 开始按钮对应的代码如下所示:

void CProgressDemoDlg::OnBnClickedBtnStart(){ m_progress.SetPos(0); SetTimer(1, 100, nullptr); GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE); /*int nMax, nMin, nPos; m_progress.GetRange(nMin, nMax); for (; nMin<nMax; ++nMin) { m_progress.SetPos(nMin); Sleep(100); }*/}

为了避免界面被卡死的情况,我们还需要添加一个定时器timer,通过类向导添加WM_TIMER消息即可。

void CProgressDemoDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 int nMax, nMin, nPos; m_progress.GetRange(nMin, nMax); nPos = m_progress.GetPos(); ++nPos; if (nPos > nMax) { KillTimer(1); //nPos = 0; GetDlgItem(IDC_BTN_START)->EnableWindow(); } m_progress.SetPos(nPos); CDialogEx::OnTimer(nIDEvent);}

2.ScrollBarContro

实现的功能如下所示: 这里写图片描述

这个控件实现起来稍微有一些麻烦,主要代码如下所示: 通过类向导添加WM_HSCROLL消息,代码如下:

void CScrollBarDemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ // TODO: 在此添加消息处理程序代码和/或调用默认值 SCROLLINFO scrollinfo = { 0 }; scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_ALL; pScrollBar->GetScrollInfo(&scrollinfo); int nNewPos = scrollinfo.nPos; switch (nSBCode) { case SB_THUMBTRACK: // 用户拖动滚动条 nNewPos = nPos; break; case SB_LINELEFT: // 左边的按钮 nNewPos -= 1; break; case SB_LINERIGHT: // 右边的按钮 nNewPos += 1; break; case SB_PAGELEFT: // 按页数向左边滚动 nNewPos -= scrollinfo.nPage; break; case SB_PAGERIGHT: // 按页数向右边滚动 nNewPos += scrollinfo.nPage; break; default: break; } scrollinfo.nPos = nNewPos; pScrollBar->SetScrollInfo(&scrollinfo); if (nNewPos > scrollinfo.nMax) { nNewPos = scrollinfo.nMax; } if (nNewPos < scrollinfo.nMin) { nNewPos = scrollinfo.nMin; } CString str; str.Format(L"滚动条当前的位置是:%d", nNewPos); GetDlgItem(IDC_POS)->SetWindowTextW(str); CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);}

只有这个还不够,我们必须要在初始化对话框函数中添加如下代码:

BOOL CScrollBarDemoDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 SCROLLINFO scrollinfo = { 0 }; scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_RANGE | SIF_PAGE; scrollinfo.nMax = 109; scrollinfo.nMin = 0; scrollinfo.nPage = 10; m_scrollbar.SetScrollInfo(&scrollinfo); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}// TODO: 在此添加额外的初始化代码 SCROLLINFO scrollinfo = { 0 }; scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_RANGE | SIF_PAGE; scrollinfo.nMax = 109; scrollinfo.nMin = 0; scrollinfo.nPage = 10; m_scrollbar.SetScrollInfo(&scrollinfo);

这一段代码是我们需要添加的。

3.SpinControl

实现的功能如下所示: 这里写图片描述 这个基本上不需要什么代码,大概步骤是: 先拖放一个EditControl,然后再拖放一个SpinControl,注意,一定要是这个顺序,因为SpinControl是按照Z顺序来绑定的。如果我们想再放一个这样的功能,那么还是按照前面的顺序拖放即可。 关键的几行代码,在初始化对话框函数中添加如下代码:

BOOL CSpinDemoDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 CSpinButtonCtrl *pSpinDec = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_DEC); pSpinDec->SetRange32(0, 100); CSpinButtonCtrl *pSpinHex = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_HEX); pSpinHex->SetRange32(0, 500); pSpinHex->SetBase(16); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}

本文主要是想说明MFC的一些基本功能,没有做太多详细的说明,比如控件绑定的变量名等并没有做说明!如有错误,请批评指正!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表