jamazevedo escreveu:Só percebi um incoveniente, quando chamo a Nova_Janela() o é apresentada uma nova janela e gostaria que fosse mostrada na janela atual.
Preparei um novo exemplo. Acho que este ilustrará melhor o que você deseja.
Código: Selecionar todos
#include "gtk.ch"
Procedure Main()
local pWindow
local pVBox
local pMenuBar
local pMenuOpcoes
local pOpcoes
local pOpcao1
local pOpcao2
local pOpcao3
// inicializa a gtk+
Gtk_Init()
// cria janela principal (main)
pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
Gtk_Widget_Set_Size_Request( pWindow , 640 , 480 )
Gtk_Window_Set_Title( pWindow , "Janela MAIN" )
Gtk_Window_Set_Position( pWindow , GTK_WIN_POS_CENTER )
// cria menu
pVBox := Gtk_VBox_New( .F. , 0 )
Gtk_Container_Add( pWindow , pVBox )
pMenuBar := Gtk_Menu_Bar_New()
pMenuOpcoes := Gtk_Menu_New()
pOpcoes := Gtk_Menu_Item_New_With_mnemonic( "_Cadastros" )
pOpcao1 := Gtk_Menu_Item_New_With_mnemonic( "_Clientes" )
pOpcao2 := Gtk_Menu_Item_New_With_mnemonic( "_Produtos" )
pOpcao3 := Gtk_Menu_Item_New_With_mnemonic( "_Servicos" )
Gtk_Menu_Item_Set_SubMenu( pOpcoes , pMenuOpcoes )
Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao1 )
Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao2 )
Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao3 )
Gtk_Menu_Shell_Append( pMenuBar , pOpcoes )
Gtk_Box_Pack_Start( pVBox , pMenuBar , .F. , .F. , 3 )
// termina programa quando janela principal for destruida
Gtk_Signal_Connect( pWindow , "destroy" , { || Gtk_Main_Quit() } )
// conecta opções dos menu com funções
Gtk_Signal_Connect( pOpcao1 , "activate" , { || Clientes() } )
Gtk_Signal_Connect( pOpcao2 , "activate" , { || Produtos() } )
Gtk_Signal_Connect( pOpcao3 , "activate" , { || Servicos() } )
// mostra janela principal
Gtk_Widget_Show_All( pWindow )
// inicia processamento dos eventos
Gtk_Main()
Return
Function Clientes ()
Static pWindow
if pWindow == Nil
// cria janela
pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
Gtk_Window_Set_Title( pWindow , "Clientes" )
Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
Gtk_Widget_Show_All( pWindow )
else
// mostra janela
Gtk_Window_Present(pWindow)
endif
Return Nil
Function Produtos ()
Static pWindow
if pWindow == Nil
// cria janela
pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
Gtk_Window_Set_Title( pWindow , "Produtos" )
Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
Gtk_Widget_Show_All( pWindow )
else
// mostra janela
Gtk_Window_Present(pWindow)
endif
Return Nil
Function Servicos ()
Static pWindow
if pWindow == Nil
// cria janela
pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
Gtk_Window_Set_Title( pWindow , "Servicos" )
Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
Gtk_Widget_Show_All( pWindow )
else
// mostra janela
Gtk_Window_Present(pWindow)
endif
Return Nil
Cada uma das três rotinas (clientes, produtos e servicos) segue o mesmo procedimento: criam a janela caso não tenha sido criada ainda (pWindow=Nil) ou apresentam a janela (pWindow<>Nil).
Temos duas novas funções neste exemplo:
Gtk_Widget_Hide_On_Delete: conectada ao sinal "delete-event", esconde a janela (hide) quando o usuário tentar fechá-la. A janela continuará criada, mas invisível.
Gtk_Window_Present: apresenta a janela, quer ela esteja invisivel, minimizada ou escondida atrás de outra janela.