MFC3 基本对话框的使用(三) 滑块与进度条(sdnu)(C++大作业)
一.完成界面
运行前:

运行后:

二.工具
(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++大作业)的更多相关文章
- 第三周学习进度条+PSP0过程文档
第三周学习进度条 第三周 所花时间(包括上课) 14:30-15:35(65)+19:00-21:20(140)+17:52-19:00(68)+19:10-20:45(95)+21:00-22 ...
- MFC_2.3 定时器、滑块、进度条控件
定时器.滑块.进度条控件 1.拖控件 2.绑定变量.默认,然后取名字 3.初始化设置定时器 // 设置滑块和进度条的范围 m_TrackBar.SetRange(0, 1000); m_StaticP ...
- mui 滑块开关 进度条 以及如何获取值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- WPF仿网易云音乐系列(三、播放进度条+控制按钮)
一.简介 上一篇,咱们基本把左侧导航栏给搞定,这一篇文章,开始来做一下播放进度条和控制按钮:老规矩,咱们先来看一下原版的效果: 首先,它这个专辑图片,有一个按钮效果,鼠标移入会显示出伸缩箭头:移出后消 ...
- android学习笔记20——ProgressDialog进度条对话框
ProgressDialog==>进度条对话框 ProgressDialog本身就代表一个进度条对话框,程序只需要创建ProgressDialog实例,并将其显示出来就是一个进度条对话框:开发者 ...
- 025 Android 带进度条的对话框(ProgressDialog)
1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...
- AlertDialog之常见对话框(单选对话框、多选对话框、进度条对话框)
单选对话框,顾名思义就是只能选一项(setSingleChoiceItems(Items,)) public void click(View v){ //创建对话框类 AlertDialog.Buil ...
- ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单封装网络请求时的加载对话框以及上传.下载文件的进度加载对话框. 效果图 代码分析 ProgressWheel : 自定义view ...
- 实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress
在上一篇内容中我们介绍了三种常用的MessageBox提示框,在这篇文章中,我们将演示如何在对话框中使用进度条. 进度条对话框 我们可以使用下面的代码来在MessageBox中显示一个进度条: Ext ...
随机推荐
- DVWA学习笔记
原来装的DVWA没有认认真真地做一遍,靶场环境也有点问题了,到github上面重新下载了一遍:https://github.com/ethicalhack3r/DVWA 复习常见的高危漏洞,产生,利用 ...
- 重磅!Panda Global获悉立陶宛下周将发行区块链数字货币!
近日,Panda Global从路透社获悉,立陶宛将在下周开始预售2.4万枚由央行发行的数字货币.该名为LBCoin的数字货币基于区块链技术生产,也是该国试点具有国家支持背景的数字货币和区块链技术的项 ...
- Java为什么称为动态编译?
Java在程序运行时产生Java类并编译成.class文件.
- 最新快手抖音短视频源码web+APP架设教程+完整数据
最新更新快手抖音短视频源码web+APP架设教程+完整数据完美运行 视频直播源码,好东西,反正有人要就是了. 下载地址:https://pan.baidu.com/wap/init?surl=POU5 ...
- Docker(八): 安装ELK
服务部署发展 传统架构单应用部署 应用程序部署在单节点中,日志资源同样输出到这台单节点物理机的存储介质中. 微服务架构服务部署 以分布式,集群的方式部署应用,应用分别部署在不同的物理机中,日志分别输出 ...
- Jmeter连接redis
介绍:现在有很多数据不是存储在数据库而是存储在Redis中 Redis数据库存储数据环境 不用每次都去数据库读取数据 可以有效的优化服务器性能. 下面介绍使用jmeter如何读取redis 一.首先创 ...
- Kudu的特点
Kudu的特点 0.原理 列式存储管理器 一个列式存储数据的地方,跟mysql差不多,只是mysql是行式存储. 他是一个集群,能分布式存储. 查询也是写sql语句. 列式存储效率高. 1.为什么会有 ...
- Django之DRF-- API限速
什么场景下需要限制访问频次呢? 1)防爬虫:爬虫可能会在短时间内大量的访问服务接口,增加服务器压力 2)对于需要限制访问频次的接口 具体使用配置如下: 1,settings.py加入配置 REST_F ...
- HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法
1.下载支持WebVR的浏览器. 笔者使用的是HTC Vive,故下载了Firefox的Nightly版本[下载地址]. 2.Nightly 开启WebVR的步骤[引用自Mozilla VR] 1.从 ...
- C#中未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
解决方法 方法一 "设置应用程序池默认属性"/"常规"/"启用32位应用程序",设置为 true. 方法二 生成->配置管理器-> ...