affinedlg.cpp

来自「一个非常全的vc编程的原程序代码是关于图像处理的!」· C++ 代码 · 共 187 行

CPP
187
字号
// AffineDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ViewDIB.h"
#include "AffineDlg.h"
#include "DibAPI.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAffineDlg dialog


CAffineDlg::CAffineDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAffineDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAffineDlg)
	m_x = 0;
	m_y = 0;
	m_wig = 0;
	m_slue = 0;
//	m_movex = 0;
	//}}AFX_DATA_INIT
}


void CAffineDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
//	OnPaint();
	//{{AFX_DATA_MAP(CAffineDlg)
	DDX_Slider(pDX, IDC_SLIDER_X, m_x);
	DDX_Slider(pDX, IDC_SLIDER_Y, m_y);
	DDX_Slider(pDX, IDC_SLIDER_WIG, m_wig);
	DDX_Slider(pDX, IDC_SLIDER_SLUE, m_slue);
//	DDX_Slider(pDX, IDC_SLIDER_MOVE, m_movex);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAffineDlg, CDialog)
	//{{AFX_MSG_MAP(CAffineDlg)
	ON_WM_PAINT()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)
	ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAffineDlg message handlers



BOOL CAffineDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	CSliderCtrl* pSlider1
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_X);
	CSliderCtrl* pSlider2
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_Y);
	CSliderCtrl* pSlider3
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_SLUE);
	CSliderCtrl* pSlider4
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_WIG);

	pSlider1->SetRange(-30, 30);
	pSlider2->SetRange(-30, 30);
	pSlider3->SetRange(0, 359);
	pSlider4->SetRange(-20, 20);

	m_x		= 10;
	m_y		= 10;
	m_slue	= 0;
	m_wig	= 1;


    p1.x = 50;  p1.y = 50;
	p2.x = 100; p2.y = 50;
	p3.x = 50;  p3.y = 100;
	p4.x = 100; p4.y = 100;
    
	tp1.x = 50;  tp1.y = 50;
	tp2.x = 100; tp2.y = 50;
	tp3.x = 50;  tp3.y = 100;
	tp4.x = 100; tp4.y = 100;

	m_previewRect.left	 = 15;
	m_previewRect.top	 = 15;
	m_previewRect.right	 = 90;
	m_previewRect.bottom = 90;

	UpdateData(FALSE);
	
    return TRUE;
}

void CAffineDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	UpdateData(TRUE);

    //some prepare work for painting.
	CWnd* pWnd = GetDlgItem(IDC_PIC);
	CDC* pControlDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
 
 	CPen penD, penD1;
	CBrush brush;
    CPen* pOldPen;
	CBrush* pOldBrush;
	penD.CreatePen(PS_SOLID, 2, RGB(0,0,255));
	penD1.CreatePen(PS_SOLID, 2, RGB(0,255,0));
	brush.CreateSolidBrush(RGB(255, 255, 255));
	pOldBrush = pControlDC->SelectObject(&brush);

    //drow the white frame.
	pControlDC->Rectangle(0, 0, 150, 150);
    pControlDC->SelectObject(pOldBrush);

    //drow the picture rectangle.
	pOldPen = pControlDC->SelectObject(&penD1);
	pControlDC->MoveTo(p1);
	pControlDC->LineTo(p2);
	pControlDC->LineTo(p4);
	pControlDC->LineTo(p3);
	pControlDC->LineTo(p1);
	pControlDC->SelectObject(pOldPen);

	pOldPen = pControlDC->SelectObject(&penD);
	pControlDC->MoveTo(tp1);
	pControlDC->LineTo(tp2);
	pControlDC->LineTo(tp4);
	pControlDC->LineTo(tp3);
	pControlDC->LineTo(tp1);
	pControlDC->SelectObject(pOldPen);

	//do the end work for paint.	
	pWnd->ReleaseDC(pControlDC);	
	UpdateData(FALSE);
	
	// Do not call CDialog::OnPaint() for painting messages
}

void CAffineDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
	UpdateData(TRUE);

    tp1 = AffineKer(p1, m_x, m_y, m_wig, m_slue);
    tp2 = AffineKer(p2, m_x, m_y, m_wig, m_slue);
    tp3 = AffineKer(p3, m_x, m_y, m_wig, m_slue);
    tp4 = AffineKer(p4, m_x, m_y, m_wig, m_slue);

	Invalidate();
	UpdateData(FALSE);
}

void CAffineDlg::OnButtonApply() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CMainFrame* pCMainWnd = (CMainFrame*)GetParent();

	pCMainWnd->OnAffine(m_mode);

	UpdateData(FALSE);
	return;
}

void CAffineDlg::OnButtonClose() 
{
	// TODO: Add your control notification handler code here
    OnOK();	
}

⌨️ 快捷键说明

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