home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / odbc / admndemo / menu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-06  |  6.4 KB  |  189 lines

  1. //*---------------------------------------------------------------------------------
  2. //|  ODBC System Administrator
  3. //|
  4. //|  This code is furnished on an as-is basis as part of the ODBC SDK and is
  5. //|  intended for example purposes only.
  6. //|
  7. //|   MENU.C
  8. //|      This module will take care of enabling and disabling menus.
  9. //*---------------------------------------------------------------------------------
  10. #include <windows.h>
  11. #include "menu.h"
  12. #include "standard.h"
  13. #include "child.h"
  14. #include "admndemo.h"
  15.  
  16.  
  17.  
  18.  
  19. //*---------------------------------------------------------------------------------
  20. //|   Global variables
  21. //*---------------------------------------------------------------------------------
  22. extern lpCHILDINFO      lpActiveConn;
  23. extern lpRESULTSINFO    lpActiveResults;
  24. extern HWND             hwndCurMDIChild;
  25.  
  26.  
  27. extern dCSEG(char)   szChildClass[];
  28.  
  29.  
  30.  
  31. UWORD uMenuIDs[] = {
  32.    SQL_API_SQLTABLES,
  33.    SQL_API_SQLCOLUMNS,
  34.    SQL_API_SQLSTATISTICS,
  35.    SQL_API_SQLPRIMARYKEYS,
  36.    SQL_API_SQLFOREIGNKEYS,
  37.    SQL_API_SQLTABLEPRIVILEGES,
  38.    SQL_API_SQLCOLUMNPRIVILEGES,
  39.    SQL_API_SQLSPECIALCOLUMNS,
  40.    SQL_API_SQLPROCEDURES,
  41.    SQL_API_SQLPROCEDURECOLUMNS,
  42.    SQL_API_SQLTRANSACT,
  43.    };
  44.  
  45.  
  46.  
  47.  
  48. //*---------------------------------------------------------------------------------
  49. //| ResetMenu:
  50. //|   When user drops the menu, determine what items are to be enabled/disabled.
  51. //| Parms:
  52. //|   hMenu                Handle to the menu being displayed
  53. //|   iMenu                Index to the menu
  54. //|   iCalledFrom          Where were we called from?
  55. //|                           1     From main WndProc
  56. //|                           2     From connection window
  57. //|                           3     Test output window
  58. //| Returns:
  59. //|   Nothing.
  60. //*---------------------------------------------------------------------------------
  61. VOID INTFUN ResetMenu(HMENU hMenu, int iMenu)
  62. {
  63.    switch(GETMENUNUM(iMenu)) {
  64.      case IDM_FILE_MENU:
  65.       {
  66.          UINT        uMnuFlag;
  67.          HWND        hwnd = GetEditWindow(lpActiveConn);
  68.  
  69.          uMnuFlag = MNU_HAVE_CONNECTS;
  70.  
  71.          // Is there an active connection
  72.          EnableMenuItem(hMenu, IDM_DISCONNECT, uMnuFlag);
  73.          EnableMenuItem(hMenu, IDM_EXECUTE_FILE, uMnuFlag);
  74.          EnableMenuItem(hMenu, IDM_OPEN,
  75.                         (uMnuFlag == MF_ENABLED && !lpActiveResults) ?
  76.                         MF_ENABLED : MF_GRAYED);
  77.          EnableMenuItem(hMenu, IDM_CLOSE,
  78.                         (lpActiveConn && lpActiveConn->hFile && !lpActiveResults) ?
  79.                         MF_ENABLED : MF_GRAYED);
  80.          EnableMenuItem(hMenu, IDM_SAVE,
  81.                         (lpActiveConn && lpActiveConn->hFile && !lpActiveResults) ?
  82.                         MF_ENABLED : MF_GRAYED);
  83.          EnableMenuItem(hMenu, IDM_SAVEAS,
  84.                         (lpActiveConn &&
  85.                          SendMessage(lpActiveConn->hwndIn, WM_GETTEXTLENGTH, 0, 0L) &&
  86.                          !lpActiveResults) ?
  87.                         MF_ENABLED : MF_GRAYED);
  88.       }
  89.       break;
  90.  
  91.      case IDM_EDIT_MENU:
  92.       {
  93.          HWND     hwnd = GetEditWindow(lpActiveConn);
  94.          DWORD    sel=0;
  95.  
  96.          if(hwnd)
  97.             sel = SendMessage(hwnd, EM_GETSEL, 0, 0L);
  98.  
  99.          EnableMenuItem(hMenu, IDM_UNDO,
  100.                         (lpActiveConn && hwnd &&
  101.                          SendMessage(hwnd, EM_CANUNDO, 0, 0L)) ? MF_ENABLED : MF_GRAYED);
  102.          EnableMenuItem(hMenu, IDM_CUT,
  103.                         (lpActiveConn && hwnd &&
  104.                          HIWORD(sel) != LOWORD(sel)) ? MF_ENABLED : MF_GRAYED);
  105.          EnableMenuItem(hMenu, IDM_COPY,
  106.                         (lpActiveConn && hwnd &&
  107.                          HIWORD(sel) != LOWORD(sel)) ? MF_ENABLED : MF_GRAYED);
  108.          EnableMenuItem(hMenu, IDM_PASTE,
  109.                         (lpActiveConn && hwnd &&
  110.                          IsClipboardFormatAvailable(CF_TEXT)) ? MF_ENABLED : MF_GRAYED);
  111.          EnableMenuItem(hMenu, IDM_SELECT_ALL,
  112.                         (lpActiveConn && hwnd &&
  113.                          SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0L)) ? MF_ENABLED : MF_GRAYED);
  114.       }
  115.       break;
  116.  
  117.      case IDM_EXECUTE_MENU:
  118.       {
  119.          HWND     hwnd = GetEditWindow(lpActiveConn);
  120.          DWORD    sel=0;
  121.          UINT     utmp;
  122.  
  123.          if(hwnd)
  124.             sel = SendMessage(hwnd, EM_GETSEL, 0, 0L);
  125.  
  126.          EnableMenuItem(hMenu, IDM_EXECUTE_NOW,
  127.                         (lpActiveConn && hwnd &&
  128.                          hwnd == lpActiveConn->hwndIn &&
  129.                          SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0L)) ? MF_ENABLED : MF_GRAYED);
  130.  
  131.  
  132.          // Need to support commit and rollback to call them
  133.          utmp = (lpActiveConn && BitGet(lpActiveConn->fFunctions, MENU_SQLTRANSACT)) ?
  134.             MF_ENABLED : MF_GRAYED;
  135.          EnableMenuItem(hMenu, IDM_COMMIT, utmp);
  136.          EnableMenuItem(hMenu, IDM_ROLLBACK, utmp);
  137.       }
  138.       break;
  139.  
  140.      case IDM_PIPE_MENU:
  141.       {
  142.          // Just look for active connection
  143.          UINT utmp = MNU_HAVE_CONNECTS;
  144.  
  145.          // Just look for active connections and results
  146.          EnableMenuItem(hMenu, IDM_PIPE_EDIT, utmp);
  147.          EnableMenuItem(hMenu, IDM_PIPE_DO,
  148.                         (lpActiveResults) ? MF_ENABLED : MF_GRAYED);
  149.       }
  150.       break;
  151.  
  152.      case IDM_INFO_MENU:
  153.       {
  154.          // Just look for active connection
  155.          UINT utmp = MNU_HAVE_CONNECTS;
  156.  
  157.          EnableMenuItem(hMenu, IDM_DATA_SOURCES, utmp);
  158.          EnableMenuItem(hMenu, IDM_DATA_TYPES, utmp);
  159.          EnableMenuItem(hMenu, IDM_FUNCTIONS, utmp);
  160.          EnableMenuItem(hMenu, IDM_ODBC_INFO, utmp);
  161.       }
  162.       break;
  163.  
  164.      case IDM_LIST_MENU:
  165.       {
  166.          int   idex;
  167.  
  168.          for(idex=0;  idex<NUM_MENU_FLAGS;  idex++)
  169.             EnableMenuItem(hMenu, (IDM_TABLES + idex),
  170.                            (lpActiveConn &&
  171.                             BitGet(lpActiveConn->fFunctions, idex)) ?
  172.                            MF_ENABLED : MF_GRAYED);
  173.       }
  174.       break;
  175.  
  176.      case IDM_WINDOW_MENU:
  177.       {
  178.          // Just look for active connection
  179.          UINT utmp = MNU_HAVE_CONNECTS;
  180.  
  181.          EnableMenuItem(hMenu, IDM_CASCADE, utmp);
  182.          EnableMenuItem(hMenu, IDM_TILE, utmp);
  183.          EnableMenuItem(hMenu, IDM_ARRANGE, utmp);
  184.          EnableMenuItem(hMenu, IDM_CLOSEALL, utmp);
  185.       }
  186.       break;
  187.    }
  188. }
  189.