Main.c
上传用户:s6549606
上传日期:2015-11-11
资源大小:12002k
文件大小:5k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <commdlg.h>
  3. #include <string.h>
  4. #include "jpeg.h"
  5. ////////////////////////////////////////////////////////////
  6. int  PASCAL WinMain (HANDLE, HANDLE, LPSTR, int);
  7. LRESULT CALLBACK MainWndProc(HWND , UINT,WPARAM, LPARAM);
  8. extern void ScrollProc (HWND hWnd, int message, WORD wPos, WORD wScrollType);
  9. extern void DisProc(HWND hWnd,HGLOBAL hbi);
  10. //extern void SizeProc(HWND hWnd);
  11. extern void GetJPGSize(char *fn);
  12. extern void DecodeJPG(HWND ,char *,HGLOBAL *);
  13. extern void FitNewSize (HWND hWnd);
  14. void getopenname(HWND hWnd,char *openname);
  15. ////////////////////////////////////////////////////////////
  16. HINSTANCE hinst;
  17. HGLOBAL hbi;
  18. HMENU   hMenu;
  19. int     imgwidth,imgheight;
  20. BOOL    HSCROLL,VSCROLL;
  21. /*------------------------- WinMain() ------------------------*/
  22. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  23.     LPSTR lpszCmdLine, int nCmdShow)
  24. {
  25. MSG       msg;
  26.    HWND      hWnd;
  27.     WNDCLASS  wndclass;
  28.     RECT rc;
  29.     int       DesktopWidth,DesktopHeight,FrameLeft,FrameTop,FrameWidth,FrameHeight;
  30.     
  31.     hinst=hInstance;
  32.     if ( ! hPrevInstance )
  33.      {
  34.       wndclass.style = CS_HREDRAW | CS_VREDRAW;
  35.       wndclass.lpfnWndProc = MainWndProc;
  36.       wndclass.cbClsExtra = 0;
  37.       wndclass.cbWndExtra = 0;
  38.       wndclass.hInstance = hInstance;
  39.       wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  40.       wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
  41.       wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
  42.       wndclass.lpszMenuName =  "FileMenu";
  43.       wndclass.lpszClassName = "JPEG Viewer";
  44.       if ( ! RegisterClass (&wndclass) )
  45.         return FALSE;
  46.      }
  47. hMenu = LoadMenu(hInstance,"FileMenu");
  48.     GetWindowRect(GetDesktopWindow(),&rc);           
  49.     DesktopWidth = rc.right - rc.left;
  50.     DesktopHeight = rc.bottom - rc.top;
  51.     FrameLeft = DesktopWidth / 10;
  52.     FrameTop  = DesktopHeight /10;
  53.     FrameWidth = FrameLeft*8;
  54.     FrameHeight = FrameTop*8;
  55.     hWnd = CreateWindow (
  56. "JPEG Viewer",
  57. "JPEG Viewer",
  58. WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU,//|WS_THICKFRAME, 
  59. FrameLeft,
  60. FrameTop,
  61. FrameWidth,
  62. FrameHeight,
  63. NULL,
  64. NULL,
  65. hInstance,
  66. NULL);
  67. if ( ! hWnd )
  68. return FALSE;
  69.    
  70.     SetMenu(hWnd,hMenu);
  71.     ShowWindow (hWnd, nCmdShow);
  72.     UpdateWindow (hWnd);
  73.     while ( GetMessage (&msg, NULL, 0, 0) )
  74.      {
  75.        TranslateMessage (&msg);
  76.        DispatchMessage (&msg);
  77.      }
  78.     return msg.wParam;
  79. }
  80. /*---------------------- WndProc() ---------------------------*/
  81. LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam)
  82. {
  83. char openname[256];
  84. switch (message)
  85.    {
  86.      case WM_CREATE:
  87.      hbi=NULL;
  88.      imgheight=0;
  89.      imgwidth=0;
  90.      HSCROLL=VSCROLL=FALSE;
  91.        break;
  92.     case WM_COMMAND:
  93.      switch (wParam)
  94. {
  95.    case IDM_OPEN:
  96.    getopenname(hWnd,openname);
  97.    if(openname[0]!='')
  98.    {
  99.    if(hbi!=NULL)
  100.    {
  101.    GlobalUnlock(hbi);
  102.    GlobalFree(hbi);
  103.    hbi=NULL;
  104.    }
  105.    imgheight=0;
  106.    imgwidth=0; 
  107.    GetJPGSize(openname);
  108.    if((imgwidth!=0)&&(imgheight!=0))
  109.    {
  110. //the InvalidateRect function is useful here
  111. HSCROLL=VSCROLL=FALSE;
  112. InvalidateRect(hWnd,NULL,TRUE);
  113. UpdateWindow(hWnd);
  114.    FitNewSize(hWnd);
  115.    DecodeJPG(hWnd,openname,&hbi);
  116.    }
  117. }
  118.    break;
  119.    case IDM_EXIT:
  120.      SendMessage (hWnd, WM_CLOSE, 0, 0);
  121.      return 0;
  122. }
  123.        break;
  124.      case WM_PAINT:
  125.      DisProc(hWnd,hbi);
  126. break;
  127. case WM_HSCROLL:
  128. case WM_VSCROLL:
  129. ScrollProc (hWnd, message, LOWORD (lParam), wParam);
  130. break;
  131.      case WM_DESTROY:
  132.      DestroyMenu(hMenu);
  133.             PostQuitMessage (0);
  134. return 0;
  135.     default:
  136.      break;
  137.    }
  138. return DefWindowProc (hWnd, message, wParam, lParam);
  139. }                            
  140. /*----------------------------GetOpenName()----------------------------*/
  141. void getopenname(HWND hWnd,char *openname)
  142. {
  143.     OPENFILENAME ofn;
  144.     char szFile[256],szFileTitle[256];
  145.     char szFilter[40];
  146.     int  len;
  147.     
  148.     strcpy(szFilter,"JPEG Image(*.jpg)|*.jpg|");
  149.     
  150.     len=strlen(szFilter);
  151.     szFilter[len-1]='';
  152.     szFilter[len-7]='';
  153.     // set all struct members to zero
  154.     memset(&ofn,0,sizeof(OPENFILENAME));
  155.     //initialize the OPENFILENAME members.
  156.     szFile[0] = '';
  157.     ofn.lStructSize = sizeof(OPENFILENAME);
  158.     ofn.hwndOwner = hWnd;    
  159.     ofn.lpstrFilter = szFilter;
  160.     ofn.lpstrFile = szFile;
  161.     ofn.nMaxFile = sizeof(szFile);
  162.     ofn.lpstrFileTitle = szFileTitle;
  163.     ofn.nMaxFileTitle = sizeof(szFileTitle);
  164.     ofn.lpstrInitialDir = NULL;
  165.     ofn.Flags = OFN_OVERWRITEPROMPT;
  166.     if (GetOpenFileName(&ofn))
  167.      lstrcpy(openname, ofn.lpstrFile);
  168.     else 
  169.         lstrcpy(openname,"");
  170. }