SHOWDIB.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:13k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1993-1997 Microsoft Corporation.
  4. *       All rights reserved. 
  5. *       This source code is only intended as a supplement to 
  6. *       Microsoft Development Tools and/or WinHelp documentation.
  7. *       See these sources for detailed information regarding the 
  8. *       Microsoft samples programs.
  9. ******************************************************************************/
  10. #include <stdio.h>
  11. /****************************************************************************
  12.  *                                                                          *
  13.  *  FILE        : SHOWDIB.H                                                 *
  14.  *                                                                          *
  15.  *  DESCRIPTION : Header/include file for ShowDIB example.                  *
  16.  *                                                                          *
  17.  ****************************************************************************/
  18. typedef    POINTS       MPOINT         ;
  19. #ifdef _WIN32
  20. #define GET_WM_ACTIVATE_STATE(wp, lp)   LOWORD(wp)
  21. #define GET_WM_VSCROLL_CODE(wp, lp)     LOWORD(wp)
  22. #define GET_WM_VSCROLL_POS(wp, lp)      HIWORD(wp)
  23. #define GET_WM_HSCROLL_CODE(wp, lp)     LOWORD(wp)
  24. #define GET_WM_HSCROLL_POS(wp, lp)      HIWORD(wp)
  25. #define GET_EM_SETSEL_MPS(iStart, iEnd) (UINT)(iStart), (LONG)(iEnd)
  26. #define GET_WM_COMMAND_CMD(wp, lp)      HIWORD(wp)
  27. #define MAKEMPOINT(l)                   (*((MPOINT *)&(l)))
  28. #define HUGE_T
  29. #else
  30. #define GET_WM_ACTIVATE_STATE(wp, lp)               (wp)
  31. #define GET_WM_HSCROLL_CODE(wp, lp)                 (wp)
  32. #define GET_WM_HSCROLL_POS(wp, lp)                  LOWORD(lp)
  33. #define GET_WM_VSCROLL_CODE(wp, lp)                 (wp)
  34. #define GET_WM_VSCROLL_POS(wp, lp)                  LOWORD(lp)
  35. #define GET_EM_SETSEL_MPS(iStart, iEnd) 0, MAKELONG(iStart, iEnd)
  36. #define GET_WM_COMMAND_CMD(wp, lp)      HIWORD(lp)
  37. #define MAKEMPOINT(l)                   (*((MPOINT FAR *)&(l)))
  38. #define HUGE_T         huge
  39. #endif
  40. /* Macro to restrict a given value to an upper or lower boundary value */
  41. #define BOUND(x,min,max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
  42. /* Macro to swap two values */
  43. #define SWAP(x,y)   ((x)^=(y)^=(x)^=(y))
  44. /* Macro to find the minimum of two values */
  45. #define MIN(x,y) (((x) <= (y)) : x ? y)
  46. /* Macros to display/remove hourglass cursor for lengthy operations */
  47. #define StartWait() hcurSave = SetCursor(LoadCursor(NULL,IDC_WAIT))
  48. #define EndWait()   SetCursor(hcurSave)
  49. /* WinFlags, __WinFlags is a ABS external, thus the need for the & */
  50. #define WinFlags    ((WORD)(&_WinFlags))
  51. #define MINBAND         50     /* Minimum band size used by the program */
  52. #define BANDINCREMENT   20     /* Decrement for band size while trying  */
  53.                                /* to determine optimum band size.       */
  54. /* Bit values for the DIB attributes flag (fFileOptions). Also used as control
  55.  * IDs for the radiobuttons for DIB bitcount in the File/Open dialog
  56.  */
  57. #define F_1BPP      DLGOPEN_1BPP
  58. #define F_4BPP      DLGOPEN_4BPP
  59. #define F_8BPP      DLGOPEN_8BPP
  60. #define F_24BPP     DLGOPEN_24BPP
  61. /* Bit values for the DIB attributes flag (fFileOptions), also used as control
  62.  * IDs for the radiobuttons for DIB compression type in the File/Open dialog
  63.  */
  64. #define F_RLE4      DLGOPEN_RLE4
  65. #define F_RLE8      DLGOPEN_RLE8
  66. #define F_RGB       DLGOPEN_RGB
  67. #ifdef NOT_IN_STDIO
  68. /* flags for _lseek */
  69. #define  SEEK_CUR 1
  70. #define  SEEK_END 2
  71. #define  SEEK_SET 0
  72. #endif
  73. /* struct to be passed in for the SETDIBSCALING printer escape */
  74. typedef struct {
  75.         SHORT ScaleMode;
  76.         SHORT dx, dy;
  77. } DIBPARAMS;
  78. /* Menu IDs */
  79. #define IDM_UPDATECOL   1000
  80. #define IDM_ANIMATE0    1001
  81. #define IDM_ANIMATE5    5
  82. #define IDM_ANIMATE20   20
  83. #define IDM_ANIMATE50   50
  84. #define IDM_ANIMATE100  100
  85. #define IDM_ANIMATE200  200
  86. #define IDM_ANIMATE201  32000
  87. #define IDM_OPEN        1002
  88. #define IDM_EXIT        1003
  89. #define IDM_ABOUT       1004
  90. #define IDM_DIBSCREEN   1005
  91. #define IDM_NOUGLY      1006
  92. #define IDM_STEALCOL    1009
  93. #define IDM_PRINT       1010
  94. #define IDM_COPY        1012
  95. #define IDM_MEMORYDIB   1014
  96. #define IDM_SAVE        1015
  97. #define IDM_TRANSPARENT 1016
  98. #define IDM_PASTEDIB    1020
  99. #define IDM_PASTEDDB    1021
  100. #define IDM_PASTEPAL    1022
  101. /*String IDs*/
  102. #define IDS_MEMLOW          650
  103. #define IDS_NOMEM           651
  104. #define IDS_OPENDIBPROMPT   652
  105. #define IDS_SAVEDIBPROMPT   653
  106. #define IDS_CANTSAVEFILE    654
  107. #define IDS_CANTOPENFILE    655
  108. #define IDS_BADDIBFILE      656
  109. #define IDS_CREATEPALFAIL   657
  110. #define IDS_CANTLOADRLE     658
  111. #define IDS_CANTCREATEBMP   659
  112. #define IDS_CANTDRAWSCANS   660
  113. #define IDS_CANTDRAWMAP     661
  114. #define IDS_SAVESTR         662
  115. #define IDS_OPENSTR         663
  116. #define IDI_APP         2000
  117. #define ABOUTBOX        100
  118. extern HWND hWndApp;                   /* The handle to the app. window     */
  119. #define MAXREAD  32768                 /* Number of bytes to be read during */
  120.                                        /* each read operation.              */
  121. /* Header signatutes for various resources */
  122. #define BFT_ICON   0x4349   /* 'IC' */
  123. #define BFT_BITMAP 0x4d42   /* 'BM' */
  124. #define BFT_CURSOR 0x5450   /* 'PT' */
  125. /* macro to determine if resource is a DIB */
  126. #define ISDIB(bft) ((bft) == BFT_BITMAP)
  127. /* Macro to align given value to the closest DWORD (unsigned long ) */
  128. #define ALIGNULONG(i)   ((i+3)/4*4)
  129. /* Macro to determine to round off the given value to the closest byte */
  130. #define WIDTHBYTES(i)   ((i+31)/32*4)
  131. #define PALVERSION      0x300
  132. #define MAXPALETTE      256       /* max. # supported palette entries */
  133. /********** THE FOLLOWING ARE USED IN DLGOPEN.C  ************************/
  134. /* IDs for controls in the DlgOpen dialog */
  135. #define DLGOPEN_EDIT            101
  136. #define DLGOPEN_FILE_LISTBOX    102
  137. #define DLGOPEN_DIR_LISTBOX     103
  138. #define DLGOPEN_PATH            104
  139. #define DLGOPEN_TEXT            105
  140. #define DLGOPEN_FOLDOUT         106
  141. #define DLGOPEN_BIG             107
  142. #define DLGOPEN_SMALL           108
  143. #define DLGOPEN_OPTION          0xF000
  144. #define DLGOPEN_1BPP            0x0001
  145. #define DLGOPEN_4BPP            0x0002
  146. #define DLGOPEN_8BPP            0x0004
  147. #define DLGOPEN_24BPP           0x0008
  148. #define DLGOPEN_RLE4            0x0010
  149. #define DLGOPEN_RLE8            0x0020
  150. #define DLGOPEN_RGB             0x0040
  151. #define DLGOPEN_OPTION8         0x0080
  152. /*  flags:
  153.  *     The LOWORD is the standard FileOpen() flags (OF_*)
  154.  *     the HIWORD can be any of the following:
  155.  */
  156. #define OF_MUSTEXIST    0x00010000  /* file must exist if the user hits Ok    */
  157. #define OF_NOSHOWSPEC   0x00020000  /* DO NOT Show search spec in the edit box*/
  158. #define OF_SHOWSPEC     0x00000000  /* Show the search spec in the edit box   */
  159. #define OF_SAVE         0x00040000  /* Ok button will say "Save"              */
  160. #define OF_OPEN         0x00080000  /* Ok button will say "Open"              */
  161. #define OF_NOOPTIONS    0x00100000  /* Disable the options fold out           */
  162. /* Attributes for DlgDirLst() */
  163. #define ATTRFILELIST    0x0000        /* include files only          */
  164. #define ATTRDIRLIST     0xC010        /* directories and drives ONLY */
  165. #define CBEXTMAX        6             /* Number of bytes in "*.txt" */
  166. #define IDF(id)     ((id) & ~DLGOPEN_OPTION)  /* extracts flag from control ID */
  167. #define FID(f)      ((f)  |  DLGOPEN_OPTION)  /* extracts control ID from flag */
  168. /***************** GLOBAL VARIABLES *************************/
  169. extern CHAR           achFileName[128]; /* File pathname                       */
  170. extern DWORD          dwOffset;     /* Current position if DIB file pointer    */
  171. extern RECT           rcClip;       /* Current clip rectangle.                 */
  172. extern BOOL           fPalColors;   /* TRUE if the current DIB's color table   */
  173.                                     /* contains palette indexes not rgb values */
  174. extern BOOL           bDIBToDevice; /* Use SetDIBitsToDevice() to BLT data.    */
  175. extern BOOL           bLegitDraw;   /* We have a valid bitmap to draw          */
  176. extern WORD           wTransparent; /* Mode of DC                              */
  177. extern CHAR           szAppName[];  /* App. name                               */
  178. extern HPALETTE       hpalCurrent;  /* Handle to current palette               */
  179. extern HANDLE         hdibCurrent;  /* Handle to current memory DIB            */
  180. extern HBITMAP        hbmCurrent;   /* Handle to current memory BITMAP         */
  181. extern HANDLE         hbiCurrent;   /* Handle to current bitmap info struct    */
  182. extern DWORD          dwStyle;      /* Style bits of the App. window           */
  183. extern HINSTANCE      hInst;        /* Global instance handle                  */
  184. /***************** FUNCTION DECLARATIONS *******************/
  185. DWORD PASCAL lread(INT fh, VOID FAR *pv, DWORD ul);
  186. DWORD PASCAL lwrite(INT fh, VOID FAR *pv, DWORD ul);
  187. /***********************************************************/
  188. /* Declarations of functions used in showdib.c module      */
  189. /***********************************************************/
  190. LONG     APIENTRY WndProc  (HWND, UINT, UINT, LONG) ;
  191. BOOL               MenuCommand (HWND hWnd, UINT wParam);
  192. INT                InitDIB (HWND);
  193. VOID               FreeDib (VOID);
  194. /***********************************************************/
  195. /* Declarations of functions used in dib.c module          */
  196. /***********************************************************/
  197. HANDLE      OpenDIB (LPSTR szFile);
  198. BOOL        WriteDIB (LPSTR szFile,HANDLE hdib);
  199. WORD        PaletteSize (VOID FAR * pv);
  200. WORD        DibNumColors (VOID FAR * pv);
  201. HPALETTE    CreateDibPalette (HANDLE hdib);
  202. HPALETTE    CreateBIPalette (LPBITMAPINFOHEADER lpbi);
  203. HANDLE      DibFromBitmap (HBITMAP hbm, DWORD biStyle, WORD biBits, HPALETTE hpal);
  204. HBITMAP     BitmapFromDib (HANDLE hdib, HPALETTE hpal);
  205. BOOL        DibBlt (HDC hdc, INT x0, INT y0, INT dx, INT dy, HANDLE hdib, INT x1, INT y1, LONG rop);
  206. BOOL        StretchDibBlt (HDC hdc, INT x0, INT y0, INT dx, INT dy, HANDLE hdib, INT x1, INT y1, INT dx1, INT dy1, LONG rop);
  207. BOOL        DibInfo (HANDLE hdib,LPBITMAPINFOHEADER lpbi);
  208. HANDLE      ReadDibBitmapInfo (INT fh);
  209. BOOL        DrawBitmap (HDC hdc, INT x, INT y, HBITMAP hbm, DWORD rop);
  210. VOID            ReadBitMapFileHeaderandConvertToDwordAlign(HFILE fh, LPBITMAPFILEHEADER pbf, LPDWORD lpdwoff);
  211. VOID    WriteMapFileHeaderandConvertFromDwordAlignToPacked(HFILE fh, LPBITMAPFILEHEADER pbf);
  212. /***********************************************************/
  213. /* Declarations of functions used in drawdib. c module     */
  214. /***********************************************************/
  215. VOID               PrintDIB (HWND hWnd, HDC hDC, INT x, INT y, INT dx, INT dy);
  216. VOID               AppPaint (HWND hWnd, HDC hDC, INT x, INT y);
  217. INT                ErrMsg (PSTR sz,...);
  218. BOOL               fDialog (INT id, HWND hwnd, FARPROC fpfn);
  219. VOID               BandDIB (HWND hWnd, HDC hDC, INT x, INT y);
  220. BOOL     APIENTRY AppAbout (HWND, UINT, UINT, LONG) ;
  221. HANDLE             CopyHandle (HANDLE h);
  222. VOID               SizeWindow (HWND hWnd);
  223. VOID               GetRealClientRect (HWND hwnd, PRECT lprc);
  224. VOID               SetScrollRanges (HWND hwnd);
  225. VOID               DrawSelect (HDC hdc, BOOL fDraw);
  226. VOID        PASCAL NormalizeRect (RECT *prc);
  227. VOID               TrackMouse (HWND hwnd, MPOINT pt);
  228. HBITMAP            CopyBitmap (HBITMAP hbm);
  229. HPALETTE           CopyPalette (HPALETTE hpal);
  230. HBITMAP            CropBitmap (HBITMAP hbm, PRECT prc);
  231. HANDLE             RenderFormat (INT cf);
  232. HANDLE             RealizeDibFormat (DWORD biStyle, WORD biBits);
  233. /***********************************************************/
  234. /* Declarations of functions used in the print.c module    */
  235. /***********************************************************/
  236. BOOL    PASCAL InitPrinting (HDC hDC, HWND hWnd, HANDLE hInst, LPSTR msg);
  237. VOID    PASCAL TermPrinting (HDC hDC);
  238. HDC     PASCAL GetPrinterDC (VOID);
  239. HDC     PASCAL GetPrinterDC1 (VOID);
  240. /***********************************************************/
  241. /* Declarations of functions used in the dlgopen.c module  */
  242. /***********************************************************/
  243. LONG APIENTRY DlgfnOpen(    
  244.         HWND hwnd,
  245.     UINT msg,
  246.     UINT wParam,
  247.     LONG lParam
  248. );
  249. HFILE APIENTRY DlgOpenFile (
  250.         HWND            hwndParent,
  251.         CHAR            *szTitleIn,
  252.         DWORD           flags,
  253.         CHAR            *szExtIn,
  254.     CHAR        *szFileNameIn,
  255.     WORD                *pfOpt
  256. );
  257. /*****************************************************/
  258. /* make new sizeof structs to cover dword alignment  */
  259. /*****************************************************/
  260. #define SIZEOF_BITMAPFILEHEADER_PACKED  (   
  261.     sizeof(WORD) +      /* bfType      */   
  262.     sizeof(DWORD) +     /* bfSize      */   
  263.     sizeof(WORD) +      /* bfReserved1 */   
  264.     sizeof(WORD) +      /* bfReserved2 */   
  265.     sizeof(DWORD))      /* bfOffBits   */