⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlpage2.cpp

📁 《Visual C++.NET MFC类库应用详解》程序实例
💻 CPP
字号:
// CtrlPage2.cpp : 实现文件
//

#include "stdafx.h"
#include "ControlUse.h"
#include "CtrlPage2.h"


// CCtrlPage2 对话框

IMPLEMENT_DYNAMIC(CCtrlPage2, CPropertyPage)
CCtrlPage2::CCtrlPage2()
	: CPropertyPage(CCtrlPage2::IDD)
	, m_Red(0)
	, m_Green(0)
	, m_Blue(0)
{
	m_Color=RGB(0,0,0);
}

CCtrlPage2::~CCtrlPage2()
{
}

void CCtrlPage2::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);

	DDX_Control(pDX, IDC_EDIT_RED, m_EditRed);
	DDX_Control(pDX, IDC_EDIT_GREEN, m_EditGreen);
	DDX_Control(pDX, IDC_EDIT_BLUE, m_EditBlue);
	DDX_Control(pDX, IDC_SCROLLBAR_RED, m_ScrollRed);
	DDX_Control(pDX, IDC_SCROLLBAR_GREEN, m_ScrollGreen);
	DDX_Control(pDX, IDC_SCROLLBAR_BLUE, m_ScrollBlue);
	DDX_Text(pDX, IDC_EDIT_RED, m_Red);
	DDV_MinMaxInt(pDX, m_Red, 0, 255);
	DDX_Text(pDX, IDC_EDIT_GREEN, m_Green);
	DDV_MinMaxInt(pDX, m_Green, 0, 255);
	DDX_Text(pDX, IDC_EDIT_BLUE, m_Blue);
	DDV_MinMaxInt(pDX, m_Blue, 0, 255);
}


BEGIN_MESSAGE_MAP(CCtrlPage2, CPropertyPage)
	ON_WM_PAINT()
	ON_WM_HSCROLL()
	ON_EN_CHANGE(IDC_EDIT_RED, OnEnChangeEditRed)
	ON_EN_CHANGE(IDC_EDIT_GREEN, OnEnChangeEditGreen)
	ON_EN_CHANGE(IDC_EDIT_BLUE, OnEnChangeEditBlue)
END_MESSAGE_MAP()


// CCtrlPage2 消息处理程序

BOOL CCtrlPage2::OnInitDialog()
{
	CPropertyPage::OnInitDialog();

	// TODO:  在此添加额外的初始化
    GetDlgItem(IDC_COLOR_SAMPLE)->GetWindowRect(&m_ColorSample);
	ScreenToClient(&m_ColorSample);
    m_ColorSample.top+=15;

    SCROLLINFO info;
    info.cbSize = sizeof(SCROLLINFO);     
    info.fMask = SIF_ALL;     
    info.nMin = 0;     
    info.nMax = 259; 
    info.nPage = 5;     
    info.nPos = 0;
    info.nTrackPos = 5; 
    m_ScrollRed.SetScrollInfo(&info);
    m_ScrollGreen.SetScrollInfo(&info);
    m_ScrollBlue.SetScrollInfo(&info);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常:OCX 属性页应返回 FALSE
}

void CCtrlPage2::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此添加消息处理程序代码
	// 不为绘图消息调用 CPropertyPage::OnPaint()
	m_Color=RGB(m_Red,m_Green,m_Blue);
	CBrush NewBrush,*pOldBrush;
	NewBrush.CreateSolidBrush(m_Color);
	pOldBrush=dc.SelectObject(&NewBrush);
	dc.Rectangle(&m_ColorSample);
	dc.SelectObject(pOldBrush);

}

void CCtrlPage2::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
   int minpos;
   int maxpos;
   pScrollBar->GetScrollRange(&minpos, &maxpos); 
   maxpos = pScrollBar->GetScrollLimit();

   // Get the current position of scroll box.
   int curpos = pScrollBar->GetScrollPos();

   // Determine the new position of scroll box.
   switch (nSBCode)
   {
   case SB_LEFT:      // Scroll to far left.
      curpos = minpos;
      break;

   case SB_RIGHT:      // Scroll to far right.
      curpos = maxpos;
      break;

   case SB_ENDSCROLL:   // End scroll.
      break;

   case SB_LINELEFT:      // Scroll left.
      if (curpos > minpos)
         curpos--;
      break;

   case SB_LINERIGHT:   // Scroll right.
      if (curpos < maxpos)
         curpos++;
      break;

   case SB_PAGELEFT:    // Scroll one page left.
   {
      // Get the page size. 
      SCROLLINFO   info;
      pScrollBar->GetScrollInfo(&info, SIF_ALL);
   
      if (curpos > minpos)
      curpos = max(minpos, curpos - (int) info.nPage);
   }
      break;

   case SB_PAGERIGHT:      // Scroll one page right.
   {
      // Get the page size. 
      SCROLLINFO   info;
      pScrollBar->GetScrollInfo(&info, SIF_ALL);

      if (curpos < maxpos)
         curpos = min(maxpos, curpos + (int) info.nPage);
   }
      break;

   case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
      curpos = nPos;      // of the scroll box at the end of the drag operation.
      break;

   case SB_THUMBTRACK:   // Drag scroll box to specified position. nPos is the
      curpos = nPos;     // position that the scroll box has been dragged to.
      break;
   }

   // Set the new position of the thumb (scroll box).
   pScrollBar->SetScrollPos(curpos);
   CString str;
   if(pScrollBar==&m_ScrollRed)
   {
	   m_Red=m_ScrollRed.GetScrollPos();
       str.Format("%d",m_Red);
	   m_EditRed.SetWindowText(str);
   }
   if(pScrollBar==&m_ScrollGreen)
   {
       m_Green=m_ScrollGreen.GetScrollPos();
       str.Format("%d",m_Green);
	   m_EditGreen.SetWindowText(str);
   }
   if(pScrollBar==&m_ScrollBlue)
   {
       m_Blue=m_ScrollBlue.GetScrollPos();
       str.Format("%d",m_Blue);
	   m_EditBlue.SetWindowText(str);
   }
	InvalidateRect(&m_ColorSample);
	UpdateWindow();


	CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
}


void CCtrlPage2::OnEnChangeEditRed()
{
	// TODO:  在此添加控件通知处理程序代码
	m_Red=(int)GetDlgItemInt(IDC_EDIT_RED);
	m_ScrollRed.SetScrollPos(m_Red);
	InvalidateRect(&m_ColorSample);
	UpdateWindow();
}

void CCtrlPage2::OnEnChangeEditGreen()
{
	// TODO:  在此添加控件通知处理程序代码
	m_Green=(int)GetDlgItemInt(IDC_EDIT_GREEN);
	m_ScrollGreen.SetScrollPos(m_Green);
	InvalidateRect(&m_ColorSample);
	UpdateWindow();
}

void CCtrlPage2::OnEnChangeEditBlue()
{
	// TODO:  在此添加控件通知处理程序代码
	m_Blue=(int)GetDlgItemInt(IDC_EDIT_BLUE);
	m_ScrollBlue.SetScrollPos(m_Blue);
	InvalidateRect(&m_ColorSample);
	UpdateWindow();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -