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 + -
显示快捷键?