www.pudn.com > Tierazon-v29.zip > gradient.cpp
// gradient.cpp : implementation file
//
#include "stdafx.h"
#include "Tierazon.h"
#include "gradient.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGradient dialog
CGradient::CGradient(CWnd* pParent /*=NULL*/)
: CDialog(CGradient::IDD, pParent)
{
//{{AFX_DATA_INIT(CGradient)
m_Inc_Blue = 0;
m_Inc_Green = 0;
m_Inc_Red = 0;
m_Start_Blue = 0;
m_Start_Green = 0;
m_Start_Red = 0;
//}}AFX_DATA_INIT
m_pGradView = NULL;
}
CGradient::CGradient(CView* pGradView) // Modeless constructor
: CDialog()
{
m_pGradView = pGradView;
}
void CGradient::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGradient)
DDX_Control(pDX, IDC_REVERSE, m_Reverse);
DDX_Control(pDX, IDC_INVERT, m_Invert);
DDX_Control(pDX, IDC_FORWARD, m_Forward);
DDX_Control(pDX, IDC_CYCLE, m_Cycle_Button);
DDX_Text(pDX, IDC_INC_BLUE, m_Inc_Blue);
DDV_MinMaxInt(pDX, m_Inc_Blue, 0, 255);
DDX_Text(pDX, IDC_INC_GREEN, m_Inc_Green);
DDV_MinMaxInt(pDX, m_Inc_Green, 0, 255);
DDX_Text(pDX, IDC_INC_RED, m_Inc_Red);
DDV_MinMaxInt(pDX, m_Inc_Red, 0, 255);
DDX_Text(pDX, IDC_START_BLUE, m_Start_Blue);
DDV_MinMaxInt(pDX, m_Start_Blue, 0, 255);
DDX_Text(pDX, IDC_START_GREEN, m_Start_Green);
DDV_MinMaxInt(pDX, m_Start_Green, 0, 255);
DDX_Text(pDX, IDC_START_RED, m_Start_Red);
DDV_MinMaxInt(pDX, m_Start_Red, 0, 255);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGradient, CDialog)
//{{AFX_MSG_MAP(CGradient)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_INVERT, OnInvert)
ON_BN_CLICKED(IDC_CYCLE, OnCycle)
ON_BN_CLICKED(IDC_REVERSE, OnReverse)
ON_BN_CLICKED(IDC_FORWARD, OnForward)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGradient message handlers
BOOL CGradient::Create()
{
return CDialog::Create(CGradient::IDD);
}
void CGradient::OnClose()
{
m_pGradView->PostMessage(WM_DLGGRADIENT, ID_DLGCLOSE);
CDialog::OnClose();
}
//void CGradient::OnGradientApply()
//{
// UpdateData(TRUE);
// if (m_pGradView != NULL)
// {
// m_pGradView->PostMessage(WM_DLGGRADIENT, ID_APPLY);
// }
//}
void CGradient::OnOK()
{
UpdateData(TRUE);
m_pGradView->PostMessage(WM_DLGGRADIENT, ID_APPLY);
ScrollBarInit();
}
BOOL CGradient::OnInitDialog()
{
CDialog::OnInitDialog();
CScrollBar* pSB = (CScrollBar*) GetDlgItem(IDC_REDSCROLL);
pSB->SetScrollRange(nMin, nMax);
pSB = (CScrollBar*) GetDlgItem(IDC_GRNSCROLL);
pSB->SetScrollRange(nMin, nMax);
pSB = (CScrollBar*) GetDlgItem(IDC_BLUSCROLL);
pSB->SetScrollRange(nMin, nMax);
return TRUE; // return TRUE unless you set the focus to a control
}
void CGradient::ScrollBarInit()
{
CScrollBar* pSB;
pSB = (CScrollBar*) GetDlgItem(IDC_REDSCROLL);
pSB->SetScrollPos(GetDlgItemInt(IDC_START_RED));
pSB = (CScrollBar*) GetDlgItem(IDC_GRNSCROLL);
pSB->SetScrollPos(GetDlgItemInt(IDC_START_GREEN));
pSB = (CScrollBar*) GetDlgItem(IDC_BLUSCROLL);
pSB->SetScrollPos(GetDlgItemInt(IDC_START_BLUE));
}
void CGradient::OnInvert()
{
UpdateData(TRUE);
m_Start_Red = GetDlgItemInt(IDC_START_RED);
m_Start_Green = GetDlgItemInt(IDC_START_GREEN);
m_Start_Blue = GetDlgItemInt(IDC_START_BLUE);
m_Start_Red = m_Start_Red ^ 0xFF;
m_Start_Green = m_Start_Green ^ 0xFF;
m_Start_Blue = m_Start_Blue ^ 0xFF;
SetDlgItemInt(IDC_START_RED, m_Start_Red);
SetDlgItemInt(IDC_START_GREEN, m_Start_Green);
SetDlgItemInt(IDC_START_BLUE, m_Start_Blue);
m_pGradView->SendMessage(WM_DLGGRADIENT, ID_APPLY);
ScrollBarInit();
}
void CGradient::OnCycle()
{
UpdateData(TRUE);
//m_pGradView->PostMessage(WM_DLGGRADIENT, ID_APPLY);
//ScrollBarUpdate();
m_pGradView->PostMessage(WM_COMMAND, ID_SHIFT_START);
}
void CGradient::OnReverse()
{
UpdateData(TRUE);
m_pGradView->SendMessage(WM_DLGSHIFT, ID_SHIFTREVERSE);
ScrollBarInit();
}
void CGradient::OnForward()
{
UpdateData(TRUE);
m_pGradView->SendMessage(WM_DLGSHIFT, ID_SHIFTFORWARD);
ScrollBarInit();
}
void CGradient::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nTemp1, nTemp2;
nTemp1 = pScrollBar->GetScrollPos();
switch(nSBCode)
{
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
ScrollBarUpdate();
break;
case SB_LINEUP: // Left arrow button
nTemp2 = (nMax - nMin) / 128;
if ((nTemp1 - nTemp2) > nMin)
{
nTemp1 -= nTemp2;
}
else
{
nTemp1 = nMin;
}
pScrollBar->SetScrollPos(nTemp1);
ScrollBarUpdate();
break;
case SB_LINEDOWN: // right arrow button
nTemp2 = (nMax - nMin) / 128;
if ((nTemp1 + nTemp2) < nMax)
nTemp1 += nTemp2;
else
nTemp1 = nMax;
pScrollBar->SetScrollPos(nTemp1);
ScrollBarUpdate();
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CGradient::ScrollBarUpdate()
{
CScrollBar* pSB;
UpdateData(TRUE);
pSB = (CScrollBar*) GetDlgItem(IDC_REDSCROLL);
m_Start_Red = pSB->GetScrollPos();
pSB = (CScrollBar*) GetDlgItem(IDC_GRNSCROLL);
m_Start_Green = pSB->GetScrollPos();
pSB = (CScrollBar*) GetDlgItem(IDC_BLUSCROLL);
m_Start_Blue = pSB->GetScrollPos();
SetDlgItemInt(IDC_START_RED, m_Start_Red);
SetDlgItemInt(IDC_START_GREEN, m_Start_Green);
SetDlgItemInt(IDC_START_BLUE, m_Start_Blue);
UpdateData(TRUE);
m_pGradView->SendMessage(WM_DLGSHIFT, ID_APPLY);
}
void CGradient::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nTemp1, nTemp2;
nTemp1 = pScrollBar->GetScrollPos();
switch(nSBCode)
{
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
ScrollBarUpdate();
break;
case SB_LINEUP: // Left arrow button
nTemp2 = (nMax - nMin) / 128;
if ((nTemp1 - nTemp2) > nMin)
{
nTemp1 -= nTemp2;
}
else
{
nTemp1 = nMin;
}
pScrollBar->SetScrollPos(nTemp1);
ScrollBarUpdate();
break;
case SB_LINEDOWN: // right arrow button
nTemp2 = (nMax - nMin) / 128;
if ((nTemp1 + nTemp2) < nMax)
nTemp1 += nTemp2;
else
nTemp1 = nMax;
pScrollBar->SetScrollPos(nTemp1);
ScrollBarUpdate();
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}