一.完成界面
运行前:

运行后:


二.工具
(1)滑块

(2)进度条

(3)文本框

(4)文本示例
(5)按钮

三.添加变量

四.添加事件
右键单击主对话框空白部分,打开类向导,选择“消息”,找“WM_HSCROLL”,添加处理程序。

五.代码
dlg.cpp文件:

在这里插入代码片
// OOPEx3Dlg.cpp : 实现文件
// #include "stdafx.h"
#include "OOPEx3.h"
#include "OOPEx3Dlg.h"
#include "afxdialogex.h"
#include"resource.h"
#include"targetver.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx
{
public:
CAboutDlg(); // 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现
protected:
DECLARE_MESSAGE_MAP()
}; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
} void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP() // COOPEx3Dlg 对话框 COOPEx3Dlg::COOPEx3Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_OOPEX3_DIALOG, pParent)
, m_SliderV1(0)
, m_SliderV2(0)
, m_SliderV3(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
} void COOPEx3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_SliderV1);
DDX_Text(pDX, IDC_EDIT2, m_SliderV2);
DDX_Text(pDX, IDC_EDIT3, m_SliderV3);
DDX_Control(pDX, IDC_SLIDER1, m_Slider1);
DDX_Control(pDX, IDC_SLIDER2, m_Slider2);
DDX_Control(pDX, IDC_SLIDER3, m_Slider3);
DDX_Control(pDX, IDC_PROGRESS1, m_CProgress);
} BEGIN_MESSAGE_MAP(COOPEx3Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_HSCROLL()
END_MESSAGE_MAP() // COOPEx3Dlg 消息处理程序 BOOL COOPEx3Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 m_Slider1.SetRange(0, 150);///滑块1的范围
m_Slider1.SetTicFreq(15);///刻度
m_Slider1.SetPos(0);///初始指在0刻度上 m_Slider2.SetRange(0, 255);///滑块2
m_Slider2.SetTicFreq(15);
m_Slider2.SetPos(0); m_Slider3.SetRange(0, 125);///滑块3
m_Slider3.SetTicFreq(15);
m_Slider3.SetPos(0); m_CProgress.SetRange(0, 100);///进度条的范围 // 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: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} void COOPEx3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
} // 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。 void COOPEx3Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
} //当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR COOPEx3Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
} void COOPEx3Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 UpdateData(TRUE); CString str; m_SliderV1 = m_Slider1.GetPos();///获取滑块1的刻度
str.Format(_T("%d"), m_SliderV1);///转化为字符串
SetDlgItemText(IDC_EDIT1, str);///显示在编辑框1中 m_SliderV2 = m_Slider2.GetPos();
str.Format(_T("%d"), m_SliderV2);
SetDlgItemText(IDC_EDIT2, str); m_SliderV3 = m_Slider3.GetPos();
str.Format(_T("%d"), m_SliderV3);
SetDlgItemText(IDC_EDIT3, str); int tmp = 0;///设置个变量计数,每符合一个条件计数++
if (this->m_Slider1.GetPos() == 150)
tmp++;
if (this->m_Slider2.GetPos() == 255)
tmp++;
if (this->m_Slider3.GetPos() == 125)
tmp++;
if (tmp == 0)///没有条件满足,进度为0
this->m_CProgress.SetPos(0);
if (tmp == 1)///只有一个条件满足,进度为1/3
this->m_CProgress.SetPos(33.3);
if (tmp == 2)///2个条件满足,进度为2/3
this->m_CProgress.SetPos(66.6);
if (tmp == 3)///三个条件全部满足,进度为100%
this->m_CProgress.SetPos(100); UpdateData(FALSE); CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

六.注意问题(本人踩过的坑)
(1)


void COOPEx3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_SliderV1);
DDX_Text(pDX, IDC_EDIT2, m_SliderV2);
DDX_Text(pDX, IDC_EDIT3, m_SliderV3);
DDX_Control(pDX, IDC_SLIDER1, m_Slider1);
DDX_Control(pDX, IDC_SLIDER2, m_Slider2);
DDX_Control(pDX, IDC_SLIDER3, m_Slider3);
DDX_Control(pDX, IDC_PROGRESS1, m_CProgress);
}

如果报错"=",则说明没有包含#include “resource.h”,所以要在有文件加入。
(2)
我在添加变量的时候没有注意变量类型所以重新做了几次。

