93上位机VC MFC滚动条实现自绘美化效果
93上位机VC MFC滚动条实现自绘美化效果
功能展示
滚动条简单易用,但默认的界面并不是很美观,我们当前例程使用贴图的方式,实现滚动条的美化,例程只要调用一个函数,传美几张位图便可快速实现美化功能,效果如图 要点提示 我们当前例程滚动条的美化主要是通过四幅位图进行美化,即实现滚动条左右箭头,前后背景的贴图;
例程封装了一个自定义类供大家参考学习,只要通过调用 CreateScroll()函数便可实现自绘的美化滚动条; 实现功能 1.新建基于对话框的应用程序 2.复制例程中CCustomScroll类的两文件CustomScroll.cpp及CustomScroll.h到工程根目录,并加载到工程; 3.在主对话框中使用自定义类CCustomScroll,当前例程实现三个滚动条控制RGB颜色值,所以定义了三个类变量 CCustomScroll m_Blue; CCustomScroll m_Red;CCustomScroll m_Green; 在对话框资源中添加四个图片控件依次修改ID为 IDC_R ,IDC_G , IDC_B,IDC_RECT作为三滚动条控件及颜色显示区; 现添加3 静态文本控件,依次修改ID IDC_RVALUE, IDC_GVALUE, IDC_BVALUE作为颜色值的显示 4.复制工程中已使用的十二位图,作为三个滚动条的贴图,也可自行准备;再初始化三滚动条 m_Blue.CreateScroll(this,IDC_B,255,IDB_BLEFTARROW,IDB_BRIGHTARROW,IDB_BCHANELBK,IDB_BFORGROUND); m_Blue.SetScrollRange(0,255); m_Green.CreateScroll(this,IDC_G,265,IDB_GLEFTARROW,IDB_GRIGHTARROW,IDB_GCHANELBK,IDB_GFORGROUND); m_Green.SetScrollRange(0,255); m_Red.CreateScroll(this,IDC_R,275,IDB_REDLEFT,IDB_REDRIGHT,IDB_REDBK,IDB_REDFOROUND);
m_Red.SetScrollRange(0,255); 5.最后是在主对话框中响应滚动条滚动消息OnHScroll(),并实现颜色值的绘制; - void CGkbc8Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
- // TODO: Add your message handler code here and/or call default
- CCustomScroll* temp = (CCustomScroll*)(CWnd*)pScrollBar;
- int pos ;
- if (temp == NULL)
- return;
- if (nSBCode==SB_LINELEFT )
- {
- pos = temp->m_CurPos-nPos;
- }
- else if (nSBCode==SB_LINERIGHT)
- {
- pos = temp->m_CurPos+nPos;
- }
- else
- {
- pos = nPos;
- }
- if (temp->m_hWnd==m_Blue.m_hWnd)
- m_Bvalue = pos;
- else if(temp->m_hWnd==m_Green.m_hWnd)
- m_Gvalue = pos;
- else if(temp->m_hWnd==m_Red.m_hWnd)
- m_Rvalue = pos;
- CString sText;
- sText.Format("%i",m_Bvalue);
- SetDlgItemText(IDC_BVALUE,sText);
- sText.Format("%i",m_Gvalue);
- SetDlgItemText(IDC_GVALUE,sText);
- sText.Format("%i",m_Rvalue);
- SetDlgItemText(IDC_RVALUE,sText);
- FillRect();
- CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
- }
复制代码- void CGkbc8Dlg::FillRect()
- {
- CDC* pDC = GetDlgItem(IDC_RECT)->GetDC();
- CRect rect;
- GetDlgItem(IDC_RECT)->GetClientRect(rect);
- CBrush brush(RGB(m_Rvalue,m_Gvalue,m_Bvalue));
- pDC->FillRect(rect,&brush);
- GetDlgItem(IDC_RECT)->ReleaseDC(pDC);
- }
复制代码其中三个变量BYTE m_Rvalue;//RGB颜色值BYTE m_Gvalue; BYTEm_Bvalue;为我们在主对话框中定义用于保存颜色的变量,已在构造函数中初始化为0
我们来演示下功能实现的整个过程
|