home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_03_02 / 3n02042a < prev    next >
Text File  |  1991-12-16  |  3KB  |  108 lines

  1.  
  2.  
  3. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-Begin Listing 1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4. /*****************************************************/
  5. /* combo.c                                           */
  6. /* -- DLL to patch ListBox of ComboBox.              */
  7. /*****************************************************/
  8.  
  9. #define NOCOMM
  10. #include <windows.h>
  11. #include "combo.h"
  12.  
  13. FARPROC lpfnCombo;
  14. HANDLE  hmemUser;
  15.  
  16. typedef struct
  17.     {
  18.     WORD    rgw[31];
  19.     HWND *  phwnd;
  20.     } LBW;  /* List Box Window handle. */
  21.  
  22. #define szComboListClass    "ComboLBox"
  23.  
  24. LONG    FAR PASCAL  ComboFilter(WORD, WORD, WORD,
  25.                       DWORD);
  26. int     FAR PASCAL  LibMain(HANDLE, WORD, WORD, LPSTR);
  27. int     FAR PASCAL  WEP(short);
  28.  
  29. int FAR PASCAL
  30. LibMain(HANDLE hins, WORD ds, WORD cbHeap, LPSTR lsz)
  31. /*****************************************************/
  32. /* -- hins      : This library's instance.           */
  33. /* -- ds        : The library's default data segment */
  34. /* -- cbHeap    : Size of out local heap.            */
  35. /* -- lsz       : Command line invoked with.         */
  36. /*****************************************************/
  37.     {
  38.     WORD        wVersion    = GetVersion();
  39.     WNDCLASS    wcs;
  40.  
  41.     /* Only need patch for version 3.0. */
  42.     if (LOBYTE(wVersion) != 3 || HIBYTE(wVersion) != 0)
  43.         return FALSE;
  44.  
  45.     /* Get USER's default data segment. */
  46.     if ((hmemUser = LoadLibrary("user.exe")) == 0)
  47.         return FALSE;
  48.  
  49.     /* Superclass the ComboBox ListBox class. */
  50.     GetClassInfo(NULL, szComboListClass, &wcs);
  51.     lpfnCombo = (FARPROC)wcs.lpfnWndProc;
  52.     UnregisterClass(szComboListClass, NULL);
  53.     wcs.lpfnWndProc = ComboFilter;
  54.     RegisterClass(&wcs);
  55.  
  56.     return TRUE;
  57.     }
  58.  
  59. int FAR PASCAL
  60. WEP(short wCode)
  61. /*****************************************************/
  62. /* -- The usual do-nothing stub.                     */
  63. /*****************************************************/
  64.     {
  65.     return FALSE;
  66.     }
  67.  
  68. LONG FAR PASCAL
  69. ComboFilter(WORD hwnd, WORD wm, WORD wmp, DWORD lwmp)
  70. /*****************************************************/
  71. /* -- Superclasser for ComboBox ListBoxes.           */
  72. /* -- hwnd      : Main window.                       */
  73. /* -- wm        : Message type.                      */
  74. /* -- wmp, lwmp : Message parameters.                */
  75. /*****************************************************/
  76.     {
  77.     if (wm == WM_SHOWWINDOW && wmp == 0)
  78.         {
  79.         WORD    dsUser  = HIWORD(GlobalLock(hmemUser));
  80.         WORD    dsLocal;
  81.         HWND    hwndCombo;
  82.         HWND    hwndParent;
  83.  
  84.         _asm    mov dsLocal, ds;    /* Save ds. */
  85.         _asm    mov ds, dsUser;     /* Get USER ds. */
  86.  
  87.         /* Get main combo window. so we can extract */
  88.         /* the control id used to notify our owner. */
  89.         hwndCombo = *((LBW *)hwnd)->phwnd;
  90.  
  91.         _asm    mov ds, dsLocal;    /* Restore ds. */
  92.  
  93.         /* In case of REAL mode. */
  94.         GlobalUnlock(hmemUser);
  95.         hwndParent =
  96.           GetWindowWord(hwndCombo, GWW_HWNDPARENT);
  97.         if (hwndCombo != NULL &&
  98.           IsWindowVisible(hwndParent))
  99.             SendMessage(hwndParent, WM_COMMAND,
  100.               GetWindowWord(hwndCombo, GWW_ID),
  101.               MAKELONG(hwndCombo, CBN_COLLAPSE));
  102.         }
  103.     return CallWindowProc(lpfnCombo, hwnd, wm, wmp,
  104.         lwmp);
  105.     }
  106. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-End   Listing 1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  107.  
  108.