+++ /dev/null
-// DWnd.cpp : implementation file\r
-//\r
-\r
-#include "stdafx.h"\r
-\r
-#ifdef _DEBUG\r
-#define new DEBUG_NEW\r
-#undef THIS_FILE\r
-static char THIS_FILE[] = __FILE__;\r
-#endif\r
-\r
-#include "DWnd.h"\r
-/////////////////////////////////////////////////////////////////////////////\r
-// CDWnd\r
-\r
-CDWnd::CDWnd()\r
-{\r
- m_FatherWnd = NULL;\r
- m_IWK[0] = m_IWK[1] = 0;\r
- m_WIK[0] = m_WIK[1] = 0;\r
-}\r
-\r
-CDWnd::~CDWnd()\r
-{\r
-}\r
-\r
-\r
-BEGIN_MESSAGE_MAP(CDWnd, CWnd)\r
- //{{AFX_MSG_MAP(CDWnd)\r
- ON_WM_PAINT()\r
- ON_WM_SIZING()\r
- ON_WM_SIZE()\r
- ON_WM_LBUTTONDOWN()\r
- ON_WM_LBUTTONUP()\r
- ON_WM_MOUSEMOVE()\r
- ON_WM_CHAR()\r
- //}}AFX_MSG_MAP\r
-END_MESSAGE_MAP()\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// CDWnd message handlers\r
-\r
-BOOL CDWnd::CreateWnd(CWnd* pParent, \r
- char* pName,\r
- long lWidth,\r
- long lHeight,\r
- long lBPP )\r
-{\r
- BOOL res = TRUE;\r
- RECT rect;\r
-\r
- rect.left = 0;\r
- rect.top = 0;\r
- rect.right = rect.left + lWidth;\r
- rect.bottom = rect.top + lHeight;\r
-\r
- res = CreateEx( WS_EX_CLIENTEDGE,\r
- AfxRegisterWndClass( NULL ),\r
- pName,\r
- WS_VISIBLE | WS_TILEDWINDOW ,\r
- rect, pParent, 0, NULL );\r
- if( !res ) return FALSE;\r
-\r
- m_Image.Create( rect.right, rect.bottom, lBPP );\r
-\r
- m_FatherWnd = pParent;\r
- return TRUE;\r
-}\r
-\r
-void CDWnd::DrawIplImage( IplImage* pImage, BOOL bSetChannelNumber )\r
-{\r
- long CN = 3;\r
- IplImage* pDstImg = m_Image.GetImage();\r
- if( pImage == NULL ) return;\r
- if( pImage->depth != IPL_DEPTH_8U ) return;\r
-\r
- if( pDstImg != 0 ) CN = pDstImg->nChannels;\r
- if( bSetChannelNumber ) CN = pImage->nChannels;\r
- \r
- if( pDstImg == NULL ||\r
- pImage->width != pDstImg->width ||\r
- pImage->height != pDstImg->height ||\r
- (CN != pDstImg->nChannels) )\r
- {\r
- m_Image.Create( \r
- pImage->width,\r
- pImage->height,\r
- CN * 8 );\r
- pDstImg = m_Image.GetImage();\r
- }\r
-\r
- if( pDstImg == NULL ) return;\r
- if( pImage->nChannels == pDstImg->nChannels )\r
- {\r
- m_Image.CopyOf( pImage );\r
- }\r
- else if( pImage->nChannels == 1 && pDstImg->nChannels == 3 )\r
- { /* gray to color */\r
- iplGrayToColor(pImage, pDstImg, 1, 1, 1);\r
- }\r
- else if( pImage->nChannels == 3 && pDstImg->nChannels == 1 )\r
- { /* color to gray */\r
- iplColorToGray( pImage, pDstImg );\r
- }\r
-}\r
-\r
-void CDWnd::OnPaint() \r
-{\r
- CPaintDC dc(this); // device context for painting\r
- ReDraw();\r
- // Do not call CWnd::OnPaint() for painting messages\r
-}\r
-\r
-BOOL CDWnd::ReDraw( CDC *pDC ) \r
-{\r
- \r
- HDC hDCSrc;\r
- HDC hDCDst;\r
-\r
- BOOL bReleaseDC = FALSE;\r
- RECT rect;\r
-\r
- if( m_hWnd == NULL ) return FALSE;\r
-\r
- GetClientRect( &rect );\r
-\r
- if( pDC == NULL ) {pDC = GetDC();bReleaseDC = TRUE; }\r
- if( pDC == NULL ) return FALSE;\r
-\r
- hDCSrc = m_Image.GetDC();\r
- hDCDst = pDC->m_hDC;\r
- if( m_Image.Width() > rect.right - rect.left )\r
- {\r
- SetStretchBltMode(\r
- hDCDst, // handle to device context\r
- HALFTONE );\r
- }\r
- else\r
- {\r
- SetStretchBltMode(\r
- hDCDst, // handle to device context\r
- COLORONCOLOR );\r
- }\r
-\r
- ::StretchBlt( \r
- hDCDst,\r
- rect.left, rect.top,\r
- rect.right - rect.left, rect.bottom - rect.top,\r
- hDCSrc,\r
- 0,0,\r
- m_Image.Width(),\r
- m_Image.Height(),\r
- SRCCOPY );\r
-\r
- m_IWK[0] = (double)(rect.right - rect.left) / m_Image.Width();\r
- m_IWK[1] = (double)(rect.bottom - rect.top) / m_Image.Height();\r
- m_WIK[0] = (double)m_Image.Width() / (rect.right - rect.left);\r
- m_WIK[1] = (double)m_Image.Height() / (rect.bottom - rect.top);\r
-\r
- if( bReleaseDC ) ReleaseDC( pDC );\r
-\r
- return TRUE;\r
-}\r
-\r
-BOOL CDWnd::DrawToHDC( HDC hDC, RECT* pDstRect ) \r
-{\r
- \r
- HDC hDCSrc;\r
- HDC hDCDst;\r
-\r
- RECT rect;\r
-\r
- if( m_hWnd == NULL ) return FALSE;\r
-\r
- if( pDstRect ) rect = *pDstRect;\r
- else GetClientRect( &rect );\r
-\r
- hDCSrc = m_Image.GetDC();\r
- hDCDst = hDC;\r
- if( m_Image.Width() > rect.right - rect.left )\r
- {\r
- SetStretchBltMode(\r
- hDCDst, // handle to device context\r
- HALFTONE );\r
- }\r
- else\r
- {\r
- SetStretchBltMode(\r
- hDCDst, // handle to device context\r
- COLORONCOLOR );\r
- }\r
-\r
- ::StretchBlt( \r
- hDCDst,\r
- rect.left, rect.top,\r
- rect.right - rect.left, rect.bottom - rect.top,\r
- hDCSrc,\r
- 0,0,\r
- m_Image.Width(),\r
- m_Image.Height(),\r
- SRCCOPY );\r
-\r
- return TRUE;\r
-}\r
-\r
-void CDWnd::OnSizing(UINT fwSide, LPRECT pRect) \r
-{\r
- CWnd::OnSizing(fwSide, pRect);\r
- \r
- // TODO: Add your message handler code here\r
- \r
-}\r
-\r
-void CDWnd::OnSize(UINT nType, int cx, int cy) \r
-{\r
- CWnd::OnSize(nType, cx, cy);\r
- \r
- ReDraw();\r
-}\r
-\r
-void CDWnd::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) \r
-{\r
- // TODO: Add your message handler code here and/or call default\r
- if( nChar == 115 && nFlags == 31 )\r
- {\r
- CString str;\r
- GetWindowText(str);\r
- str += ".bmp";\r
- m_Image.Save((LPCTSTR)str);\r
- }\r
- \r
- CWnd::OnChar(nChar, nRepCnt, nFlags);\r
-}\r