home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / primcuts.zip / FrameWindowTricks / FrameWindowTricks.c < prev    next >
Text File  |  2000-06-24  |  5KB  |  224 lines

  1. #pragma strings(readonly)
  2.  
  3. #define INCL_WINWINDOWMGR
  4. #define INCL_WINFRAMEMGR
  5. #define INCL_WINSYS
  6.  
  7.  
  8. #ifdef DEBUG_TERM
  9. #define INCL_DOSQUEUES
  10. #define INCL_DOSSESMGR
  11. #define INCL_DOSERRORS
  12. #endif
  13. #include <os2.h>
  14.  
  15. #ifdef DEBUG_TERM
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18. #include <memory.h>
  19. static void launchDebugTerminal(void);
  20. #endif
  21.  
  22.  
  23. #include "StatusbarWindow.h"
  24. #include "ClientWindow.h"
  25.  
  26. #include "resources.h"
  27.  
  28.  
  29. /*
  30.  * Function prototypes - external functions
  31.  */
  32. BOOL _Optlink registerClientWindow(HAB hab);
  33. BOOL _Optlink registerStatusbarWindow(HAB hab);
  34.  
  35.  
  36. /*
  37.  * Function prototypes - local functions
  38.  */
  39. static HWND _Optlink createFrameWindow(HAB hab);
  40. static HWND _Optlink createClientWindow(HAB hab, HWND hwndFrame);
  41.  
  42.  
  43.  
  44. int main(void)
  45. {
  46.    int iRet = 0;
  47.    HAB hab = NULLHANDLE;
  48.    HMQ hmq = NULLHANDLE;
  49.    BOOL fSuccess = FALSE;
  50.    HWND hwndFrame = NULLHANDLE;
  51.    HWND hwndClient = NULLHANDLE;
  52.  
  53.    #ifdef DEBUG_TERM
  54.    launchDebugTerminal();
  55.    puts("i DebugTerminal ok.");
  56.    #endif
  57.  
  58.    /*
  59.     * Initialize PM
  60.     */
  61.    hab = WinInitialize(0UL);
  62.  
  63.    if(hab)
  64.    {
  65.       fSuccess = registerClientWindow(hab);
  66.       if(fSuccess)
  67.       {
  68.          fSuccess = registerStatusbarWindow(hab);
  69.       }
  70.    }
  71.  
  72.    if(fSuccess)
  73.    {
  74.       hmq = WinCreateMsgQueue(hab, 0L);
  75.    }
  76.  
  77.    if(hmq)
  78.    {
  79.       hwndFrame = createFrameWindow(hab);
  80.    }
  81.  
  82.    if(hwndFrame)
  83.    {
  84.       hwndClient = createClientWindow(hab, hwndFrame);
  85.    }
  86.  
  87.    if(hwndClient)
  88.    {
  89.       QMSG qmsg = { 0 };
  90.  
  91.       WinShowWindow(hwndFrame, TRUE);
  92.  
  93.       while(WinGetMsg(hab, &qmsg, (HWND)NULLHANDLE, 0UL, 0UL))
  94.       {
  95.          WinDispatchMsg(hab, &qmsg);
  96.       }
  97.    }
  98.  
  99.    if(hab)
  100.    {
  101.       if(hmq)
  102.       {
  103.          if(hwndFrame)
  104.          {
  105.             WinDestroyWindow(hwndFrame);
  106.          }
  107.          WinDestroyMsgQueue(hmq);
  108.       }
  109.       WinTerminate(hab);
  110.    }
  111.  
  112.    return iRet;
  113. }
  114.  
  115.  
  116. static HWND _Optlink createFrameWindow(HAB hab)
  117. {
  118.    HWND hwndFrame = NULLHANDLE;
  119.    LONG lLength = 0L;
  120.    char achTitle[256] = "";
  121.  
  122.    lLength = WinLoadString(hab, NULLHANDLE, IDS_APPTITLE, sizeof(achTitle), achTitle);
  123.    if(lLength != 0L)
  124.    {
  125.       FRAMECDATA fcd = { sizeof(fcd) };
  126.       HWND hwndTmp = NULLHANDLE;
  127.  
  128.       fcd.flCreateFlags = FCF_SYSMENU | FCF_TITLEBAR | FCF_MINMAX | FCF_TASKLIST | FCF_SIZEBORDER | FCF_ICON | FCF_SHELLPOSITION | FCF_HORZSCROLL | FCF_VERTSCROLL;
  129.       fcd.hmodResources = NULLHANDLE;
  130.       fcd.idResources = WIN_APPFRAME;
  131.       hwndTmp = WinCreateWindow(HWND_DESKTOP, WC_FRAME, achTitle, 0UL, 0L, 0L, 0L, 0L, (HWND)NULLHANDLE, HWND_TOP, fcd.idResources, &fcd, NULL);
  132.       if(hwndTmp)
  133.       {
  134.          lLength = WinLoadString(hab, NULLHANDLE, IDS_APPTITLE, sizeof(achTitle), achTitle);
  135.          if(lLength != 0L)
  136.          {
  137.             HWND hwndStatusbar = NULLHANDLE;
  138.  
  139.             lLength = WinLoadString(hab, NULLHANDLE, IDS_WELCOME_MESSAGE, sizeof(achTitle), achTitle);
  140.  
  141.             hwndStatusbar = WinCreateWindow(hwndTmp, WC_STATUSBAR, achTitle, WS_VISIBLE, 0L, 0L, 0L, 0L, hwndFrame, HWND_BOTTOM, FID_STATUSBAR, NULL, NULL);
  142.             if(hwndStatusbar)
  143.             {
  144.                char font[] = "9.WarpSans";
  145.                WinSetPresParam(hwndStatusbar, PP_FONTNAMESIZE, sizeof(font), font);
  146.                hwndFrame = hwndTmp;
  147.             }
  148.          }
  149.       }
  150.       if(hwndFrame == NULLHANDLE)
  151.       {
  152.          WinDestroyWindow(hwndTmp);
  153.       }
  154.    }
  155.    return hwndFrame;
  156. }
  157.  
  158. static HWND _Optlink createClientWindow(HAB hab, HWND hwndFrame)
  159. {
  160.    HWND hwndClient = NULLHANDLE;
  161.  
  162.    hwndClient = WinCreateWindow(hwndFrame, WC_APPCLIENTCLASS, NULL, WS_VISIBLE, 0L, 0L, 0L, 0L, hwndFrame, HWND_TOP, FID_CLIENT, NULL, NULL);
  163.  
  164.    return hwndClient;
  165. }
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173. #ifdef DEBUG_TERM
  174. static void launchDebugTerminal(void)
  175. {
  176.    APIRET rc = NO_ERROR;
  177.    HFILE pipeDebugRead = 0;
  178.    HFILE pipeDebugWrite = 0;
  179.    STARTDATA sd = { 0 };
  180.    ULONG SessID = 0;
  181.    PID pid = 0;
  182.    HFILE hfNew = 1;                      /* stdout */
  183.    char PgmTitle[30] = "";
  184.    char PgmName[100] = "";
  185.    char szCommandLine[60] = "";
  186.    char ObjBuf[200] = "";
  187.  
  188.    rc = DosCreatePipe(&pipeDebugRead, &pipeDebugWrite, 4096);
  189.    if(rc != NO_ERROR)
  190.    {
  191.       DosBeep(1000, 100);
  192.       exit(42);
  193.    }
  194.  
  195.    _ultoa(pipeDebugRead, szCommandLine, 10);
  196.  
  197.    memset(&sd, 0, sizeof(sd));
  198.  
  199.    sd.Length = sizeof(STARTDATA);
  200.    sd.Related = SSF_RELATED_CHILD;
  201.    sd.FgBg = SSF_FGBG_BACK;
  202.    sd.TraceOpt = SSF_TRACEOPT_NONE;
  203.    memcpy((char*) PgmTitle, "Debug terminal\0", 15);
  204.    sd.PgmTitle = PgmTitle;
  205.    memcpy((char*) PgmName, "PMDebugTerminal.exe\0", 20);
  206.    sd.PgmName = PgmName;
  207.    sd.PgmInputs = szCommandLine;
  208.    sd.InheritOpt = SSF_INHERTOPT_PARENT;
  209.    sd.SessionType = SSF_TYPE_PM;
  210.    sd.PgmControl = SSF_CONTROL_VISIBLE | SSF_CONTROL_SETPOS;
  211.    sd.ObjectBuffer = ObjBuf;
  212.    sd.ObjectBuffLen = sizeof(ObjBuf);
  213.  
  214.    rc = DosStartSession(&sd, &SessID, &pid);
  215.    if(rc != NO_ERROR)
  216.    {
  217.       DosBeep(1000, 100);
  218.       exit(43);
  219.    }
  220.    DosDupHandle(pipeDebugWrite, &hfNew);
  221. }
  222. #endif
  223.  
  224.