// MImageStatic.cpp : implementation file
|
//
|
|
#include "stdafx.h"
|
#include "..\\resource.h"
|
#include "MImageStatic.h"
|
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#undef THIS_FILE
|
static char THIS_FILE[] = __FILE__;
|
#endif
|
|
/////////////////////////////////////////////////////////////////////////////
|
// CMImageStatic
|
|
CMImageStatic::CMImageStatic()
|
{
|
ZeroMemory(m_ImageBuf, DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1);
|
m_bSetImage = FALSE;
|
m_iShowGrid = 0;
|
m_iShowDefectRect = 0;
|
|
BITMAPINFO *pBitmapInfo = (BITMAPINFO *)m_BitmapInfo;
|
|
pBitmapInfo->bmiHeader.biBitCount = 8;
|
pBitmapInfo->bmiHeader.biClrUsed = 256;
|
pBitmapInfo->bmiHeader.biClrImportant = 0;
|
pBitmapInfo->bmiHeader.biCompression = 0;
|
pBitmapInfo->bmiHeader.biHeight = -DEFECTIMAGE_HEIGHT; // flip view
|
pBitmapInfo->bmiHeader.biPlanes = 1;
|
pBitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
pBitmapInfo->bmiHeader.biSizeImage = DEFECTIMAGE_HEIGHT*DEFECTIMAGE_WIDTH;
|
pBitmapInfo->bmiHeader.biWidth = DEFECTIMAGE_WIDTH;
|
pBitmapInfo->bmiHeader.biXPelsPerMeter = 0;
|
pBitmapInfo->bmiHeader.biYPelsPerMeter = 0;
|
|
for(int i=0 ; i<256 ; i++)
|
{
|
pBitmapInfo->bmiColors[i].rgbReserved = 0;
|
pBitmapInfo->bmiColors[i].rgbRed = i;
|
pBitmapInfo->bmiColors[i].rgbGreen = i;
|
pBitmapInfo->bmiColors[i].rgbBlue = i;
|
}
|
}
|
|
CMImageStatic::~CMImageStatic()
|
{
|
}
|
|
|
BEGIN_MESSAGE_MAP(CMImageStatic, CStatic)
|
//{{AFX_MSG_MAP(CMImageStatic)
|
ON_WM_PAINT()
|
ON_WM_RBUTTONDOWN()
|
//}}AFX_MSG_MAP
|
END_MESSAGE_MAP()
|
|
/////////////////////////////////////////////////////////////////////////////
|
// CMImageStatic message handlers
|
|
void CMImageStatic::DrawDotCenterLine(HDC hDC)
|
{
|
int i, j;
|
COLORREF clrImage = RGB(200, 0, 0);
|
|
//miniont
|
for(i = 0; i < DEFECTIMAGE_HEIGHT; i++)
|
{
|
for(j = 0; j < DEFECTIMAGE_WIDTH; j++)
|
{
|
if (m_iShowGrid==1)
|
{
|
if (i == DEFECTIMAGE_HEIGHT / 2)
|
{
|
if(j % 5 == 0)
|
{
|
::SetPixel(hDC, j, i, clrImage);
|
}
|
else
|
{
|
;
|
}
|
}
|
else
|
{
|
;
|
}
|
|
if (j == DEFECTIMAGE_WIDTH / 2)
|
{
|
if(i % 5 == 0)
|
{
|
::SetPixel(hDC, j, i, clrImage);
|
}
|
else
|
{
|
;
|
}
|
}
|
else
|
{
|
;
|
}
|
}
|
else if (m_iShowGrid==2)
|
{
|
if(i == DEFECTIMAGE_HEIGHT / 2)
|
{
|
if(j % 5 == 0)
|
{
|
::SetPixel(hDC, j, i, clrImage);
|
}
|
else
|
{
|
;
|
}
|
}
|
else
|
{
|
;
|
}
|
|
if(j == DEFECTIMAGE_WIDTH / 7)
|
{
|
if(i % 5 == 0) ::SetPixel(hDC, j, i, clrImage);
|
else ;
|
}
|
else if(j == 6*DEFECTIMAGE_WIDTH / 7)
|
{
|
if(i % 5 == 0) ::SetPixel(hDC, j, i, clrImage);
|
else ;
|
}
|
else if(j == DEFECTIMAGE_WIDTH / 2)
|
{
|
if(i % 5 == 0) ::SetPixel(hDC, j, i, clrImage);
|
else ;
|
}
|
}
|
}
|
}
|
}
|
|
void CMImageStatic::OnPaint()
|
{
|
CPaintDC dc(this); // device context for painting
|
|
HDC hDC = dc.GetSafeHdc();
|
|
// TODO: Add your message handler code here
|
if (!m_bSetImage)
|
{
|
CClientDC WinDC(this);
|
CDC MemDC;
|
MemDC.CreateCompatibleDC(&WinDC);
|
CBitmap bitmap;
|
bitmap.LoadBitmap(IDB_BITMAP_DEFECT);
|
CBitmap *pOldBitmap = (CBitmap*)MemDC.SelectObject(&bitmap);
|
WinDC.BitBlt(0, 0, DEFECTIMAGE_WIDTH * 2, DEFECTIMAGE_HEIGHT * 2, &MemDC, 0, 0, SRCCOPY);
|
MemDC.SelectObject(pOldBitmap);
|
|
return;
|
}
|
else
|
{
|
int nMode;
|
if((nMode = GetBkMode(hDC)) != TRANSPARENT) ::SetBkMode(hDC, TRANSPARENT);
|
|
HBITMAP hBitmap, hOldBitmap;
|
HDC hMemDC = ::CreateCompatibleDC(hDC);
|
hBitmap = ::CreateCompatibleBitmap(hDC, DEFECTIMAGE_WIDTH, DEFECTIMAGE_HEIGHT);
|
if(NULL == hBitmap)
|
return;
|
|
hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap);
|
|
::StretchDIBits(hMemDC, 0, 0, DEFECTIMAGE_WIDTH, DEFECTIMAGE_HEIGHT,
|
0, 0, DEFECTIMAGE_WIDTH, DEFECTIMAGE_HEIGHT, m_ImageBuf, (BITMAPINFO *)m_BitmapInfo, DIB_RGB_COLORS, SRCCOPY);
|
|
DrawDotCenterLine(hMemDC);
|
|
if(m_iShowDefectRect == 1)
|
{
|
CPen PenRect;
|
PenRect.CreatePen(PS_SOLID, 1, RGB(255,0,0));
|
DrawRectangle(hMemDC,PenRect,m_rectDefect);
|
PenRect.DeleteObject();
|
}
|
|
::BitBlt(hDC, 0, 0, DEFECTIMAGE_WIDTH, DEFECTIMAGE_HEIGHT,
|
hMemDC, 0, 0, SRCCOPY);
|
|
::DeleteObject(::SelectObject(hMemDC,hOldBitmap));
|
::DeleteDC(hMemDC);
|
|
if(GetBkMode(hDC) != nMode)
|
::SetBkMode(hDC, nMode);
|
|
|
}
|
|
// Do not call CStatic::OnPaint() for painting messages
|
}
|
|
void CMImageStatic::DrawRectangle(HDC hDC, HPEN hPen, CRect rect)
|
{
|
HPEN hOldPen= NULL;
|
HBRUSH hOldBrush = NULL;
|
|
if(hPen)
|
hOldPen = (HPEN)::SelectObject(hDC ,hPen);
|
|
::MoveToEx(hDC, rect.left, rect.top, NULL);
|
::LineTo(hDC, rect.right, rect.top);
|
::LineTo(hDC, rect.right, rect.bottom);
|
::LineTo(hDC, rect.left, rect.bottom);
|
::LineTo(hDC, rect.left, rect.top);
|
|
if(hPen)
|
::SelectObject(hDC , (HPEN)hOldPen);
|
}
|
|
void CMImageStatic::OnRButtonDown(UINT nFlags, CPoint point)
|
{
|
NMHDR nmHeader;
|
|
nmHeader.idFrom = GetDlgCtrlID();
|
nmHeader.hwndFrom = GetSafeHwnd();
|
nmHeader.code = NM_DBLCLK;
|
|
::SendMessage(GetParent()->GetSafeHwnd(), WM_NOTIFY, (WPARAM)nmHeader.idFrom, (LPARAM)&nmHeader );
|
}
|
|
void CMImageStatic::ResetImageStatic()
|
{
|
// °áÇÔ À̹ÌÁö ¹öÆÛ¸¦ ÃʱâÈ.
|
ZeroMemory(m_ImageBuf, DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1);
|
m_bSetImage = FALSE;
|
m_rectDefect = CRect(0,0,0,0);
|
Invalidate();
|
}
|
|
void CMImageStatic::ShowRect(CRect rect)
|
{
|
m_rectDefect = rect;
|
}
|
|
void CMImageStatic::ShowGrid(int iShow)
|
{
|
m_iShowGrid = iShow;
|
|
Invalidate();
|
}
|
|
void CMImageStatic::ShowDefectRect(int iShow)
|
{
|
m_iShowDefectRect = iShow;
|
|
Invalidate();
|
}
|