/*[]=====================================================================[]*/ /*[] LEADTOOLS for Windows(Class Library) - Version 11 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ /*---(NewPaint)--------------------------------------------------------------- We have made the assumption that the user has the knowledge of Object Oriented programing of C under Windows. This example will: 1. load the image from a file, whose name is sent through the command line, using LFile::LoadFile(), 2. display the image, 3. pop up a dialog box to set paint rects for displaying. Usage: PAINTDC --------------------------------------------------------------------------*/ // LTPDCVew.cpp : implementation of the CLTPntDCView class // #include "stdafx.h" #include "LTPntDC.h" #include "LTPDCDoc.h" #include "LTPDCVew.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLTPntDCView IMPLEMENT_DYNCREATE(CLTPntDCView, CView) BEGIN_MESSAGE_MAP(CLTPntDCView, CView) //{{AFX_MSG_MAP(CLTPntDCView) ON_COMMAND(IDM_GO, OnGo) ON_COMMAND(IDM_SRCCOPY, OnSrccopy) ON_COMMAND(IDM_SRCPAINT, OnSrcpaint) ON_COMMAND(IDM_SRCAND, OnSrcand) ON_COMMAND(IDM_SRCINVERT, OnSrcinvert) ON_COMMAND(IDM_SRCERASE, OnSrcerase) ON_COMMAND(IDM_NOTSRCCOPY, OnNotsrccopy) ON_COMMAND(IDM_NOTSRCERASE, OnNotsrcerase) ON_COMMAND(IDM_MERGECOPY, OnMergecopy) ON_COMMAND(IDM_MERGEPAINT, OnMergepaint) ON_COMMAND(IDM_PATCOPY, OnPatcopy) ON_COMMAND(IDM_PATPAINT, OnPatpaint) ON_COMMAND(IDM_PATINVERT, OnPatinvert) ON_COMMAND(IDM_DSTINVERT, OnDstinvert) ON_COMMAND(IDM_BLACKNESS, OnBlackness) ON_COMMAND(IDM_WHITENESS, OnWhiteness) ON_UPDATE_COMMAND_UI(IDM_SRCCOPY, OnUpdateSrccopy) ON_UPDATE_COMMAND_UI(IDM_SRCPAINT, OnUpdateSrcpaint) ON_UPDATE_COMMAND_UI(IDM_SRCAND, OnUpdateSrcand) ON_UPDATE_COMMAND_UI(IDM_SRCINVERT, OnUpdateSrcinvert) ON_UPDATE_COMMAND_UI(IDM_SRCERASE, OnUpdateSrcerase) ON_UPDATE_COMMAND_UI(IDM_NOTSRCCOPY, OnUpdateNotsrccopy) ON_UPDATE_COMMAND_UI(IDM_NOTSRCERASE, OnUpdateNotsrcerase) ON_UPDATE_COMMAND_UI(IDM_MERGECOPY, OnUpdateMergecopy) ON_UPDATE_COMMAND_UI(IDM_MERGEPAINT, OnUpdateMergepaint) ON_UPDATE_COMMAND_UI(IDM_PATCOPY, OnUpdatePatcopy) ON_UPDATE_COMMAND_UI(IDM_PATPAINT, OnUpdatePatpaint) ON_UPDATE_COMMAND_UI(IDM_PATINVERT, OnUpdatePatinvert) ON_UPDATE_COMMAND_UI(IDM_DSTINVERT, OnUpdateDstinvert) ON_UPDATE_COMMAND_UI(IDM_BLACKNESS, OnUpdateBlackness) ON_UPDATE_COMMAND_UI(IDM_WHITENESS, OnUpdateWhiteness) ON_WM_CREATE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLTPntDCView construction/destruction CLTPntDCView::CLTPntDCView() { m_uropCode = SRCCOPY; memset(&m_BmpRectDlgData, 0, sizeof(BMPRECTDLGDATA)); m_BmpRectDlgData.uDISPLAYMODE = DISPLAYMODE_ORDEREDDITHER; m_BmpRectDlgData.OTHEROPTION1 = OTHER_ERASENEWPAINTRGN; m_BmpRectDlgData.OTHEROPTION2 = OTHER_NONE; } CLTPntDCView::~CLTPntDCView() { } ///////////////////////////////////////////////////////////////////////////// // CLTPntDCView drawing void CLTPntDCView::OnDraw(CDC* pDC) { HPALETTE oldPalette = NULL; CRect rcClient; CLTPntDCDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(m_LeadBitmapBase.GetPalette()) { oldPalette = SelectPalette(pDC->m_hDC, m_LeadBitmapBase.GetPalette(), TRUE); RealizePalette(pDC->m_hDC); } m_LeadBitmapBase.Paint()->SetDC(pDC->m_hDC); m_LeadBitmapBase.Paint()->PaintDC(m_uropCode); // Reselect the old pallete if(oldPalette ) SelectPalette(pDC->m_hDC, oldPalette, TRUE); } ///////////////////////////////////////////////////////////////////////////// // CLTPntDCView diagnostics #ifdef _DEBUG void CLTPntDCView::AssertValid() const { CView::AssertValid(); } void CLTPntDCView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CLTPntDCDoc* CLTPntDCView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLTPntDCDoc))); return (CLTPntDCDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLTPntDCView message handlers L_INT CLTPntDCView::LoadImage(L_TCHAR *pszFileName) { FILEINFO fi; L_INT nRet; RECT rect; memset(&fi, 0, sizeof(FILEINFO)); m_LeadBitmapBase.SetFileName(pszFileName); if((nRet = m_LeadBitmapBase.File()->GetInfo(&fi, sizeof(FILEINFO))) == SUCCESS) nRet = m_LeadBitmapBase.Load(fi.BitsPerPixel, fi.Order, fi.PageNumber); SetRect(&rect, 0, 0, m_LeadBitmapBase.GetWidth(), m_LeadBitmapBase.GetHeight()); m_LeadBitmapBase.SetSrcRect(&rect); m_LeadBitmapBase.SetClipSrcRect(&rect); m_LeadBitmapBase.SetDstRect(&rect); m_LeadBitmapBase.SetClipDstRect(&rect); return nRet; } void CLTPntDCView::OnGo() { // Get the bitmap rectangles m_LeadBitmapBase.GetRects(&m_BmpRectDlgData.srcRect, &m_BmpRectDlgData.srcClipRect, &m_BmpRectDlgData.dstRect, &m_BmpRectDlgData.dstClipRect); // Get bitmap dimentions m_BmpRectDlgData.Dimensions.x = m_LeadBitmapBase.GetWidth(); m_BmpRectDlgData.Dimensions.y = m_LeadBitmapBase.GetHeight(); // Get bitmap bits per pixel m_BmpRectDlgData.iBitsPP = m_LeadBitmapBase.GetBitsPerPixel(); CBmpRect BRDlg(this, &m_BmpRectDlgData); if(BRDlg.DoModal() == IDOK) { m_LeadBitmapBase.SetSrcRect(&m_BmpRectDlgData.srcRect); m_LeadBitmapBase.SetClipSrcRect(&m_BmpRectDlgData.srcClipRect); m_LeadBitmapBase.SetDstRect(&m_BmpRectDlgData.dstRect); m_LeadBitmapBase.SetClipDstRect(&m_BmpRectDlgData.dstClipRect); InvalidateRect(NULL, true); } } void CLTPntDCView::OnSrccopy() { m_uropCode = SRCCOPY; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateSrccopy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == SRCCOPY); } void CLTPntDCView::OnSrcpaint() { m_uropCode = SRCPAINT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateSrcpaint(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == SRCPAINT); } void CLTPntDCView::OnSrcand() { m_uropCode = SRCAND; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateSrcand(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == SRCAND); } void CLTPntDCView::OnSrcinvert() { m_uropCode = SRCINVERT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateSrcinvert(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == SRCINVERT); } void CLTPntDCView::OnSrcerase() { m_uropCode = SRCERASE; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateSrcerase(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == SRCERASE); } void CLTPntDCView::OnNotsrccopy() { m_uropCode = NOTSRCCOPY; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateNotsrccopy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == NOTSRCCOPY); } void CLTPntDCView::OnNotsrcerase() { m_uropCode = NOTSRCERASE; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateNotsrcerase(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == NOTSRCERASE); } void CLTPntDCView::OnMergecopy() { m_uropCode = MERGECOPY; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateMergecopy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == MERGECOPY); } void CLTPntDCView::OnMergepaint() { m_uropCode = MERGEPAINT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateMergepaint(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == MERGEPAINT); } void CLTPntDCView::OnPatcopy() { m_uropCode = PATCOPY; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdatePatcopy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == PATCOPY); } void CLTPntDCView::OnPatpaint() { m_uropCode = PATPAINT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdatePatpaint(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == PATPAINT); } void CLTPntDCView::OnPatinvert() { m_uropCode = PATINVERT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdatePatinvert(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == PATINVERT); } void CLTPntDCView::OnDstinvert() { m_uropCode = DSTINVERT; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateDstinvert(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == DSTINVERT); } void CLTPntDCView::OnBlackness() { m_uropCode = BLACKNESS; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateBlackness(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == BLACKNESS); } void CLTPntDCView::OnWhiteness() { m_uropCode = WHITENESS; InvalidateRect(NULL, TRUE); } void CLTPntDCView::OnUpdateWhiteness(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_uropCode == WHITENESS); } int CLTPntDCView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CString strTemp(((CLTPntDCApp*)AfxGetApp())->m_strCmdLine); if(strTemp.IsEmpty()) { LBase::DisplayError(GetSafeHwnd(), _T("No file to be opened.")); return -1; } if(LoadImage(((CLTPntDCApp*)AfxGetApp())->m_strCmdLine) != SUCCESS) { LBase::DisplayErrorFromList(NULL); return -1; } m_LeadBitmapBase.SetDisplayMode(DISPLAYMODE_ORDEREDDITHER, DISPLAYMODE_ORDEREDDITHER); m_BmpRectDlgData.iBitsPP = m_LeadBitmapBase.GetBitsPerPixel(); m_fDisplayFlags = m_LeadBitmapBase.GetDisplayMode(); if(m_LeadBitmapBase.GetBitsPerPixel() == 1) OnQueryNewPalette(); return 0; } void CLTPntDCView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { if(bActivate && pActivateView == this) HandlePalette(WM_QUERYNEWPALETTE,NULL); CView::OnActivateView(bActivate, pActivateView, pDeactiveView); } L_BOOL CLTPntDCView::HandlePalette(UINT uMsg,HWND hWnd) { HDC hDC; switch(uMsg) { case WM_PALETTECHANGED: if(m_hWnd== hWnd) return TRUE; case WM_SYSCOLORCHANGE: case WM_QUERYNEWPALETTE: hDC = ::GetDC(m_hWnd); HPALETTE hPalette = m_LeadBitmapBase.CreatePaintPalette(hDC); L_UINT uColor=0; if(hPalette) { HPALETTE oldPalette = ::SelectPalette(hDC,hPalette,(uMsg==WM_PALETTECHANGED)); uColor=::RealizePalette(hDC); ::SelectPalette(hDC,oldPalette,TRUE); } ::ReleaseDC(m_hWnd,hDC); if(uColor!=0) { InvalidateRect(NULL,false); UpdateWindow(); return TRUE; } break; } return FALSE; }