home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 December (DVD) / VPR0112A.ISO / OLS / TCL230JA95 / tcl230ja95.lzh / source.lzh / exe / menu.c < prev    next >
C/C++ Source or Header  |  2001-02-10  |  3KB  |  127 lines

  1. /*-------------------------------------------------------------
  2.   menu.c
  3.   pop-up menu on right button click
  4.   KAZUBON 1997-2001
  5. ---------------------------------------------------------------*/
  6.  
  7. #include "tclock.h"
  8.  
  9. HMENU g_hMenu = NULL;
  10. static HMENU hPopupMenu = NULL;
  11. void UpdateTimerMenu(HMENU hMenu);
  12.  
  13. /*------------------------------------------------
  14.    when the clock is right-clicked
  15.    show pop-up menu
  16. --------------------------------------------------*/
  17. void OnContextMenu(HWND hwnd, HWND hwndClicked, int xPos, int yPos)
  18. {
  19.     char s[80];
  20.     
  21.     if(!g_hMenu)
  22.     {
  23.         g_hMenu = LoadMenu(GetLangModule(), MAKEINTRESOURCE(IDR_MENU));
  24.         hPopupMenu = GetSubMenu(g_hMenu, 0);
  25.         
  26.         SetMenuDefaultItem(hPopupMenu, 408, FALSE);
  27.         
  28.         if(GetVersion() & 0x80000000) // !NT
  29.         {
  30.             DeleteMenu(hPopupMenu, 7, MF_BYPOSITION);
  31.             DeleteMenu(hPopupMenu, 7, MF_BYPOSITION);
  32.         }
  33.     }
  34.     
  35.     UpdateTimerMenu(hPopupMenu);
  36.     
  37.     GetMyRegStr("SNTP", "Server", s, 80, "");
  38.     EnableMenuItem(hPopupMenu, IDC_SYNCTIME, MF_BYCOMMAND|
  39.         (s[0]?MF_ENABLED:MF_GRAYED) );
  40.     
  41.     SetForegroundWindow98(hwnd);
  42.     TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
  43.         xPos, yPos, 0, hwnd, NULL);
  44. }
  45.  
  46. /*------------------------------------------------
  47.     command message
  48. --------------------------------------------------*/
  49. void OnTClockCommand(HWND hwnd, WORD wID, WORD wCode)
  50. {
  51.     switch(wID)
  52.     {
  53.         case IDC_SHOWPROP: // Show property
  54.             MyPropertySheet();
  55.             return;
  56.         case IDC_SHOWHELP: // Help
  57.             MyHelp(hwnd, 0);
  58.             return;
  59.         case IDC_EXIT: // Exit
  60.             PostMessage(g_hwndClock, WM_COMMAND, 102, 0);
  61.             return;
  62.         case IDC_TIMER: // Timer
  63.             DialogTimer(hwnd);
  64.             return;
  65.         case IDC_SYNCTIME: // Syncronize time
  66.             StartSyncTime(hwnd, NULL, 0);
  67.             return;
  68.         case IDC_DATETIME:
  69.         case IDC_CASCADE:
  70.         case IDC_TILEHORZ:
  71.         case IDC_TILEVERT:
  72.         case IDC_MINALL:
  73.         case IDC_TASKMAN:
  74.         case IDC_TASKBARPROP:
  75.         {
  76.             HWND hwndTray;
  77.             hwndTray = FindWindow("Shell_TrayWnd", NULL);
  78.             if(hwndTray)
  79.                 PostMessage(hwndTray, WM_COMMAND, (WPARAM)wID, 0);
  80.             return;
  81.         }
  82.     }
  83.     
  84.     if((IDC_STOPTIMER <= wID && wID < IDC_STOPTIMER + MAX_TIMER))
  85.     {
  86.         // stop timer
  87.         StopTimer(hwnd, wID - IDC_STOPTIMER);
  88.     }
  89.     return;
  90. }
  91.  
  92. /*------------------------------------------------
  93.     update menu items to stop timers
  94. --------------------------------------------------*/
  95. void UpdateTimerMenu(HMENU hMenu)
  96. {
  97.     int i, j, len;
  98.     UINT id;
  99.     char s[80];
  100.     
  101.     len = GetMenuItemCount(hMenu);
  102.     for(i = 0; i < len; i++)
  103.     {
  104.         id = GetMenuItemID(hMenu, i);
  105.         if(IDC_STOPTIMER <= id && id < IDC_STOPTIMER + MAX_TIMER)
  106.         {
  107.             DeleteMenu(hMenu, id, MF_BYCOMMAND);
  108.             len = GetMenuItemCount(hMenu);
  109.             i--;
  110.         }
  111.     }
  112.     
  113.     for(i = 0; i < len; i++)
  114.     {
  115.         id = GetMenuItemID(hMenu, i);
  116.         if(id == IDC_TIMER) break;
  117.     }
  118.     if(i < len) i++;
  119.     
  120.     for(j = 0; ; i++, j++)
  121.     {
  122.         if(GetTimerInfo(s, j) == 0) break;
  123.         InsertMenu(hMenu, i, MF_BYPOSITION|MF_STRING,
  124.             IDC_STOPTIMER + j, s);
  125.     }
  126. }
  127.