home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / mlepm.zip / popup / mpopup.c next >
Text File  |  1994-05-16  |  3KB  |  92 lines

  1. /***************************************************************************\
  2. * popup.c - this is the pm part of the PopUp project
  3. *
  4. * Copyright (c) 1994 Martin Lafaix. All Rights Reserved.
  5. \***************************************************************************/
  6.  
  7. #define INCL_WIN
  8.  
  9. #include <os2.h>
  10.  
  11. /***************************************************************************/
  12. /* global variables                                                        */ 
  13. /***************************************************************************/
  14.  
  15. HAB hab;
  16. HWND hwndEPM;
  17.  
  18. /***************************************************************************/
  19. /* window proc                                                             */
  20. /***************************************************************************/
  21. MRESULT EXPENTRY wpMenu(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  22. {
  23.   switch(msg)
  24.     {
  25.     case WM_USER+1:                                      /* sent by mpopup */
  26.       {
  27.       POINTL pointl;
  28.  
  29.       WinQueryPointerPos(HWND_DESKTOP, &pointl);
  30.         
  31.       hwndEPM = HWNDFROMMP(mp1);
  32.       WinPopupMenu(HWND_DESKTOP, hwnd,
  33.                    WinLoadMenu(HWND_DESKTOP, NULLHANDLE, SHORT1FROMMP(mp2)*100),
  34.                    pointl.x, pointl.y, 0,
  35.                    PU_MOUSEBUTTON1 | PU_HCONSTRAIN | PU_VCONSTRAIN | PU_KEYBOARD);
  36.       }
  37.       break;
  38.     case WM_USER+2:                  /* autohiliting delay (half a second) */
  39.       hwndEPM = HWNDFROMMP(mp1);
  40.       WinStartTimer(hab, hwnd, 1, 500);
  41.       break;
  42.     case WM_TIMER:                    /* timer has expired, so do hiliting */
  43.       WinPostMsg(hwndEPM, WM_COMMAND, MPFROMSHORT(9299), MPVOID);
  44.       WinStopTimer(hab, hwnd, 1);
  45.       break;
  46.     case WM_COMMAND:
  47.       WinPostMsg(hwndEPM, WM_COMMAND, mp1, MPVOID);
  48.       break;
  49.     case WM_MENUSELECT:              /* update status line -- if available */
  50.       WinPostMsg(hwndEPM, WM_MENUSELECT, mp1, mp2);
  51.       return (MRESULT)TRUE;
  52.       break;
  53.     case WM_MENUEND:
  54.     default: 
  55.       return WinDefWindowProc(hwnd, msg, mp1, mp2);
  56.     }
  57.   return (MRESULT)FALSE;
  58. }
  59.  
  60. /***************************************************************************/
  61. /* main function - starts MLPOPUP server.                                  */
  62. /***************************************************************************/
  63. int main(int argc, char *argv[], char *envp[])
  64. {
  65.   HMQ hmq;
  66.   QMSG qmsg;
  67.   ULONG flCreate = FCF_TITLEBAR | FCF_TASKLIST;
  68.   HWND hwndFrame;
  69.   HWND hwnd;
  70.  
  71.   hab = WinInitialize(0);
  72.   hmq = WinCreateMsgQueue(hab, 0);
  73.  
  74.   WinRegisterClass(hab, "MLC_POPUP", (PFNWP)wpMenu, 0, 0);
  75.  
  76.   hwndFrame = WinCreateStdWindow(HWND_DESKTOP, 0,
  77.                                  &flCreate, "MLC_POPUP",
  78.                                  "MLPOPUP", 0,
  79.                                  (HMODULE)0, 1234,
  80.                                  &hwnd);
  81.  
  82.   while(WinGetMsg(hab, &qmsg, 0, 0, 0))
  83.     WinDispatchMsg(hab, &qmsg);
  84.  
  85.   WinDestroyWindow(hwndFrame);
  86.  
  87.   WinDestroyMsgQueue(hmq);
  88.   WinTerminate(hab);
  89.  
  90.   return 0;
  91. }
  92.