MFC入门 002 滚动条Scorllbar 数字控制框 Spin 进度条 Progress
#滚动条ScorllbarDemo
设置 ID;IDC_SCROLLBAR
//OnInitDialog初始化代码 // 滚动条初始化 SCROLLINFO scrollinfo = { 0 }; scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_RANGE | SIF_PAGE; scrollinfo.nMax = 100; scrollinfo.nMin = 0; scrollinfo.nPage = 10; m_scroll.SetScrollInfo(&scrollinfo);
1 void CScorllbarDemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 2 //nSBCode 判断消息 //鼠标拖动地方 //控制当前滚动条 3 //使用前必须要用 SCROLLINFO 对滚动条信息初始化 4 // 滚动条初始化 5 /* SCROLLINFO scrollinfo = { 0 }; 6 scrollinfo.cbSize = sizeof(SCROLLINFO); 7 scrollinfo.fMask = SIF_RANGE | SIF_PAGE; 8 scrollinfo.nMax = 100; 9 scrollinfo.nMin = 0; 10 scrollinfo.nPage = 10; 11 m_scroll.SetScrollInfo(&scrollinfo); 12 */ 13 { 14 // TODO: 在此添加消息处理程序代码和/或调用默认值 15 //MessageBox(L"滚动条被改变!"); 16 SCROLLINFO scrollinfo = { 0 }; 17 scrollinfo.cbSize = sizeof(SCROLLBARINFO); 18 scrollinfo.fMask = SIF_ALL; 19 pScrollBar->GetScrollInfo(&scrollinfo); 20 int nNewPos = pScrollBar->GetScrollPos(); 21 //POS 位置 22 switch (nSBCode) 23 { 24 25 case SB_THUMBTRACK: //用户拖动滚动条 26 nNewPos = nPos; 27 break; 28 case SB_LINELEFT: //左边的按钮 29 nNewPos -= 1; 30 break; 31 case SB_LINERIGHT: //右边的按钮 32 nNewPos += 1; 33 break; 34 case SB_PAGELEFT: //按页拖动左 35 nNewPos -= scrollinfo.nPage; 36 break; 37 case SB_PAGERIGHT: //按页拖动右 38 nNewPos += scrollinfo.nPage; 39 break; 40 default: 41 break; 42 } 43 if (nNewPos > scrollinfo.nMax) //获取默认位置是否大于 最大值 44 nNewPos = scrollinfo.nMax; 45 if (nNewPos < scrollinfo.nMin) //获取默认位置是否小于 最小值 46 nNewPos = scrollinfo.nMin; 47 scrollinfo.nPos = nNewPos; 48 pScrollBar->SetScrollInfo(&scrollinfo); 49 50 CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); 51 }
#数字控制框 SpinDemo
这个控件有一个属性,就是没有别人活不下去的属性
先拖拽一个 编辑框然后和这个控件 组合使用
设置ID IDC_SPIN_DEC
Auto Buddy 为 True
Set Buddy Integ 为 True
Alignment 设置对其方式
设置编辑框 的 属性 Read Only True 编辑框只读属性
#进度条 ProgressDemo
拖拽控件
Progress 进度条控件
设置ID为 IDC_PROGRESS
Button 按钮控件
设置ID为 IDC_BUT_BEGIN
添加变量 m_porgress
1 //在OnInitDialog 初始化 进度条的范围 2 m_porgress.SetRange32(0,100); 3 4 void CProgressDemoDlg::OnBnClickedButBegin() 5 { 6 // TODO: 在此添加控件通知处理程序代码 7 /* 8 int nMin, nMax, nPos; 9 m_porgress.GetRange(nMin, nMax); 10 for (; nMin < nMax; ++nMin) 11 { 12 m_porgress.SetPos(nMin); 13 Sleep(100); 14 } 15 */ 16 SetTimer(1, 100, nullptr); 17 GetDlgItem(IDC_BUT_BEGIN)->EnableWindow(FALSE); //把按钮设置不可点状态 18 } 19 20 21 void CProgressDemoDlg::OnTimer(UINT_PTR nIDEvent) 22 { 23 // TODO: 在此添加消息处理程序代码和/或调用默认值 24 int nMin, nMax, nPos; 25 m_porgress.GetRange(nMin, nMax); 26 nPos = m_porgress.GetPos(); 27 nPos++; 28 if (nPos > nMax) 29 { 30 KillTimer(1); 31 nPos = 0; 32 GetDlgItem(IDC_BUT_BEGIN)->EnableWindow(TRUE); //把按钮设置成可点状态 33 } 34 m_porgress.SetPos(nPos); 35 CDialogEx::OnTimer(nIDEvent);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 赶AI大潮:在VSCode中使用DeepSeek及近百种模型的极简方法
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地