Menubar in linked childwindows

This forum is for eXpress++ general support.
Post Reply
Message
Author
hm@mpsg.net
Posts: 8
Joined: Mon Feb 08, 2010 11:13 am

Menubar in linked childwindows

#1 Post by hm@mpsg.net »

I want to solve the problem, illustrated in attached code.
When I link the childwindow inside the main window the menubar of the child disappear.
I have attached the code, project and exe file to illustrate the behavior.
Look at this code sample:

#Include 'dcdialog.ch'
#include 'appevent.ch'


PROCEDURE Main()
LOCAL GetList := {}, oFileMenu, oFilemenu1, oFilemenu2, oMenuBar, oEditMenu,;
oMemo, oUtilMenu, lok := .t.
Local odlg

/* ---- Menu ---- */

DCMENUBAR oMenuBar parent oDlg ;
ownerdraw ;
menubarcolor 0,{150,150,150};
subbarcolor 1,{150,150,150} ;
subcolor 0,{200,200,200}

DCSUBMENU oFileMenu PROMPT "&Menu" ;
checked ;
PARENT oMenuBar


DCMENUITEM "Test with menu" PARENT oFileMenu ;
accelkey xbeK_ALT_F4 ;
ACTION {||test('menu',odlg)}

DCMENUITEM "Test without menu" PARENT oFileMenu ;
accelkey xbeK_ALT_F4 ;
ACTION {||test('',odlg)}

DCMENUITEM "E&xit Alt-F4" PARENT oFileMenu ;
accelkey xbeK_ALT_F4 ;
ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}

dcread gui parent @odlg title 'Main window'
return


procedure test(parm,odlg)
Local cString := space(30)
LOCAL GetList := {}
Local oFileMenu,oMenuBar
local odlg1
setAppwindow(odlg:drawingarea)
DCMENUBAR oMenuBar parent oDlg1 ;
menubarcolor 0,{150,150,150};
subbarcolor 1,{150,150,150} ;
subcolor 0,{200,200,200}

DCSUBMENU oFileMenu PROMPT "&Menu" ;
checked ;
PARENT oMenuBar



DCMENUITEM "E&xit Alt-F4" PARENT oFileMenu ;
accelkey xbeK_ALT_F4 ;
ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}

@ 1,1 dcsay 'String' get cString

dcgetoptions autowinmenu eval{||setappwindow(odlg:drawingarea)}

if parm = 'menu'
dcRead gui fit buttons 1 options getoptions parent @odlg1 //Menu visible
else
dcRead gui fit buttons 1 parent @odlg1 options getoptions appwindow @odlg //Menu invisible
endif

RETURN

procedure appsys()
return
Attachments
Menutest.zip
(8.39 KiB) Downloaded 686 times

User avatar
rdonnay
Site Admin
Posts: 4729
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Menubar in linked childwindows

#2 Post by rdonnay »

Your problem is due to a limitation of Windows.
It does not allow more than 1 menubar in an application with child windows.
This is why it works when the window is a child of the desktop but not the main window.

I have modified your code to show how you can still use DCSUBMENU and DCMENUITEM commands to build a menu structure but the menubar will be replaced with a DCSTATUSBAR, DCTOOLBAR and DCADDBUTTONs.

If there are other eXpress++ users who would like to have a menu structure on child windows, I would consider writing a new eXpress++ command that would simplify the code to do this.

Something maybe like this. It would automatically create the toolbar and buttons. :

Code: Select all

DCSTATUSBARMENU oMenuBar

  DCSUBMENU oFileMenu PROMPT 'Menu'

    DCMENUITEM 'Exit' PARENT oFileMenu
Here is your modified code:

Code: Select all

procedure test(parm,odlg)
   Local cString   := space(30)
   LOCAL GetList   := {}
   Local oFileMenu,oMenuBar,oFileMenu2
   local odlg1
   LOCAL oStatTop, oToolbar

   // setAppwindow(odlg:drawingarea)

   DCSTATUSBAR oStatTop HEIGHT 20 ALIGN DCGUI_ALIGN_TOP

     @ 0,0 DCTOOLBAR oToolBar PARENT oStatTop SIZE 300,15 PIXEL ;
           BUTTONSIZE 60,15 COLOR nil, GRA_CLR_PALEGRAY


   /*
   DCMENUBAR oMenuBar parent oDlg1 ;
             menubarcolor 0,{150,150,150};
             subbarcolor 1,{150,150,150} ;
             subcolor 0,{200,200,200}
   */

   DCADDBUTTONXP CAPTION 'Menu' ;
         PARENT oToolBar ;
         COLOR nil, GRA_CLR_PALEGRAY ;
         ACTION {|a,b,o|oFileMenu:PopUp( o:setParent(), o:currentPos(), 2 , ;
                  XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN  ) } ;

     DCSUBMENU oFileMenu PROMPT "&Menu" ;
               checked                  ;

     DCMENUITEM "E&xit                    Alt-F4" PARENT oFileMenu ;
                 accelkey xbeK_ALT_F4                        ;
                 ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}

   DCADDBUTTONXP CAPTION 'Menu 2' ;
         PARENT oToolBar ;
         COLOR nil, GRA_CLR_PALEGRAY ;
         ACTION {|a,b,o|oFileMenu2:PopUp( o:setParent(), o:currentPos(), 2 , ;
                  XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN  ) } ;

     DCSUBMENU oFileMenu2 PROMPT "&Menu 2" ;
               checked                  ;

     DCMENUITEM "E&xit                    Alt-F4" PARENT oFileMenu2 ;
                 accelkey xbeK_ALT_F4                        ;
                 ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)}


   @ 1,1 dcsay 'String' get cString

   dcgetoptions ;
      ;// autowinmenu ;
      ;// eval{||setappwindow(odlg:drawingarea)}

   if parm = 'menu'
      dcRead gui fit buttons 1  ;
      options getoptions ;
      parent @odlg1
    else
      dcRead gui fit buttons 1 ;
         ;// parent @odlg1 ;
         options getoptions ;
         appwindow odlg:drawingArea
   endif

RETURN
Attachments
menutest.zip
Modified menu test program
(21.73 KiB) Downloaded 688 times
The eXpress train is coming - and it has more cars.

hm@mpsg.net
Posts: 8
Joined: Mon Feb 08, 2010 11:13 am

Re: Menubar in linked childwindows

#3 Post by hm@mpsg.net »

Thank you, this will solve my problem.

Post Reply