home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 / Programming Windows 95.iso / code / CHAP12 / NOTIFDEF.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-01  |  7.2 KB  |  201 lines

  1. /*--------------------------------------------------
  2.    NOTIFDEF.C -- Support notification detail window
  3.                  (c) Paul Yao, 1996
  4.   --------------------------------------------------*/
  5. #include <windows.h>
  6. #include <windowsx.h>
  7. #include <commctrl.h>
  8. #include <prsht.h>
  9. #include "notifdef.h"
  10.  
  11. CONTROLNOTIFICATIONS cnLookupTable[] =
  12.      {
  13.      NM_OUTOFMEMORY,       "NM_OUTOFMEMORY",
  14.      NM_CLICK,             "NM_CLICK",
  15.      NM_DBLCLK,            "NM_DBLCLK",
  16.      NM_RETURN,            "NM_RETURN",
  17.      NM_RCLICK,            "NM_RCLICK",
  18.      NM_RDBLCLK,           "NM_RDBLCLK",
  19.      NM_SETFOCUS,          "NM_SETFOCUS",
  20.      NM_KILLFOCUS,         "NM_KILLFOCUS",
  21.      LVN_ITEMCHANGING,     "LVN_ITEMCHANGING",
  22.      LVN_ITEMCHANGED,      "LVN_ITEMCHANGED",
  23.      LVN_INSERTITEM,       "LVN_INSERTITEM",
  24.      LVN_DELETEITEM,       "LVN_DELETEITEM",
  25.      LVN_DELETEALLITEMS,   "LVN_DELETEALLITEMS",
  26.      LVN_BEGINLABELEDITA,  "LVN_BEGINLABELEDITA",
  27.      LVN_BEGINLABELEDITW,  "LVN_BEGINLABELEDITW",
  28.      LVN_ENDLABELEDITA,    "LVN_ENDLABELEDITA",
  29.      LVN_ENDLABELEDITW,    "LVN_ENDLABELEDITW",
  30.      LVN_COLUMNCLICK,      "LVN_COLUMNCLICK",
  31.      LVN_BEGINDRAG,        "LVN_BEGINDRAG",
  32.      LVN_BEGINRDRAG,       "LVN_BEGINRDRAG",
  33.      LVN_GETDISPINFOA,     "LVN_GETDISPINFOA",
  34.      LVN_GETDISPINFOW,     "LVN_GETDISPINFOW",
  35.      LVN_SETDISPINFOA,     "LVN_SETDISPINFOA",
  36.      LVN_SETDISPINFOW,     "LVN_SETDISPINFOW",
  37.      LVN_KEYDOWN,          "LVN_KEYDOWN",
  38.      HDN_ITEMCHANGINGA,    "HDN_ITEMCHANGINGA",
  39.      HDN_ITEMCHANGINGW,    "HDN_ITEMCHANGINGW",
  40.      HDN_ITEMCHANGEDA,     "HDN_ITEMCHANGEDA",
  41.      HDN_ITEMCHANGEDW,     "HDN_ITEMCHANGEDW",
  42.      HDN_ITEMCLICKA,       "HDN_ITEMCLICKA",
  43.      HDN_ITEMCLICKW,       "HDN_ITEMCLICKW",
  44.      HDN_ITEMDBLCLICKA,    "HDN_ITEMDBLCLICKA",
  45.      HDN_ITEMDBLCLICKW,    "HDN_ITEMDBLCLICKW",
  46.      HDN_DIVIDERDBLCLICKA, "HDN_DIVIDERDBLCLICKA",
  47.      HDN_DIVIDERDBLCLICKW, "HDN_DIVIDERDBLCLICKW",
  48.      HDN_BEGINTRACKA,      "HDN_BEGINTRACKA",
  49.      HDN_BEGINTRACKW,      "HDN_BEGINTRACKW",
  50.      HDN_ENDTRACKA,        "HDN_ENDTRACKA",
  51.      HDN_ENDTRACKW,        "HDN_ENDTRACKW",
  52.      HDN_TRACKA,           "HDN_TRACKA",
  53.      HDN_TRACKW,           "HDN_TRACKW",
  54.      TVN_SELCHANGINGA,     "TVN_SELCHANGINGA",
  55.      TVN_SELCHANGINGW,     "TVN_SELCHANGINGW",
  56.      TVN_SELCHANGEDA,      "TVN_SELCHANGEDA",
  57.      TVN_SELCHANGEDW,      "TVN_SELCHANGEDW",
  58.      TVN_GETDISPINFOA,     "TVN_GETDISPINFOA",
  59.      TVN_GETDISPINFOW,     "TVN_GETDISPINFOW",
  60.      TVN_SETDISPINFOA,     "TVN_SETDISPINFOA",
  61.      TVN_SETDISPINFOW,     "TVN_SETDISPINFOW",
  62.      TVN_ITEMEXPANDINGA,   "TVN_ITEMEXPANDINGA",
  63.      TVN_ITEMEXPANDINGW,   "TVN_ITEMEXPANDINGW",
  64.      TVN_ITEMEXPANDEDA,    "TVN_ITEMEXPANDEDA",
  65.      TVN_ITEMEXPANDEDW,    "TVN_ITEMEXPANDEDW",
  66.      TVN_BEGINDRAGA,       "TVN_BEGINDRAGA",
  67.      TVN_BEGINDRAGW,       "TVN_BEGINDRAGW",
  68.      TVN_BEGINRDRAGA,      "TVN_BEGINRDRAGA",
  69.      TVN_BEGINRDRAGW,      "TVN_BEGINRDRAGW",
  70.      TVN_DELETEITEMA,      "TVN_DELETEITEMA",
  71.      TVN_DELETEITEMW,      "TVN_DELETEITEMW",
  72.      TVN_BEGINLABELEDITA,  "TVN_BEGINLABELEDITA",
  73.      TVN_BEGINLABELEDITW,  "TVN_BEGINLABELEDITW",
  74.      TVN_ENDLABELEDITA,    "TVN_ENDLABELEDITA",
  75.      TVN_ENDLABELEDITW,    "TVN_ENDLABELEDITW",
  76.      TVN_KEYDOWN,          "TVN_KEYDOWN",
  77.      TTN_NEEDTEXTA,        "TTN_NEEDTEXTA",
  78.      TTN_NEEDTEXTW,        "TTN_NEEDTEXTW",
  79.      TTN_SHOW,             "TTN_SHOW",
  80.      TTN_POP,              "TTN_POP",
  81.      TCN_KEYDOWN,          "TCN_KEYDOWN",
  82.      TCN_SELCHANGE,        "TCN_SELCHANGE",
  83.      TCN_SELCHANGING,      "TCN_SELCHANGING",
  84.      TBN_GETBUTTONINFOA,   "TBN_GETBUTTONINFOA",
  85.      TBN_GETBUTTONINFOW,   "TBN_GETBUTTONINFOW",
  86.      TBN_BEGINDRAG,        "TBN_BEGINDRAG",
  87.      TBN_ENDDRAG,          "TBN_ENDDRAG",
  88.      TBN_BEGINADJUST,      "TBN_BEGINADJUST",
  89.      TBN_ENDADJUST,        "TBN_ENDADJUST",
  90.      TBN_RESET,            "TBN_RESET",
  91.      TBN_QUERYINSERT,      "TBN_QUERYINSERT",
  92.      TBN_QUERYDELETE,      "TBN_QUERYDELETE",
  93.      TBN_TOOLBARCHANGE,    "TBN_TOOLBARCHANGE",
  94.      TBN_CUSTHELP,         "TBN_CUSTHELP",
  95.      UDN_DELTAPOS,         "UDN_DELTAPOS",
  96.      PSN_SETACTIVE,        "PSN_SETACTIVE",
  97.      PSN_KILLACTIVE,       "PSN_KILLACTIVE",
  98.      PSN_APPLY,            "PSN_APPLY",
  99.      PSN_RESET,            "PSN_RESET",
  100.      PSN_HELP,             "PSN_HELP",
  101.      PSN_WIZBACK,          "PSN_WIZBACK",
  102.      PSN_WIZNEXT,          "PSN_WIZNEXT",
  103.      PSN_WIZFINISH,        "PSN_WIZFINISH",
  104.      PSN_QUERYCANCEL,      "PSN_QUERYCANCEL"
  105.      } ;
  106.  
  107. int NOTIFY_COUNT = sizeof (cnLookupTable) / sizeof (CONTROLNOTIFICATIONS) ;
  108. static HWND hwndNotify = NULL ;
  109.  
  110. extern HINSTANCE hInst ;
  111.  
  112. //-------------------------------------------------------------------
  113. // QueryNotifyText: Convert notification codes into text
  114. //-------------------------------------------------------------------
  115. BOOL QueryNotifyText (UINT nNotifyCode, LPSTR *pName)
  116.      {
  117.      BOOL bFound = FALSE ;
  118.      int  iNotify ;
  119.  
  120.      for (iNotify = 0 ; iNotify < NOTIFY_COUNT ; iNotify++)
  121.           {
  122.           if (cnLookupTable[iNotify].nCode == nNotifyCode)
  123.                {
  124.                *pName = cnLookupTable[iNotify].pName ;
  125.                return TRUE ;
  126.                }
  127.           }
  128.  
  129.      // Unknown notification code
  130.      *pName = "** Unknown **" ;
  131.      return FALSE ;
  132.      }
  133.  
  134. //-------------------------------------------------------------------
  135. // ViewNotificationsToggle: Display/hide notification window
  136. //-------------------------------------------------------------------
  137. HWND ViewNotificationsToggle (HWND hwnd)
  138.      {
  139.      int x, y, cx, cy ;
  140.      RECT rWindow ;
  141.  
  142.      if (hwndNotify)
  143.           {
  144.           DestroyWindow (hwndNotify) ;
  145.           hwndNotify = NULL ;
  146.           }
  147.      else
  148.           {
  149.           GetClientRect (hwnd, &rWindow) ;
  150.           x = 0 ;
  151.           y = 0 ;
  152.           cx = rWindow.right  - rWindow.left ;
  153.           cy = rWindow.bottom - rWindow.top ;
  154.           hwndNotify = CreateWindowEx (0L,
  155.                           "LISTBOX", NULL,
  156.                           LBS_NOINTEGRALHEIGHT |
  157.                           WS_CHILD   | 
  158.                           WS_VISIBLE |
  159.                           WS_VSCROLL,
  160.                           x, y, cx, cy,
  161.                           hwnd, (HMENU) 1, hInst, NULL) ;
  162.           }
  163.  
  164.      return hwndNotify ;
  165.      }
  166.  
  167. //-------------------------------------------------------------------
  168. void DisplayText (LPSTR pText)
  169.      {
  170.      int iIndex ;
  171.  
  172.      if (hwndNotify == NULL)
  173.           return ;
  174.  
  175.      iIndex = ListBox_AddString (hwndNotify, pText) ;
  176.      ListBox_SetTopIndex (hwndNotify, iIndex) ;
  177.      }
  178.  
  179. //-------------------------------------------------------------------
  180. void DisplayNotificationDetails (WPARAM wParam, LPARAM lParam)
  181.      {
  182.      LPNMHDR pnmh ;
  183.      LPSTR   pName ;
  184.  
  185.      if (hwndNotify == NULL)
  186.           return ;
  187.  
  188.      pnmh = (LPNMHDR) lParam ;
  189.      QueryNotifyText (pnmh->code, &pName) ;
  190.      DisplayText (pName) ;
  191.      }
  192.  
  193. //-------------------------------------------------------------------
  194. void ClearNotificationList ()
  195.      {
  196.      if (hwndNotify == NULL)
  197.           return ;
  198.  
  199.      ListBox_ResetContent (hwndNotify) ;    
  200.      }
  201.