home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_17 / ImagePrint / ImagePrint.cpp next >
Encoding:
C/C++ Source or Header  |  2000-05-24  |  4.5 KB  |  166 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : imageprint.cpp                                                         //
  10. //  Description: JPEG image displaying and printing                                  //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define STRICT
  15. #define _WIN32_WINNT 0x0500
  16. #define NOCRYPT
  17.  
  18. #pragma pack(push, 4)
  19. #include <windows.h>
  20. #pragma pack(pop)
  21.  
  22. #include <assert.h>
  23. #include <tchar.h>
  24. #include <math.h>
  25. #include <stdio.h>
  26.  
  27. #include "..\..\include\win.h"
  28. #include "..\..\include\Toolbar.h"
  29. #include "..\..\include\Status.h"
  30. #include "..\..\include\FrameWnd.h"
  31. #include "..\..\include\filedialog.h"
  32. #include "..\..\include\outputsetup.h"
  33. #include "..\..\include\pagecanvas.h"
  34.  
  35. #include "..\..\include\jpeg.h"
  36.  
  37. #include "resource.h"
  38. #include "imageview.h"
  39.  
  40. const int Translate[] =
  41. {
  42.     IDM_FILE_CLOSE,
  43.     IDM_FILE_EXIT,
  44.     IDM_WINDOW_TILE,
  45.     IDM_WINDOW_CASCADE,
  46.     IDM_WINDOW_ARRANGE,
  47.     IDM_WINDOW_CLOSEALL
  48. };
  49.  
  50.  
  51. class KMyMDIFrame : public KMDIFrame
  52. {
  53.     void CreateMDIChild(KCanvas * canvas, const TCHAR * klass, const TCHAR * title)
  54.     {
  55.         MDICREATESTRUCT mdic;
  56.  
  57.         mdic.szClass = klass;
  58.         mdic.szTitle = title;
  59.         mdic.hOwner  = m_hInst;
  60.         mdic.x       = CW_USEDEFAULT;
  61.         mdic.y       = CW_USEDEFAULT;
  62.         mdic.cx      = CW_USEDEFAULT;
  63.         mdic.cy      = CW_USEDEFAULT;
  64.         mdic.style   = WS_VISIBLE | WS_BORDER;
  65.         mdic.lParam  = (LPARAM) canvas;
  66.  
  67.         HWND hWnd = (HWND) SendMessage(m_hMDIClient, WM_MDICREATE, 0, (LPARAM) & mdic);
  68.     }
  69.  
  70.     BOOL CreatePageCanvas(const TCHAR * Title, KPicture * pPicture)
  71.     {
  72.         KPageCanvas  * pCanvas;
  73.         
  74.         pCanvas = new KImageCanvas(pPicture, GetSysColorBrush(COLOR_BTNSHADOW));
  75.  
  76.         if ( pCanvas )
  77.         {
  78.             TCHAR FullTitle[MAX_PATH];
  79.  
  80.             wsprintf(FullTitle, "%s, %d by %d, 24-bit", Title, pPicture->GetWidth(), 
  81.                 pPicture->GetHeight());
  82.  
  83.             if ( pCanvas->Initialize(m_hInst, m_pStatus, IDR_DEMO) )
  84.             {
  85.                 CreateMDIChild(pCanvas, pCanvas->GetClassName(), FullTitle);
  86.                 return TRUE;
  87.             }
  88.  
  89.             delete pCanvas;
  90.         }
  91.  
  92.         return FALSE;
  93.     }
  94.  
  95.     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
  96.     {
  97.         switch ( LOWORD(wParam) )
  98.         {
  99.             case IDM_FILE_OPEN:
  100.             {
  101.                 KFileDialog fd;
  102.  
  103.                 if ( ! fd.GetOpenFileName(m_hWnd, "jpg", "JPEG Images") )
  104.                     return TRUE;
  105.  
  106.                 KPicture * pPicture = new KPicture;
  107.                 
  108.                 if ( pPicture->LoadJPEGFile(fd.m_TitleName) )
  109.                     CreatePageCanvas(fd.m_TitleName, pPicture);
  110.                 else
  111.                     delete pPicture;
  112.             }
  113.             return TRUE;
  114.         }
  115.  
  116.         return FALSE;
  117.     }
  118.  
  119.     virtual LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  120.     {
  121.         return KMDIFrame::WndProc(hWnd, uMsg, wParam, lParam);
  122.     }
  123.  
  124.     void GetWndClassEx(WNDCLASSEX & wc)
  125.     {
  126.         KMDIFrame::GetWndClassEx(wc);
  127.  
  128.         wc.hIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_PRINT));
  129.     }
  130.  
  131. public:
  132.     KMyMDIFrame(HINSTANCE hInstance, const TBBUTTON * pButtons, int nCount,
  133.         KToolbar * pToolbar, KStatusWindow * pStatus) :
  134.         KMDIFrame(hInstance, pButtons, nCount, pToolbar, pStatus, Translate)
  135.     {
  136.     }
  137. };
  138.  
  139.  
  140. const TBBUTTON tbButtons[] =
  141. {
  142.     { STD_FILENEW,     IDM_FILE_NEW,   TBSTATE_ENABLED, TBSTYLE_BUTTON, { 0, 0 }, IDS_FILENEW,  0 },
  143.     { STD_FILEOPEN,  IDM_FILE_OPEN,  TBSTATE_ENABLED, TBSTYLE_BUTTON, { 0, 0 }, IDS_FILEOPEN, 0 }
  144. };
  145.  
  146.  
  147. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nShow)
  148. {
  149.     KToolbar      toolbar;
  150.     KStatusWindow status;
  151.  
  152.     KMyMDIFrame frame(hInst, tbButtons, 2, & toolbar, & status);
  153.     
  154.     frame.CreateEx(0, _T("ClassName"), _T("ImagePrint"),
  155.         WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
  156.         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
  157.         NULL, LoadMenu(hInst, MAKEINTRESOURCE(IDR_MAIN)), hInst);
  158.  
  159.     frame.ShowWindow(nShow);
  160.     frame.UpdateWindow();
  161.  
  162.     frame.MessageLoop();
  163.  
  164.     return 0;
  165. }
  166.