home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / ACDCR032.ZIP / source / audiooverriddenwpmethods.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-08-07  |  17.9 KB  |  539 lines

  1. #include "audiofolder.hh"
  2. #include "audiofolderhelp.h"
  3.  
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6.  
  7. BOOL setupDone=FALSE;
  8. BOOL GrabberSetupDone=FALSE;
  9. BOOL bGrabberFirst=FALSE;
  10.  
  11. int iNumCD;
  12. char cFirstCD;
  13. char chosenCD[3];
  14. char chosenWriter[3];// Drive letter of CD-writer
  15.  
  16. char chrGrabberPath[CCHMAXPATH];
  17. char chrGrabberOptions[CCHMAXPATH];
  18. int bTrackNumbers;
  19.  
  20. char chrCDRecord[CCHMAXPATH]={0};/* Path to cdrecord */
  21. char chrCDROptions[CCHMAXPATH]={0};
  22. LONG  lCDROptions=0;
  23. char chrInstallDir[CCHMAXPATH]={0};
  24.  
  25. ATOM atomUpdateStatusbar;
  26. ATOM atomStartGrab;
  27. ATOM atomStartWrite;
  28.  
  29. HMODULE queryModuleHandle(void);
  30. void _Optlink toolsThreadFunc (void *arg);
  31. void sendConfig();
  32. MRESULT EXPENTRY selectDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  33. MRESULT EXPENTRY statusLineDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  34. MRESULT EXPENTRY dialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  35. MRESULT EXPENTRY grabDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  36.  
  37. BOOL CWAudioFolder::wpSetupOnce(PSZ pSetupString)
  38. {
  39.   /**************************************************
  40.    *                                                *
  41.    * Supported setupstrings:                        *
  42.    *       FLDRWRITEFLAGS=1+2+4+8                   *
  43.    *                                                *
  44.    **************************************************/
  45.   BOOL rcParent;
  46.   char buffer[CCHMAXPATH];
  47.   ULONG bufferSize;
  48.  
  49.   rcParent=((somTD_WPObject_wpSetupOnce)
  50.             somParentNumResolve(__ClassObject->somGetPClsMtabs(),
  51.                                 1,
  52.                                 __ClassObject->
  53.                                 somGetMethodToken(somIdFromString
  54.                                                   ("wpSetupOnce")))                  
  55.             )(this,pSetupString);
  56.   /* Doing our own setup here */
  57.   bufferSize=sizeof(buffer);
  58.   if(!wpScanSetupString(pSetupString,"ICONVIEW",buffer,&bufferSize))
  59.     wpSetup( "ICONVIEW=NONFLOWED,MINI");/* Fill in defaults */
  60.   bufferSize=sizeof(buffer);
  61.   if(!wpScanSetupString(pSetupString,"ICONVIEWPOS",buffer,&bufferSize))
  62.     wpSetup( "ICONVIEWPOS=20,15,50,60");/* Fill in defaults */
  63.   bufferSize=sizeof(buffer);
  64.   if(!wpScanSetupString(pSetupString,"FLDRWRITEFLAGS",buffer,&bufferSize))
  65.     ulWriteFlags=IDWF_PAD|IDWF_NOFIX|IDWF_DUMMY; /* No key, set defaults */
  66.   else
  67.     wpSetup(pSetupString);
  68.   return rcParent;
  69. }
  70.  
  71. BOOL CWAudioFolder::wpSetup(PSZ pSetupString)
  72. {
  73.   /**************************************************
  74.    *                                                *
  75.    * Supported setupstrings:                        *
  76.    *       FLDRWRITEFLAGS=1+2+4+8                   *
  77.    *                                                *
  78.    **************************************************/
  79.   char buffer[CCHMAXPATH];
  80.   ULONG bufferSize;
  81.   ULONG ulWFlags;
  82.  
  83.   bufferSize=sizeof(buffer);
  84.   if(wpScanSetupString(pSetupString,"FLDRWRITEFLAGS",buffer,&bufferSize))
  85.     { 
  86.       ulWFlags=atol(buffer);
  87.       cwSetWriteFlags( ulWFlags,WF_ALLFLAGS);
  88.       /*      ulWriteFlags=0;
  89.               if(ulWFlags & IDWF_PAD)ulWriteFlags|=IDWF_PAD;
  90.               if(ulWFlags & IDWF_NOFIX)ulWriteFlags|=IDWF_NOFIX;
  91.               if(ulWFlags & IDWF_PREEMP)ulWriteFlags|=IDWF_PREEMP;
  92.               if(ulWFlags & IDWF_DUMMY)ulWriteFlags|=IDWF_DUMMY;*/
  93.     }
  94.   return CWProgFolder::wpSetup(pSetupString);
  95. }
  96.  
  97. void CWAudioFolder::wpCopiedFromTemplate()
  98. {
  99.   wpSetup("ICONVIEW=NONFLOWED,MINI;ICONVIEWPOS=20,15,50,60");
  100.   if(!setupDone)
  101.     cwLoadIniValues();
  102.   CWProgFolder:: wpCopiedFromTemplate();
  103. }
  104.  
  105.  
  106. /*************************************************/
  107. /* Remove the general-page for the animated icon */
  108. /*************************************************/
  109. ULONG CWAudioFolder::wpAddObjectGeneralPage2(HWND hwndNotebook)
  110. {
  111.   return SETTINGS_PAGE_REMOVED;
  112. }
  113.  
  114. /************************************************/
  115. /* Override function: Remove the tree view page */
  116. /************************************************/
  117. ULONG CWAudioFolder::wpAddFolderView2Page(HWND hwndNotebook)
  118. {
  119.   return SETTINGS_PAGE_REMOVED;
  120. }
  121.  
  122.  
  123. BOOL CWAudioFolder::wpAddSettingsPages(HWND hwndNotebook)
  124. {
  125.   BOOL rc;
  126.  
  127.   /* Call the parent so it can insert its settings pages */
  128.   rc=((somTD_WPObject_wpAddSettingsPages)
  129.       somParentNumResolve(__ClassObject->somGetPClsMtabs(),
  130.                           1,
  131.                           __ClassObject->
  132.                           somGetMethodToken(somIdFromString
  133.                                             ("wpAddSettingsPages")))
  134.       )(this,hwndNotebook);
  135.   if(bGrabberFirst)
  136.     rc && AddCdrecordOptionPage(hwndNotebook)
  137.       && AddGrabOptionPage(hwndNotebook);
  138.   else
  139.     rc && AddGrabOptionPage(hwndNotebook)
  140.       && AddCdrecordOptionPage(hwndNotebook);
  141.     
  142.   return rc;
  143.   // Durch obige Konstruktion wird die Elternmethode des direkten Vorgängers aufgerufen,
  144.   // und nicht die ursprüngliche von WPLaunchPad, falls WPLaunchPad replaced wurde.
  145.   // Durch diesen Aufruf gehen eventuelle Erweiterungen durch Vererbung verloren:
  146.   //            < return WPLaunchPad::wpMenuItemSelected(hwndFrame, ulMenuId); >
  147.   // Dieser Aufruf macht Ergänzungen in wpobject.hh erforderlich!!! Wird durch ein VAC-Fixpack vielleicht später
  148.   //erledigt    
  149. }
  150.  
  151. /************************************************/
  152. /* Override function: Remove the tree view open */
  153. /*                    item from the menu.       */
  154. /************************************************/
  155. ULONG CWAudioFolder::wpFilterPopupMenu(ULONG ulFlags, HWND hwndCnr, BOOL fMultiSelect)
  156. {
  157.   return CWProgFolder::wpFilterPopupMenu( ulFlags, hwndCnr, fMultiSelect) & ~CTXT_TREE;
  158. }
  159.  
  160. /************************************************/
  161. /* Override function:                           */
  162. /************************************************/
  163. BOOL CWAudioFolder::wpModifyPopupMenu(HWND hwndMenu, HWND hwndCnr, ULONG ulPosition)
  164. {
  165.   /* Remove the change to tree view item from menu */ 
  166.   /* This does not remove it from the menubar :( */
  167.   WinSendMsg(hwndMenu,MM_REMOVEITEM,MPFROM2SHORT(717,TRUE),0);
  168.   wpInsertPopupMenuItems(hwndMenu,1,queryModuleHandle(),ID_MENUTOOLS,0);
  169.   wpInsertPopupMenuItems(hwndMenu,-1,queryModuleHandle(),ID_MENUABOUT,WPMENUID_HELP);
  170.   return CWProgFolder::wpModifyPopupMenu(hwndMenu, hwndCnr,  ulPosition); 
  171. }
  172.  
  173. BOOL CWAudioFolder::wpMenuItemSelected(HWND hwndFrame,ULONG ulMenuId)
  174. {
  175.   int tid;
  176.  
  177.   /* char text[200];
  178.      sprintf(text,"Menu-Id: %d",ulMenuId);
  179.      WinMessageBox( HWND_DESKTOP, HWND_DESKTOP, text, "wpMenuItemSelected()",
  180.      0UL, MB_OK | MB_ICONEXCLAMATION );
  181.      */ 
  182.   switch(ulMenuId)
  183.     {
  184.     case 717://Change to tree view
  185.       DosBeep(100,100);
  186.       return TRUE;
  187.     case ID_TOOLSITEM:
  188.       // DosBeep(1000,1000);
  189.       tid=_beginthread(toolsThreadFunc,NULL,8192*2,this); //Fehlerbehandlung fehlt
  190.       return TRUE;
  191.     case ID_ABOUTITEM:
  192.       cwShowAboutDlg(queryModuleHandle(),IDDLG_ABOUT);
  193.       return TRUE;
  194.     default:
  195.       break;
  196.     }
  197.  
  198.   return CWProgFolder::wpMenuItemSelected( hwndFrame, ulMenuId);
  199. }
  200.  
  201.  
  202. BOOL CWAudioFolder::wpMenuItemHelpSelected(ULONG MenuId)
  203. {
  204.   switch(MenuId) {
  205.   case ID_TOOLSITEM:
  206.     return wpDisplayHelp(ID_TOOLSITEM,AFHELPLIBRARY);       
  207.   case ID_ABOUTITEM:
  208.     return FALSE;
  209.   default:
  210.     break;
  211.   }
  212.   return CWProgFolder::wpMenuItemHelpSelected(MenuId);
  213. }
  214.  
  215.  
  216. BOOL CWAudioFolder::wpRestoreState(ULONG ulReserved)
  217. {
  218.   ULONG keyLength;
  219.   char profileName[CCHMAXPATH];
  220.   char moduleName[CCHMAXPATH];
  221.   char *chrPtr;
  222.   HINI hini=0;
  223.   char    text[200];
  224.   ULONG ulSize;
  225.   int a;
  226.   char chrCD[4];
  227.   HOBJECT hObject;
  228.     
  229.   bShowGrab=FALSE;
  230.  
  231.   /*  cwLoadIniValues();
  232.       return CWProgFolder::wpRestoreState(ulReserved);  
  233.       */
  234.     
  235.   /* Query the number of CD-drives */
  236.   cwQueryCDDrives(&iNumCD,&cFirstCD);
  237.   
  238.   /* Restore write flags */
  239.   if(!wpRestoreLong("CWAudioFolder",IDKEY_FDRWRITEFLAGS,&ulWriteFlags))
  240.     ulWriteFlags=IDWF_PAD|IDWF_NOFIX|IDWF_DUMMY;
  241.   
  242.   /* Get folder of class-dll. */
  243.   DosQueryModuleName(queryModuleHandle(),sizeof(moduleName),moduleName);
  244.   chrPtr=strrchr(moduleName,'\\');
  245.   if(chrPtr)
  246.     *chrPtr=0;
  247.   /* Save install dir */
  248.   sprintf(chrInstallDir,"%s",moduleName);
  249.   /* Build full path for cdrecord.ini file */
  250.   sprintf(profileName,"%s\\cdrecord.ini",moduleName);       
  251.   /* Open ini-file */
  252.   hini=PrfOpenProfile(WinQueryAnchorBlock(HWND_DESKTOP),profileName);
  253.   do{
  254.     if(!hini) {
  255.       WinMessageBox(  HWND_DESKTOP,
  256.                       HWND_DESKTOP,
  257.                       "Warning! Cannot open Ini-file!",
  258.                       "Audio-CD-Creator",
  259.                       0UL,
  260.                       MB_OK | MB_ICONEXCLAMATION );
  261.       break;
  262.     }/* end of if(!hini) */
  263.     
  264.     keyLength=PrfQueryProfileString(hini,"CDWriter","cdrecord","",chrCDRecord,sizeof(chrCDRecord));
  265.     if(keyLength==1){
  266.       break;/* First opening. We havn't got entries yet */
  267.     }
  268.     PrfQueryProfileString(hini,"CDWriter","cdroptions","",chrCDROptions,sizeof(chrCDROptions));
  269.     ulSize=sizeof(lCDROptions);
  270.     PrfQueryProfileData(hini,"CDWriter","options",&lCDROptions,&ulSize);
  271.     PrfQueryProfileString(hini,"CDWriter","writedrive","",chosenWriter,sizeof(chosenWriter));
  272.  
  273.     setupDone=TRUE;
  274.     sendConfig();
  275.  
  276.     keyLength=PrfQueryProfileString(hini,"CDGrabber","grabber","",chrGrabberPath,sizeof(chrGrabberPath));
  277.     if(keyLength==1){
  278.       break;/* We havn't got entries yet */
  279.     }
  280.     PrfQueryProfileString(hini,"CDGrabber","graboptions","",chrGrabberOptions,sizeof(chrGrabberOptions));
  281.     PrfQueryProfileString(hini,"CDGrabber","grabdrive","",chosenCD,sizeof(chosenCD));
  282.     bTrackNumbers=PrfQueryProfileInt(hini,"CDGrabber","tracknumbers",1);
  283.     GrabberSetupDone=TRUE;
  284.  
  285.     break;
  286.   } while(TRUE);
  287.   if(hini)PrfCloseProfile(hini);
  288.   return CWProgFolder::wpRestoreState(ulReserved);
  289. }
  290.  
  291. BOOL CWAudioFolder::wpSaveState()
  292. {
  293.   char profileName[CCHMAXPATH];
  294.   char moduleName[CCHMAXPATH];
  295.   char *chrPtr;
  296.   HINI hini=0;
  297.  
  298.   /* This saves the instance write flags */
  299.   if(!wpSaveLong("CWAudioFolder",IDKEY_FDRWRITEFLAGS,ulWriteFlags))
  300.     WinMessageBox(  HWND_DESKTOP,
  301.                     HWND_DESKTOP,
  302.                     "Warning! Cannot write instance data!",
  303.                     "Audio-CD-Creator",
  304.                     0UL,
  305.                     MB_OK | MB_ICONEXCLAMATION );
  306.  
  307.   /* Build the ini-file name */
  308.   /* Get folder of class-dll. */
  309.   DosQueryModuleName(queryModuleHandle(),sizeof(moduleName),moduleName);
  310.   chrPtr=strrchr(moduleName,'\\');
  311.   if(chrPtr)
  312.     *chrPtr=0;
  313.   /* Build full path */
  314.   sprintf(profileName,"%s\\cdrecord.ini",moduleName);       
  315.  
  316.   /* Global settings are saved in an ini-file */
  317.   do{  
  318.     /* Open the ini-file */
  319.     hini=PrfOpenProfile(WinQueryAnchorBlock(HWND_DESKTOP),profileName);
  320.     if(!hini) {
  321.       WinMessageBox(  HWND_DESKTOP,
  322.                       HWND_DESKTOP,
  323.                       "Warning! Cannot open Ini-file!",
  324.                       "Audio-CD-Creator",
  325.                       0UL,
  326.                       MB_OK | MB_ICONEXCLAMATION );
  327.       return CWProgFolder::wpSaveState();
  328.     }/* end of if(!hini) */
  329.     /* Save cdrecord-path */
  330.     if(!PrfWriteProfileString(hini,"CDWriter","cdrecord",chrCDRecord)) 
  331.       break;    
  332.     /* Save cdrecord options */
  333.     if(!PrfWriteProfileString(hini,"CDWriter","cdroptions",chrCDROptions))    
  334.       break;
  335.  
  336.     if(!PrfWriteProfileString(hini,"CDWriter","writedrive",chosenWriter))
  337.       break;
  338.     
  339.     if(!PrfWriteProfileString(hini,"CDGrabber","grabber",chrGrabberPath))    
  340.       break;
  341.     
  342.     if(!PrfWriteProfileString(hini,"CDGrabber","graboptions",chrGrabberOptions))
  343.       break;
  344.     
  345.     if(!PrfWriteProfileString(hini,"CDGrabber","grabdrive",chosenCD))
  346.       break;
  347.    
  348.     if(!PrfWriteProfileData(hini,"CDGrabber","tracknumbers",&bTrackNumbers,sizeof(bTrackNumbers)))
  349.       break;
  350.     if(!PrfWriteProfileData(hini,"CDWriter","options",&lCDROptions,sizeof(lCDROptions))) {
  351.       break;
  352.     };
  353.     PrfCloseProfile(hini);
  354.     return CWProgFolder::wpSaveState();
  355.   }while(TRUE);
  356.   WinMessageBox(  HWND_DESKTOP,
  357.                   HWND_DESKTOP,
  358.                   "Warning! Cannot write to Ini-file!",
  359.                   "Audio-CD-Creator",
  360.                   0UL,
  361.                   MB_OK | MB_ICONEXCLAMATION );
  362.   if(hini)PrfCloseProfile(hini);
  363.   
  364.   return CWProgFolder::wpSaveState();
  365. }
  366.  
  367.  
  368. MRESULT CWAudioFolder::wpDrop(HWND hwndCnr,PDRAGINFO pDragInfo,PDRAGITEM pDragItem)
  369. {
  370.   MRESULT mr;
  371.  
  372.   mr=CWProgFolder::wpDrop(hwndCnr, pDragInfo, pDragItem);
  373.   cwForceStatusUpdate()   ;       
  374.   return mr;
  375. }
  376.  
  377.  
  378. BOOL  CWAudioFolder::wpDeleteFromContent(WPObject* Object)
  379. {
  380.   BOOL rc;    
  381.     
  382.   rc=CWProgFolder::wpDeleteFromContent(Object);
  383.   cwForceStatusUpdate()   ;
  384.   return rc;
  385. }
  386.  
  387. BOOL CWAudioFolder::wpAddToContent(WPObject* Object)
  388. {
  389.   BOOL rc;
  390.  
  391.   rc=CWProgFolder::wpAddToContent(Object);
  392.   cwForceStatusUpdate()   ;
  393.   return rc;
  394. }
  395.  
  396. BOOL CWAudioFolder::wpPopulate(ULONG ulReserved,PSZ Folder,BOOL fFoldersOnly)
  397. {
  398.   BOOL rc;
  399.  
  400.   rc=CWProgFolder::wpPopulate(ulReserved,Folder,fFoldersOnly);
  401.   /*
  402.     if(!(fFlags&FOI_POPULATEDWITHALL || fFlags&FOI_POPULATEDWITHFOLDERS)||ulTrackSize<44100*4) {
  403.     ulTrackSize=cwFillTrackList(WinQueryWindow(hwndStatusFrameCtl,QW_PARENT), NULL);
  404.     }*/
  405.   /* Set total time into status line */
  406.   cwForceStatusUpdate();
  407.   return rc;  
  408. }
  409.  
  410. void CWAudioFolder::wpInitData()
  411. {   
  412.   HATOMTBL hatSystem;
  413.     
  414.   CWProgFolder::wpInitData();
  415.     
  416.   /* Get unique window messages for our internal communication */
  417.   hatSystem=WinQuerySystemAtomTable();
  418.   /* Window message for updating the statusbar */
  419.   atomUpdateStatusbar=WinAddAtom(hatSystem,WM_UPDATESTATUSBARMSG);
  420.   /* Window message for starting a grab  */
  421.   atomStartGrab=WinAddAtom(hatSystem,WM_STARTGRABMSG);
  422.   /* Window message for starting a write */
  423.   atomStartWrite=WinAddAtom(hatSystem,WM_STARTWRITEMSG);
  424. }
  425.  
  426. HWND CWAudioFolder::wpOpen(HWND hwndCnr,ULONG ulView,ULONG ulParam)
  427. {
  428.   HWND hwnd;
  429.   SIZEL sizelLeft={0};
  430.   HWND myFrameHWND;
  431.   RECTL rectl;
  432.   MENUITEM mi;
  433.   HWND hwndMenu;
  434.   int iItemCount;
  435.   char text[200];
  436.  
  437.   /* Call parent to build folder window */
  438.   hwnd=CWProgFolder::wpOpen(hwndCnr, ulView, ulParam);
  439.     
  440.   /* Only subclass folder frames, not settings notebooks */
  441.   if(ulView!=OPEN_SETTINGS){
  442.     myFrameHWND=WinWindowFromID(hwnd,FID_MENU);//Get menu hwnd      
  443.     /* Remove the change to tree view item from menubar */ 
  444.     //WinSendMsg(myFrameHWND,MM_DELETEITEM,MPFROM2SHORT(717,TRUE),0);
  445.  
  446.     if(myFrameHWND){
  447.       /* Query the number of items in the menubar */
  448.       iItemCount=(int)WinSendMsg(myFrameHWND,MM_QUERYITEMCOUNT,(MPARAM)0,
  449.                                  (MPARAM)0);
  450.       /* Load the Misc-tools menu from the resource */
  451.       hwndMenu=WinLoadMenu(myFrameHWND,queryModuleHandle(),ID_TBMENUTOOLS);
  452.       //723
  453.       if(hwndMenu){
  454.         /* Fill the MENUITEM structure */
  455.         mi.iPosition=iItemCount-1;
  456.         mi.afStyle=MIS_TEXT|MIS_SUBMENU;
  457.         mi.id=ID_TBMENUTOOLS;
  458.         mi.afAttribute=NULL;                
  459.         mi.hwndSubMenu=hwndMenu;
  460.         mi.hItem=NULL;
  461.         /* Add the Misc-tools item to the folder menubar */
  462.         WinSendMsg(myFrameHWND,MM_INSERTITEM,(MPARAM)&mi,
  463.                    (MPARAM)"Misc-Tools"); 
  464.       }/* end of if(hwndMenu) */
  465.       /*    WinSendMsg(myFrameHWND,MM_QUERYITEM,MPFROM2SHORT(723,FALSE),
  466.             (MPARAM)&mi);*/ 
  467.     }
  468.     /* Now add the framecontrols */
  469.  
  470.     /* This is the select-frameCtrl. */
  471.     /* Load the dialog from the resource. The object pointer of this
  472.        folder is given to the dialog procedure (this). In WM_INITDLG
  473.        the procedure saves this pointer for later use. */
  474.     myFrameHWND=WinLoadDlg(hwnd,hwnd,selectDialogProc,queryModuleHandle(),IDDLG_SELECTDLG,this);
  475.     /* Save the HWND in the instance data */    
  476.     hwndSelect=myFrameHWND;
  477.  
  478.     if(tid)     
  479.       /* The folder currently grabs some tracks from CD so disable the controls. */
  480.       cwEnableSelectControls(FALSE);
  481.  
  482.     if(myFrameHWND){
  483.       /* Query the size of the dialog */
  484.       WinQueryWindowRect(myFrameHWND,&rectl);
  485.       /* It's the top dialog so we need the height but not the width. The width
  486.          is always the width of the folder. */
  487.       sizelLeft.cy=rectl.yTop-rectl.yBottom;
  488.       /* Call a method of CWProgFolder to add the dialog as a framecontrol. 
  489.          FCTL_TOP means put it at the top of the folder.
  490.          After calling cwUpdateFrame(hwnd) it will be visible */
  491.       cwAddFrameCtl(hwnd, myFrameHWND, sizelLeft, FCTL_TOP,0);
  492.     }
  493.         
  494.     if(tid) {
  495.       /* The folder currently grabs some tracks from CD so show grab framecontrol. */
  496.       /* This is the grab-framectrl. */
  497.       myFrameHWND=WinLoadDlg(hwnd,hwnd,grabDialogProc,queryModuleHandle(),IDDLG_GRABDIALOG,this);
  498.       hwndGrab=myFrameHWND;
  499.       cwEnableGrabControls(FALSE);
  500.     }
  501.     else {
  502.       /* This is the write-framectrl. */
  503.       myFrameHWND=WinLoadDlg(hwnd,hwnd,dialogProc,queryModuleHandle(),ID_DIALOG,this);
  504.       hwndWrite=myFrameHWND;
  505.       if(hwndWrite&&tidWrite)
  506.         cwEnableWriteControls(FALSE);
  507.     }
  508.     if(myFrameHWND){
  509.       WinQueryWindowRect(myFrameHWND,&rectl);
  510.       sizelLeft.cx=rectl.xRight-rectl.xLeft;
  511.       /* Put the dialog at the left side of the folder */
  512.       cwAddFrameCtl(hwnd, myFrameHWND, sizelLeft, FCTL_LEFT,FCTL_POSBELOW);
  513.     }
  514.     /* Statusbar */
  515.     hwndStatusFrameCtl=WinLoadDlg(hwnd,hwnd,statusLineDialogProc,queryModuleHandle(),IDDLG_STATUS,this);
  516.     if(hwndStatusFrameCtl) {
  517.       WinQueryWindowRect(hwndStatusFrameCtl,&rectl);
  518.       sizelLeft.cy=rectl.yTop-rectl.yBottom;
  519.       /* Put the dialog at the bottom of the folder */
  520.       cwAddFrameCtl(hwnd, hwndStatusFrameCtl, sizelLeft, FCTL_BOTTOM,0);
  521.     }
  522.     /* Refresh frame to show the new framecontrols */
  523.     cwUpdateFrame(hwnd);
  524.     /* Let the statusbar show the right time */
  525.     cwForceStatusUpdate();
  526.   }
  527.   return hwnd;
  528. }
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.