对话框和控件
复选框
单选框
分组框
示例:三原色画图

一、建立名为Demo2的MFC工程,按照下图添加控件

并修改2个Group Box Caption属性分别为颜色、外观

修改3个Check Box Caption和ID属性分别为(红色,IDC_CHK_RED)、(绿色,IDC_CHK_GREEN)、(蓝色,IDC_CHK_BLUE)

修改2个Radio Box Caption和ID属性分别为(矩形,IDC_RD_RECT)、(圆形,IDC_RD_ROUND)

注意:radio box 必须是连续的table键顺序

radio 控件tab键顺序查看方法

二、为check box 组件红色、绿色、蓝色添加变量关联,分别为m_chk_red、m_chk_green、m_chk_blue

2、分别为3个check box 和2个 radio box 添加事件处理,方法如下(请注意函数处理名称要对应):

3、进入Demo2Dlg.cpp添加

void CDemo2Dlg::OnBnClickedChkBlue()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
} void CDemo2Dlg::OnBnClickedChkGreen()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedChkRed()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedRdRound()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedRdRect()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}

4、为Demo2对话框添加消息处理函数,进入Demo2Dlg.cpp添加:

BOOL CDemo2Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 BOOL bRet = CDialogEx::OnEraseBkgnd(pDC); int nRed, nGreen, nBlue;
nRed = m_chk_red.GetCheck() ? : ; //红色复选框被选中,设置值为255,否则为0
nGreen = m_chk_green.GetCheck() ? : ; //同上
nBlue = m_chk_blue.GetCheck() ? : ; //同上 COLORREF crFore = RGB(nRed,nGreen,nBlue); //使用rgb组合新的颜色
CBrush brush; //创建刷子
brush.CreateSolidBrush(crFore); //实心,颜色为crFore
CBrush *pOldBrush = pDC->SelectObject(&brush);//保留旧的刷子 RECT rc = {,,,};
if(m_rd_rect.GetCheck())
{
pDC->Rectangle(&rc); //画框
}
else
{
pDC->Ellipse(&rc); //画圆
}
pDC->SelectObject(&pOldBrush); //还原旧的画刷 return bRet;
}

同时在BOOL CDemo2Dlg::OnInitDialog() 函数中添加:

// TODO: 在此添加额外的初始化代码
CheckRadioButton(IDC_RD_RECT,IDC_RD_ROUND,IDC_RD_ROUND);//从IDC_RD_RECT,IDC_RD_ROUND范围内选择一个作为默认值

Demo2Dlg.cpp源码:

// Demo2Dlg.cpp : 实现文件
// #include "stdafx.h"
#include "Demo2.h"
#include "Demo2Dlg.h"
#include "afxdialogex.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx
{
public:
CAboutDlg(); // 对话框数据
enum { IDD = IDD_ABOUTBOX }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现
protected:
DECLARE_MESSAGE_MAP()
}; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
} void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP() // CDemo2Dlg 对话框 CDemo2Dlg::CDemo2Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CDemo2Dlg::IDD, pParent)
, m_rd_round()
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
} void CDemo2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHK_RED, m_chk_red);
DDX_Control(pDX, IDC_CHK_GREEN, m_chk_green);
DDX_Control(pDX, IDC_CHK_BLUE, m_chk_blue);
DDX_Control(pDX, IDC_RD_RECT, m_rd_rect);
} BEGIN_MESSAGE_MAP(CDemo2Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//ON_BN_CLICKED(IDC_CHECK2, &CDemo2Dlg::OnBnClickedCheck2)
ON_BN_CLICKED(IDC_CHK_BLUE, &CDemo2Dlg::OnBnClickedChkBlue)
ON_WM_ERASEBKGND()
ON_BN_CLICKED(IDC_CHK_GREEN, &CDemo2Dlg::OnBnClickedChkGreen)
ON_BN_CLICKED(IDC_CHK_RED, &CDemo2Dlg::OnBnClickedChkRed)
ON_BN_CLICKED(IDC_RD_ROUND, &CDemo2Dlg::OnBnClickedRdRound)
ON_BN_CLICKED(IDC_RD_RECT, &CDemo2Dlg::OnBnClickedRdRect)
END_MESSAGE_MAP() // CDemo2Dlg 消息处理程序 BOOL CDemo2Dlg::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: 在此添加额外的初始化代码
CheckRadioButton(IDC_RD_RECT,IDC_RD_ROUND,IDC_RD_ROUND);//从IDC_RD_RECT,IDC_RD_ROUND范围内选择一个作为默认值 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} void CDemo2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
} // 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。 void CDemo2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), ); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + ) / ;
int y = (rect.Height() - cyIcon + ) / ; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
} //当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CDemo2Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
} void CDemo2Dlg::OnBnClickedCheck2()
{
// TODO: 在此添加控件通知处理程序代码
} void CDemo2Dlg::OnBnClickedChkBlue()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
} BOOL CDemo2Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 BOOL bRet = CDialogEx::OnEraseBkgnd(pDC); int nRed, nGreen, nBlue;
nRed = m_chk_red.GetCheck() ? : ; //红色复选框被选中,设置值为255,否则为0
nGreen = m_chk_green.GetCheck() ? : ; //同上
nBlue = m_chk_blue.GetCheck() ? : ; //同上 COLORREF crFore = RGB(nRed,nGreen,nBlue); //使用rgb组合新的颜色
CBrush brush; //创建刷子
brush.CreateSolidBrush(crFore); //实心,颜色为crFore
CBrush *pOldBrush = pDC->SelectObject(&brush);//保留旧的刷子 RECT rc = {,,,};
if(m_rd_rect.GetCheck())
{
pDC->Rectangle(&rc); //画框
}
else
{
pDC->Ellipse(&rc); //画圆
}
pDC->SelectObject(&pOldBrush); //还原旧的画刷 return bRet;
} void CDemo2Dlg::OnBnClickedChkGreen()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedChkRed()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedRdRound()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
} void CDemo2Dlg::OnBnClickedRdRect()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}

