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

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. /*---------------------------------------------------------------------------*
  11. | WINDOW INFORMATION MODULE
  12. |   This module contains the routines which deal with obtaining the extra
  13. |   object information associated with a window.  For these to work, the
  14. |   window class must reserve the 0th word of the win-class object to be
  15. |   used to hold global-memory handle.
  16. *---------------------------------------------------------------------------*/
  17. #include <windows.h>
  18. #include "gdidemo.h"
  19. /*---------------------------------------------------------------------------*
  20. | ALLOC WINDOW INFO
  21. |   This routine allocates memory out of the application heap for storing
  22. |   extra memory for the window.  It is alway referenced as offset 0.
  23. *---------------------------------------------------------------------------*/
  24. BOOL FAR AllocWindowInfo(HWND hWnd, WORD wSize)
  25. {
  26.     HANDLE hsd;
  27.     if(hsd = LocalAlloc(LHND,(WORD)wSize))
  28.     {
  29.         SetWindowLong(hWnd,0,(LONG)hsd);
  30.         return(TRUE);
  31.     }
  32.     return(FALSE);
  33. }
  34. /*---------------------------------------------------------------------------*
  35. | LOCK WINDOW INFO
  36. |   This routine de-references the extra-memory associated with the window.
  37. |   it locks the object and gives the caller a pointer to the memory.
  38. *---------------------------------------------------------------------------*/
  39. PVOID FAR LockWindowInfo(HWND hWnd)
  40. {
  41.     HANDLE hMem;
  42.     PVOID  pMem;
  43.     pMem = NULL;
  44.     if(hMem = (HANDLE)GetWindowLong(hWnd,0))
  45.         pMem = (PVOID)LocalLock(hMem);
  46.     return(pMem);
  47. }
  48. /*---------------------------------------------------------------------------*
  49. | UNLOCK WINDOW INFO
  50. |   This routine unlocks the memory the caller has previously locked.
  51. *---------------------------------------------------------------------------*/
  52. BOOL FAR UnlockWindowInfo(HWND hWnd)
  53. {
  54.     HANDLE hMem;
  55.     if(hMem = (HANDLE)GetWindowLong(hWnd,0))
  56.         if(!LocalUnlock(hMem))
  57.             return(TRUE);
  58.     return(FALSE);
  59. }
  60. /*---------------------------------------------------------------------------*
  61. | FREE WINDOW INFO
  62. |   This routine frees the object memory associated with the window.
  63. *---------------------------------------------------------------------------*/
  64. BOOL FAR FreeWindowInfo(HWND hWnd)
  65. {
  66.     LOCALHANDLE hMem;
  67.     if(hMem = (HANDLE)GetWindowLong(hWnd,0))
  68.         LocalFree(hMem);
  69.     return(TRUE);
  70. }