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

📄 fcolordialog.cpp

📁 这源代码是书本《visual c++.net MFC 类库应用详解》的
💻 CPP
字号:
// FColorDialog.cpp : 实现文件
//

#include "stdafx.h"
#include "Hello.h"
#include "FColorDialog.h"


// CFColorDialog 对话框

IMPLEMENT_DYNAMIC(CFColorDialog, CDialog)
CFColorDialog::CFColorDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CFColorDialog::IDD, pParent)
	, m_Red(0)
	, m_Green(0)
	, m_Blue(0)
{
	m_Color=RGB(0,0,0);

}

CFColorDialog::~CFColorDialog()
{
}

void CFColorDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//	DDX_Control(pDX, IDC_COLOR_SAMPLE, m_ColorSample);
	DDX_Control(pDX, IDC_SCROLLBAR1, m_ScrollRed);
	DDX_Control(pDX, IDC_SCROLLBAR2, m_ScrollGreen);
	DDX_Control(pDX, IDC_SCROLLBAR3, m_ScrollBlue);
	DDX_Control(pDX, IDC_EDIT_R, m_EditRed);
	DDX_Control(pDX, IDC_EDIT_G, m_EditGreen);
	DDX_Control(pDX, IDC_EDIT_B, m_EditBlue);
	DDX_Text(pDX, IDC_EDIT_R, m_Red);
	DDV_MinMaxInt(pDX, m_Red, 0, 255);
	DDX_Text(pDX, IDC_EDIT_G, m_Green);
	DDV_MinMaxInt(pDX, m_Green, 0, 255);
	DDX_Text(pDX, IDC_EDIT_B, m_Blue);
	DDV_MinMaxInt(pDX, m_Blue, 0, 255);
}


BEGIN_MESSAGE_MAP(CFColorDialog, CDialog)
	ON_EN_CHANGE(IDC_EDIT_R, OnEnChangeEditR)
	ON_EN_CHANGE(IDC_EDIT_G, OnEnChangeEditG)
	ON_EN_CHANGE(IDC_EDIT_B, OnEnChangeEditB)
	ON_WM_PAINT()
	ON_WM_HSCROLL()
END_MESSAGE_MAP()


// CFColorDialog 消息处理程序

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

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

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

void CFColorDialog::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此添加消息处理程序代码
	// 不为绘图消息调用 CDialog::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);
	
}

BOOL CFColorDialog::OnInitDialog()
{
	CDialog::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 CFColorDialog::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();
   
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

⌨️ 快捷键说明

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