perspectivedlg.cpp

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

CPP
192
字号
// PerspectiveDlg.cpp : implementation file
//

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

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

/////////////////////////////////////////////////////////////////////////////
// CPerspectiveDlg dialog


CPerspectiveDlg::CPerspectiveDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPerspectiveDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPerspectiveDlg)
	m_f = 0;
	m_fai = 0;
	m_r = 0;
	m_theta = 0;
	//}}AFX_DATA_INIT
}


void CPerspectiveDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPerspectiveDlg)
	DDX_Slider(pDX, IDC_SLIDER_F, m_f);
	DDX_Slider(pDX, IDC_SLIDER_FAI, m_fai);
	DDX_Slider(pDX, IDC_SLIDER_R, m_r);
	DDX_Slider(pDX, IDC_SLIDER_THETA, m_theta);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPerspectiveDlg, CDialog)
	//{{AFX_MSG_MAP(CPerspectiveDlg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPerspectiveDlg message handlers

BOOL CPerspectiveDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CDialog::OnInitDialog();

	CSliderCtrl* pSlider1
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_R);
	CSliderCtrl* pSlider2
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_THETA);
	CSliderCtrl* pSlider3
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_FAI);
	CSliderCtrl* pSlider4
		= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_F);

	pSlider1->SetRange(3, 100);
	pSlider2->SetRange(10, 170);
	pSlider3->SetRange(0, 359);
	pSlider4->SetRange(1, 100);

	pSlider1->SetPos(10);
	pSlider2->SetPos(90);
	pSlider3->SetPos(0);
	pSlider4->SetPos(10);

    m_r		= 1;
	m_fai	= 0;
	m_theta	= 0;
	m_f		= 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;
	
    return TRUE;
}

void CPerspectiveDlg::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 CPerspectiveDlg::OnButtonCancel() 
{
	// TODO: Add your control notification handler code here
    OnOK();	
}

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

    int widthback  = 150;
	int heightback = 150;
	tp1 = PerspectiveKer(p1, m_r, m_theta, m_fai, m_f, widthback, heightback);
    tp2 = PerspectiveKer(p2, m_r, m_theta, m_fai, m_f, widthback, heightback);
    tp3 = PerspectiveKer(p3, m_r, m_theta, m_fai, m_f, widthback, heightback);
    tp4 = PerspectiveKer(p4, m_r, m_theta, m_fai, m_f, widthback, heightback);

	Invalidate();
	UpdateData(FALSE);

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

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

	pCMainWnd->OnPerspective();

	UpdateData(FALSE);
	return;
}

⌨️ 快捷键说明

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