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 ...
随机推荐
- bugku never give up
打开网页,看到?id=1,很容易想到了爆破. 然后bp抓包爆破.(传说中的一秒爆破.) 看到了 1p.html . 直接访问 缓缓打出一个?(这是个锤子o,本来以为这里有flag,但是,这真的是论坛啊 ...
- bugku login4
(前排提示:这次思路写的极不清晰,可能只有我自己看的懂,打个预防针QAQ) 首先看题: 扫描,拿到了 .index.php.swp 这个文件是可以复原的. 上面的是重要的源码.审计之后发现这是CBC加 ...
- Mac下查看端口占用情况
为什么 后端开发时,有时会碰到服务无法正常启动,端口被占用.这时需要查看端口占用情况. 是什么 需要用到一些Linux命令. 怎么做 查看占用端口51805的进程 lsof -n -P -i TCP ...
- Jenkins环境搭建(8)-邮件未能正常发送
昨天,在使用jenkins构建项目时,出现了个问题,问题是:jenkins控制台日志显示邮件发送成功,但实际没有成功. 此前,jenkins的配置,项目构建后,是能正常发送邮件的,可这次突然就不行了, ...
- vue通过事件向父级组件发送消息(官网点击放大例子)
注意:Vue.component一定要写在new Vue之前 在页面中使用组件 整体代码示例
- 测试web-view,实现小程序和网页之间的切换
官方有句提醒:个人类型与海外类型的小程序暂不支持使用 测试条件: 1.小程序后台管理中,进入"开发设置",设置一个业务域名(注意:不是设置服务器域名).比如 https://tes ...
- 哔哩哔哩直播录制工具v1.1.18
软件介绍 看直播有时候非常精彩想要录制下来,或者非常喜欢某个主播想录制下直播全程,可去找录制软件的时候却发现有这样那样的问题,导致一番操作不尽人意.但是现在<B站直播录制工具>可以完美解决 ...
- Java中中文排序器
在Java中使用Collator类按照汉字拼音排序字符串 public static void main(String[] args) throws Exception{ String[] strs ...
- 07-flask-使用sqlalchemy
代码 from flask import Flask, render_template from sqlalchemy import create_engine from sqlalchemy.ext ...
- js上 九.多分支语句
9-3.if...else if ...else语句 多分支的if语句,多选一. 格式: