本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除
目录
4.示例拓展
1.实例内容
在使用软件时,经常可以看到滑块控件,本实例实现了使用滑块控件设置颜色值的功能,运行程序,拖动滑块,程序将根据滑块位置对应的颜色值来绘制颜色,程序运行结果如图所示。
2.实验原理
在使用滑块控件时,首先要设置控件的范围,然后根据拖动滑块的位置获得相应的数据,要实现这些功能需要使用SetRange方法和GetPos方法。
(1)SetRange方法。SetRange方法用来设置一个滑动块控件的滑动块的范围(位置的最小值和最大值)。
void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE );
参数说明:
nMin:滑动块的最小位置。
nMax:滑动块的最大位置。
bRedraw:重画标志。如果这个参数是TRUE,则在范围被重新设置之后滑动块被重画;否则不重画滑动块。
(2)GetPos方法。GetPos方法用来获取一个滑动块控件中的滑动块的当前位置。
int GetPos( ) const;
3.实现过程
(1)新建一个基于对话框的应用程序。
(2)向对话框中添加群组控件、图片控件、静态文本控件、编辑框控件和滑块控件,并设置编辑框控件为只读,并为控件添加成员变量。
(3)在对话框初始化时设置滑块控件的范围,代码如下:
BOOL CMFC_滑块Dlg::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: 在此添加额外的初始化代码
//设置滑块控件区域
m_Red.SetRange(0, 255, TRUE);
m_Green.SetRange(0, 255, TRUE);
m_Blue.SetRange(0, 255, TRUE);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
(4)添加自定义函数DrawColor(),该函数用于在图片控件上绘制颜色,代码如下:
注意在头文件.h中定义
void DrawColor();
在源文件.cpp文件中实现
//自定义函数
void CMFC_滑块Dlg::DrawColor()
{
CDC* pDC = m_Color.GetDC();
CRect rect;
m_Color.GetClientRect(rect); //获得控件的客户区域
CBrush brush(RGB(m_Red.GetPos(), m_Green.GetPos(), m_Blue.GetPos())); //填充控件区域
pDC->FillRect(rect, &brush);
}
(5)处理各个滑块控件中滑块移动的响应事件,代码如下:
//在滑块控件中重载函数
void CMFC_滑块Dlg::OnReleasedcaptureSliderRed(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int pos = m_Red.GetPos(); //获得滑块位置
m_rEdit.Format(_T("%d"), pos);
DrawColor(); //绘制颜色
UpdateData(FALSE);
*pResult = 0;
}
void CMFC_滑块Dlg::OnReleasedcaptureSliderGreen(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int pos = m_Green.GetPos(); //获得滑块位置
m_gEdit.Format(_T("%d"), pos);
DrawColor(); //绘制颜色
UpdateData(FALSE);
*pResult = 0;
}
void CMFC_滑块Dlg::OnNMReleasedcaptureSliderBlue(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int pos = m_Blue.GetPos(); //获得滑块位置
m_bEdit.Format(_T("%d"), pos);
DrawColor(); //绘制颜色
UpdateData(FALSE);
*pResult = 0;
}
(6)实验结果
4.示例拓展
根据本实例,读者可以使用滑块控件设置窗体透明度。