MFC3 基本对话框的使用(三) 滑块与进度条(sdnu)(C++大作业)的更多相关文章

  1. 第三周学习进度条+PSP0过程文档

    第三周学习进度条    第三周 所花时间(包括上课) 14:30-15:35(65)+19:00-21:20(140)+17:52-19:00(68)+19:10-20:45(95)+21:00-22 ...

  2. MFC_2.3 定时器、滑块、进度条控件

    定时器.滑块.进度条控件 1.拖控件 2.绑定变量.默认,然后取名字 3.初始化设置定时器 // 设置滑块和进度条的范围 m_TrackBar.SetRange(0, 1000); m_StaticP ...

  3. mui 滑块开关 进度条 以及如何获取值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. WPF仿网易云音乐系列(三、播放进度条+控制按钮)

    一.简介 上一篇,咱们基本把左侧导航栏给搞定,这一篇文章,开始来做一下播放进度条和控制按钮:老规矩,咱们先来看一下原版的效果: 首先,它这个专辑图片,有一个按钮效果,鼠标移入会显示出伸缩箭头:移出后消 ...

  5. android学习笔记20——ProgressDialog进度条对话框

    ProgressDialog==>进度条对话框 ProgressDialog本身就代表一个进度条对话框,程序只需要创建ProgressDialog实例,并将其显示出来就是一个进度条对话框:开发者 ...

  6. 025 Android 带进度条的对话框(ProgressDialog)

    1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...

  7. AlertDialog之常见对话框(单选对话框、多选对话框、进度条对话框)

    单选对话框,顾名思义就是只能选一项(setSingleChoiceItems(Items,)) public void click(View v){ //创建对话框类 AlertDialog.Buil ...

  8. ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单封装网络请求时的加载对话框以及上传.下载文件的进度加载对话框. 效果图 代码分析 ProgressWheel : 自定义view ...

  9. 实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress

    在上一篇内容中我们介绍了三种常用的MessageBox提示框,在这篇文章中,我们将演示如何在对话框中使用进度条. 进度条对话框 我们可以使用下面的代码来在MessageBox中显示一个进度条: Ext ...

随机推荐

  1. Thinkphp V5.X 远程代码执行漏洞 - POC(搬运)

    文章来源:lsh4ck's Blog 原文链接: https://www.77169.com/html/237165.html Thinkphp 5.0.22   http://192.168.1.1 ...

  2. 当你在浏览器输入一个网址(如http://www.taobao.com),按回车之后发生了什么?

    首先你输入了一个网址并按下了回车,这个时候浏览器会根据这个URL去查找其对应的IP,具体过程如下: 首先是查找浏览器缓存,浏览器会保存一段时间你之前访问过的一些网址的DNS信息,不同浏览器保存的时常不 ...

  3. Python 反序列化漏洞学习笔记

    参考文章 一篇文章带你理解漏洞之 Python 反序列化漏洞 Python Pickle/CPickle 反序列化漏洞 Python反序列化安全问题 pickle反序列化初探 前言 上面看完,请忽略下 ...

  4. sql语句执行次序

    from→on→join→where→group by→having→select→distinct→order by→limit

  5. Django Uwsgi Nginx 部署

    1.django的settings配置 参照博客 https://www.cnblogs.com/xiaonq/p/8932266.html # 1.修改配置 # 正式上线关闭调试模式, 不会暴露服务 ...

  6. 牛客挑战赛46 C

    题目链接: 排列 考虑\(dp\),我们思考如何设计状态 将第i个数插入i-1个数中,我们考虑会新增多少个超级逆序对 假设将\(i\)插入后\(i\)的位置为\(l\),\(i-1\)的原来的位置为\ ...

  7. 交换机配置OSPF负载分担

    组网图形 OSPF负载分担简介 等价负载分担ECMP(Equal-Cost Multiple Path),是指在两个网络节点之间同时存在多条路径时,节点间的流量在多条路径上平均分摊.负载分担的作用是减 ...

  8. js下 Day01、DOM对象,BOM浏览器对象模型

    一.初识DOM 1.什么是DOM?为什么学习DOM 2.DOM是实现js在网页实现交互的关键环节,我们的js代码就是通过DOM的方法来实现对于html内容的操作. 3.认识DOM实现了js和网页结合的 ...

  9. Websocket---认识篇

    为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答 ...

  10. kvm环境部署及常用指令

    Linux下通过kvm创建虚拟机,通过vnc连接,做好配置后,通过ssh登录,并开启iptables Kvm虚拟化搭建教程参考链接:https://jingyan.baidu.com/article/ ...