006.MFC_对话框_复选框_单选钮的更多相关文章

  1. CheckedListBoxControl 实现复选框的单选与多选功能

    由于工作需要,需要实现复选框的单选与多选功能,找了好多资料都不是很全,经过两天苦苦的挖挖挖,终于完成啦O(∩_∩)O哈哈~ 用DEV控件中的CheckedListBoxControl控件,当然VS中的 ...

  2. 【三石jQuery视频教程】02.创建 FontAwesome 复选框和单选框

    视频地址:http://v.qq.com/page/m/8/c/m0150izlt8c.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  3. Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)

    一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.m ...

  4. 如何让checkbox复选框只能单选

    function框架div 如何让checkbox复选框只能单选 在项目开发中遇到一个这样的问题,要让一列复选框架在任何时间段内只能选择一个. 有人说怎么不用单选框了,因为单选框一旦选择了就不能取消选 ...

  5. 把复选框变成单选框(prop,attr的区别)

    如果项目中需要统一样式的话,有可能会遇到把复选框变成单选框的需求. 下面是用jquery的简单实现 $(function(){ $("input[type='checkbox']" ...

  6. Jquery学习笔记:操作form表单元素之二(复选框和单选框)

    在上面文章的基础上,我们介绍如何操作表单元素中的 复选框和单选框. 一.复选框 <label> <input type="checkbox" id="i ...

  7. 10个HTML5美化版复选框和单选框

    单选框Radiobox和复选框checkbox在网页中也十分常见,虽然它没有按钮的交互性强,但是如果能把它们像按钮那样美化一下,那也是非常不错的.本文收集了10个相对比较漂亮的美化版单选框和复选框,希 ...

  8. 复选框、单选框样式自定义(https://www.cnblogs.com/freedom-feng/p/11346396.html)

    复选框.单选框样式自定义(https://www.cnblogs.com/freedom-feng/p/11346396.html)复选框html内容如下:<input type="c ...

  9. JS及Dom练习 | 模态对话框及复选框操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. Directx11学习笔记【二十一】 封装键盘鼠标响应类

    原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...

  2. 云原生应用 Kubernetes 监控与弹性实践

    前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider.CRD C ...

  3. LeetCode93 Restore IP Addresses

    题目: Given a string containing only digits, restore it by returning all possible valid IP address com ...

  4. HDU-1069_Monkey and Banana

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) P ...

  5. Laravel的请求声明周期

    声明周期概述# 开始# public/index.php 文件是所有对Laravel应用程序的请求的入口点.而所有的请求都是经由你的Web服务器(Apache/Nginx) 通过配置引导到这个文件.i ...

  6. uni-app设置 video开始播放进入全屏状态

    有一video标签 <video id="myVideo" :src="videoUrl"></video> 获取 video 上下文 ...

  7. behavior planning——15.cost function design weightTweaking

    Designing cost functions is difficult and getting them all to cooperate to produce reasionable vehic ...

  8. hdu 1050 Moving Tables (Greedy)

    Problem - 1050 过两天要给12的讲贪心,于是就做一下水贪心练习练习. 代码如下: #include <cstdio> #include <iostream> #i ...

  9. H3C 电路交换连接模型

  10. html5的开发

    1.html5的开发组织者: (1)WHATWG:由Apple.Mozilla.Google.Opera等浏览器开发者组成,成立于2004年.WHATWG开发HTML和Web应用API,同时为各浏览器 ...