MFC-三个基本控件ProgressControl、ScrollBarControl以及SpinControl
来源:互联网 发布:网络喷子都是穷人 编辑:程序博客网 时间:2024/06/16 04:41
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的一些基本功能,没有做太多详细的说明,比如控件绑定的变量名等并没有做说明!如有错误,请批评指正!
1 0
- MFC-三个基本控件ProgressControl、ScrollBarControl以及SpinControl
- MFC-三个基本控件EditControl、CheckBoxControl以及ComBoxControl
- MFC-三个基本控件、SliderControl、HotKey以及ListControl
- MFC-ProgressControl(进度条)
- MFC-SpinControl(数值调节按钮)
- MFC-SpinControl(数值调节按钮)
- SpinControl控件与动态画图
- SpinControl
- MFC-两个基本控件:TreeControl以及RichControl
- MFC-两个基本控件:DateTimeControl以及CalendarControl
- mfc基本控件用法
- MFC控件基本用法
- MFC 基本控件使用
- Android控件的三个基本属性...
- MFC基本控件及使用
- MFC基本常用控件基本用法
- MFC基本常用控件基本用法
- MFC基本常用控件基本用法
- AC自动机
- AC自动机
- Manacher算法
- 数据结构初学者顺序表的操作(精简版)
- KMP算法
- MFC-三个基本控件ProgressControl、ScrollBarControl以及SpinControl
- 字符串
- 关于apk基本的反编译回编译
- 二维KMP
- 使用import scope解决maven继承(单)问题
- 字符串hash
- 字符串hash + 二分答案
- jQuery 选择器
- SylixOS下DBUS替换方案