1 // DWnd.cpp : implementation file
\r
7 #define new DEBUG_NEW
\r
9 static char THIS_FILE[] = __FILE__;
\r
13 /////////////////////////////////////////////////////////////////////////////
\r
19 m_IWK[0] = m_IWK[1] = 0;
\r
20 m_WIK[0] = m_WIK[1] = 0;
\r
28 BEGIN_MESSAGE_MAP(CDWnd, CWnd)
\r
29 //{{AFX_MSG_MAP(CDWnd)
\r
41 /////////////////////////////////////////////////////////////////////////////
\r
42 // CDWnd message handlers
\r
44 BOOL CDWnd::CreateWnd(CWnd* pParent,
\r
55 rect.right = rect.left + lWidth;
\r
56 rect.bottom = rect.top + lHeight;
\r
58 res = CreateEx( WS_EX_CLIENTEDGE,
\r
59 AfxRegisterWndClass( NULL ),
\r
61 WS_VISIBLE | WS_TILEDWINDOW ,
\r
62 rect, pParent, 0, NULL );
\r
63 if( !res ) return FALSE;
\r
65 m_Image.Create( rect.right, rect.bottom, lBPP );
\r
67 m_FatherWnd = pParent;
\r
71 void CDWnd::DrawIplImage( IplImage* pImage, BOOL bSetChannelNumber )
\r
74 IplImage* pDstImg = m_Image.GetImage();
\r
75 if( pImage == NULL ) return;
\r
76 if( pImage->depth != IPL_DEPTH_8U ) return;
\r
78 if( pDstImg != 0 ) CN = pDstImg->nChannels;
\r
79 if( bSetChannelNumber ) CN = pImage->nChannels;
\r
81 if( pDstImg == NULL ||
\r
82 pImage->width != pDstImg->width ||
\r
83 pImage->height != pDstImg->height ||
\r
84 (CN != pDstImg->nChannels) )
\r
90 pDstImg = m_Image.GetImage();
\r
93 if( pDstImg == NULL ) return;
\r
94 if( pImage->nChannels == pDstImg->nChannels )
\r
96 m_Image.CopyOf( pImage );
\r
98 else if( pImage->nChannels == 1 && pDstImg->nChannels == 3 )
\r
99 { /* gray to color */
\r
100 iplGrayToColor(pImage, pDstImg, 1, 1, 1);
\r
102 else if( pImage->nChannels == 3 && pDstImg->nChannels == 1 )
\r
103 { /* color to gray */
\r
104 iplColorToGray( pImage, pDstImg );
\r
108 void CDWnd::OnPaint()
\r
110 CPaintDC dc(this); // device context for painting
\r
112 // Do not call CWnd::OnPaint() for painting messages
\r
115 BOOL CDWnd::ReDraw( CDC *pDC )
\r
121 BOOL bReleaseDC = FALSE;
\r
124 if( m_hWnd == NULL ) return FALSE;
\r
126 GetClientRect( &rect );
\r
128 if( pDC == NULL ) {pDC = GetDC();bReleaseDC = TRUE; }
\r
129 if( pDC == NULL ) return FALSE;
\r
131 hDCSrc = m_Image.GetDC();
\r
132 hDCDst = pDC->m_hDC;
\r
133 if( m_Image.Width() > rect.right - rect.left )
\r
136 hDCDst, // handle to device context
\r
142 hDCDst, // handle to device context
\r
148 rect.left, rect.top,
\r
149 rect.right - rect.left, rect.bottom - rect.top,
\r
156 m_IWK[0] = (double)(rect.right - rect.left) / m_Image.Width();
\r
157 m_IWK[1] = (double)(rect.bottom - rect.top) / m_Image.Height();
\r
158 m_WIK[0] = (double)m_Image.Width() / (rect.right - rect.left);
\r
159 m_WIK[1] = (double)m_Image.Height() / (rect.bottom - rect.top);
\r
161 if( bReleaseDC ) ReleaseDC( pDC );
\r
166 BOOL CDWnd::DrawToHDC( HDC hDC, RECT* pDstRect )
\r
174 if( m_hWnd == NULL ) return FALSE;
\r
176 if( pDstRect ) rect = *pDstRect;
\r
177 else GetClientRect( &rect );
\r
179 hDCSrc = m_Image.GetDC();
\r
181 if( m_Image.Width() > rect.right - rect.left )
\r
184 hDCDst, // handle to device context
\r
190 hDCDst, // handle to device context
\r
196 rect.left, rect.top,
\r
197 rect.right - rect.left, rect.bottom - rect.top,
\r
207 void CDWnd::OnSizing(UINT fwSide, LPRECT pRect)
\r
209 CWnd::OnSizing(fwSide, pRect);
\r
211 // TODO: Add your message handler code here
\r
215 void CDWnd::OnSize(UINT nType, int cx, int cy)
\r
217 CWnd::OnSize(nType, cx, cy);
\r
222 void CDWnd::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
\r
224 // TODO: Add your message handler code here and/or call default
\r
225 if( nChar == 115 && nFlags == 31 )
\r
228 GetWindowText(str);
\r
230 m_Image.Save((LPCTSTR)str);
\r
233 CWnd::OnChar(nChar, nRepCnt, nFlags);
\r