// DlgReflowMasterImage.cpp : 구현 파일입니다.
|
//
|
|
#include "stdafx.h"
|
#include "ReviewRecipeEditor.h"
|
#include "DlgReflowMasterImage.h"
|
#include "afxdialogex.h"
|
|
// CDlgReflowMasterImage 대화 상자입니다.
|
#include "CHImageControls/CHImageView.h"
|
#include "CHImageControls/CHImageProcess.h"
|
#include "DlgCommon.h"
|
|
IMPLEMENT_DYNAMIC(CDlgReflowMasterImage, CDialogEx)
|
|
CDlgReflowMasterImage::CDlgReflowMasterImage(CWnd* pParent /*=NULL*/)
|
: CDialogEx(CDlgReflowMasterImage::IDD, pParent)
|
{
|
m_ImageBuffer = NULL;
|
m_bImagecheck = false;
|
m_damCount = 0;
|
}
|
|
CDlgReflowMasterImage::~CDlgReflowMasterImage()
|
{
|
}
|
|
void CDlgReflowMasterImage::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CDlgReflowMasterImage, CDialogEx)
|
ON_WM_PAINT()
|
ON_WM_SIZE()
|
ON_WM_LBUTTONDOWN()
|
END_MESSAGE_MAP()
|
|
BOOL CDlgReflowMasterImage::OnInitDialog()
|
{
|
m_damCount = 0;
|
m_nHScrollPos = 0;
|
m_nVScrollPos = 0;
|
|
return TRUE;
|
}
|
|
void CDlgReflowMasterImage::OnPaint()
|
{
|
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
|
CDialogEx::OnPaint();
|
|
CDC *pDC = GetDC();
|
//CRect rect;
|
//GetClientRect(rect);
|
|
CDC MemDC;
|
MemDC.CreateCompatibleDC(pDC);
|
CBitmap bmpOffScreen;
|
bmpOffScreen.CreateCompatibleBitmap(pDC, m_RectDialog.Width(), m_RectDialog.Height());
|
CBitmap *oldBitmap;
|
oldBitmap = MemDC.SelectObject(&bmpOffScreen);
|
//pDC->SelectObject(&bmpOffScreen);
|
//MemDC.BitBlt(0, 0, m_RectDialog.Width(), m_RectDialog.Height(), pDC, 0, 0, SRCCOPY);
|
|
|
// Draw image if a source bitmap is currently loaded
|
if ( !m_Image.IsNull() )
|
{
|
//image.Draw(pDC->m_hDC, -m_nHScrollPos, -m_nVScrollPos);
|
//m_Image.Draw(MemDC.m_hDC, -m_nHScrollPos, -m_nVScrollPos);
|
m_Image.Draw(MemDC.m_hDC, 0, 0);
|
}
|
|
|
|
CRect *rtWindow = new CRect;
|
CString strCount;
|
GetWindowRect(rtWindow);
|
ScreenToClient(rtWindow);
|
|
CPen pen3, pen4;
|
pen3.CreatePen( PS_SOLID, 5, RGB(0,0,255) ); // 파란색 펜 생성
|
pen4.CreatePen( PS_SOLID, 5, RGB(255,0,0) ); // 붉은색 펜 생성
|
CPen* oldPen2;
|
if(m_Image.GetWidth() > m_Image.GetHeight())
|
{
|
for(int i = 0; i < 4; i++)
|
{
|
strCount.Format(_T("%d"), i);
|
if(i == (m_damCount + 3) % 4)
|
{
|
oldPen2 = MemDC.SelectObject( &pen3 );
|
}
|
else
|
{
|
oldPen2 = MemDC.SelectObject( &pen4 );
|
}
|
MemDC.MoveTo(m_damPoint[i].x - m_nHScrollPos, rtWindow->top - m_nVScrollPos);
|
MemDC.LineTo(m_damPoint[i].x - m_nHScrollPos, rtWindow->bottom - m_nVScrollPos);
|
MemDC.SelectObject( oldPen2 );
|
MemDC.TextOut(m_damPoint[i].x - m_nHScrollPos, (rtWindow->top + rtWindow->bottom) / 2, strCount);
|
}
|
}
|
else
|
{
|
for(int i = 0; i < 4; i++)
|
{
|
strCount.Format(_T("%d"), i);
|
if(i == (m_damCount + 3) % 4)
|
{
|
oldPen2 = MemDC.SelectObject( &pen3 );
|
}
|
else
|
{
|
oldPen2 = MemDC.SelectObject( &pen4 );
|
}
|
MemDC.MoveTo(rtWindow->left - m_nHScrollPos, m_damPoint[i].y - m_nVScrollPos);
|
MemDC.LineTo(rtWindow->right - m_nHScrollPos, m_damPoint[i].y - m_nVScrollPos);
|
MemDC.SelectObject( oldPen2 );
|
MemDC.TextOut((rtWindow->left + rtWindow->right) / 2, m_damPoint[i].y - m_nVScrollPos, strCount);
|
}
|
}
|
|
delete rtWindow;
|
|
|
pDC->BitBlt(0, 0, m_RectDialog.Width(), m_RectDialog.Height(), &MemDC, 0, 0, SRCCOPY);
|
MemDC.SelectObject( oldBitmap );
|
|
//pDC->DeleteDC();
|
MemDC.DeleteDC();
|
}
|
|
int CDlgReflowMasterImage::ImageGetWidth()
|
{
|
int retVal = m_Image.GetWidth();
|
if (retVal < 0) retVal = 0;
|
return retVal;
|
}
|
|
int CDlgReflowMasterImage::ImageGetHeight()
|
{
|
int retVal = m_Image.GetHeight();
|
if (retVal < 0) retVal = 0;
|
return retVal;
|
}
|
|
int CDlgReflowMasterImage::ImageGetBPP()
|
{
|
return 0;
|
}
|
|
int CDlgReflowMasterImage::LoadImage(CString sFileName)
|
{
|
// Detaches the bitmap from the CImage object and destroys the bitmap if image already loaded
|
if ( !m_Image.IsNull() )
|
m_Image.Destroy();
|
memset(m_nBoe_line, 0, 6 * sizeof(int));
|
m_ROIRect = CRect(0, 0, 0, 0);
|
if(m_ImageBuffer != NULL)
|
{
|
delete m_ImageBuffer;
|
m_ImageBuffer = NULL;
|
m_bImagecheck = false;
|
}
|
//m_ImageBuffer.DeleteBuffer();
|
|
if(m_Image.Load(sFileName))
|
{
|
// m_ImageBuffer.SetSize(0, 0);
|
return -1;
|
}
|
|
int width = m_Image.GetWidth();
|
int height = m_Image.GetHeight();
|
int channel = m_Image.GetBPP() >> 3;
|
m_ImageBuffer = new BYTE[width * height * channel];
|
memset(m_ImageBuffer, 0, sizeof(BYTE) * width * height * channel);
|
|
BYTE* temp;
|
//COLORREF rgb;
|
for(int y = 0 ; y < height; y++)
|
{
|
temp = (BYTE*)m_Image.GetPixelAddress(0, y);
|
memcpy((m_ImageBuffer+y*width*channel), (temp), sizeof(BYTE) * width * channel);
|
}
|
|
m_bImagecheck = true;
|
|
m_ImagePath = sFileName;
|
|
return 0;
|
}
|
|
void CDlgReflowMasterImage::OnSize(UINT nType, int cx, int cy)
|
{
|
CDialog::OnSize(nType, cx, cy);
|
|
CSize sMonitor, sWindow;
|
sMonitor.cx = ::GetSystemMetrics(SM_CXFULLSCREEN);
|
sMonitor.cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
|
|
if(m_Image.GetWidth() > sMonitor.cx * 0.9)
|
sWindow.cx = min(m_Image.GetWidth() / 2, sMonitor.cx * 0.9);
|
else
|
sWindow.cx = m_Image.GetWidth();
|
if(m_Image.GetHeight() > sMonitor.cy * 0.9)
|
sWindow.cy = min(m_Image.GetHeight() / 2, sMonitor.cy * 0.9);
|
else
|
sWindow.cy = m_Image.GetHeight() + 50;
|
|
if(m_bImagecheck)
|
{
|
//this->SetWindowPos(NULL, 0, 0, m_ImageBuffer.m_nImageWidth/2, m_ImageBuffer.m_nImageHeight/2, SWP_NOZORDER
|
//this->SetWindowPos(NULL, 0, 0, image.GetWidth()/2, image.GetHeight()/2, SWP_NOZORDER);
|
this->SetWindowPos(NULL, 0, 0, sWindow.cx, sWindow.cy, SWP_NOZORDER);
|
HWND hwnd = GetParent()->GetSafeHwnd();
|
//::SendMessage(hwnd, WM_LOADIMAGE_EVENT, m_ImageBuffer.m_nImageWidth, m_ImageBuffer.m_nImageHeight);
|
::SendMessage(hwnd, WM_LOADIMAGE_EVENT, m_Image.GetWidth(), m_Image.GetHeight());
|
|
m_bImagecheck = false;
|
}
|
this->GetWindowRect(m_RectDialog);
|
|
|
m_nViewWidth = m_RectDialog.Width() + GetSystemMetrics(SM_CXHSCROLL);
|
m_nViewHeight = m_RectDialog.Height() + GetSystemMetrics(SM_CXVSCROLL);
|
|
int HScrollMax = 0;
|
m_nHPageSize = 0;
|
|
if(cx < m_nViewWidth)
|
{
|
m_nHPageSize = m_Image.GetWidth() / 10 + 0.5;
|
HScrollMax = m_Image.GetWidth() - m_nViewWidth + m_nHPageSize;
|
m_nHScrollPos = min(m_nHScrollPos,m_nViewWidth - 1);
|
}
|
|
SCROLLINFO si;
|
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
|
si.nMin = 0;
|
si.nMax = HScrollMax;
|
si.nPos = m_nHScrollPos;
|
si.nPage = m_nHPageSize;
|
SetScrollInfo(SB_HORZ, &si, TRUE);
|
|
int VScrollMax = 0;
|
m_nVPageSize = 0;
|
|
if( cy < m_nViewHeight)
|
{
|
m_nVPageSize = m_Image.GetHeight() / 10 + 0.5;
|
VScrollMax = m_Image.GetHeight() - m_nViewHeight + m_nVPageSize;
|
m_nVScrollPos = min(m_nVScrollPos,m_nViewHeight - 1);
|
}
|
|
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
|
si.nMin = 0;
|
si.nMax = VScrollMax;
|
si.nPos = m_nVScrollPos;
|
si.nPage = m_nVPageSize;
|
SetScrollInfo(SB_VERT,&si,TRUE);
|
|
Invalidate(true);
|
}
|
|
|
void CDlgReflowMasterImage::OnLButtonDown(UINT nFlags, CPoint point)
|
{
|
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
|
|
m_damPoint[(m_damCount % 4)] = CPoint(m_nHScrollPos + point.x, m_nVScrollPos + point.y);
|
m_damCount++;
|
|
Invalidate(FALSE);
|
|
if(m_damCount >= 4)
|
{
|
m_DlgCommon->OnSetMaster(TRUE, m_nDir, m_damPoint);
|
}
|
|
|
CDialogEx::OnLButtonDown(nFlags, point);
|
}
|