Dúvida sobre GUI no Windows

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida sobre GUI no Windows

Mensagem por JoséQuintas »

Tentei entender a gtwvg mas não entendi.
Ao contrário do que eu pensava, o fonte GUI não é totalmente em PRG, depende de rotinas em C.
Pelo que mexi em VB6, qualquer controle era um FORM - uma janela.
Pra criar um controle era só usar uma janela, a mesma de criar um módulo.
Fiz um simulado básico, mas não tem controle de janela pai/filho, ou retirada das bordas, ou controle de evento, e muito menos a "conversação" entre janelas pra avisar sobre redesenhar a tela.

É um simulado básico.
Pra quem testar, saiba que dentro da janela principal criei 10 janelas filhas, mas as 10 janelas filhas ficam uma encima da outra, precisa mover.
E ao mover, como não tem o aviso entre as janelas, o "redesenho" não é instantâneo.

Só estou querendo saber se estou entendendo errado, ou se as LIBs GUI é que complicam tudo.
Porque se for do jeito que penso, seria só criar os controles com métodos padrão pra poder juntar tudo em qualquer GUI.
Teoricamente, cada janela é um programa, e cada programa é responsável pelo seu próprio desenho/funcionamento, que pode executar uma ação ou se comunicar com as outras janelas.

Segue o teste bem primário, de quem ainda está tentando entender esse troço.

Obs: A propósito... reparem que passo valores entre as threads de um jeito simples: classes.
Obs2: Queria postar isso no grupo harbour, mas não sei se meu inglês vai ser suficiente pra explicar isto direito.

Código: Selecionar todos

#include "hbclass.ch"
#include "inkey.ch"

PROCEDURE Main
   LOCAL oThisWindow, oWindow := Array(10), nCont, hWnd
   SetMode( 25, 80 )
   SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE + HB_INKEY_GTEVENT )
   CLS
   hWnd := wvgSetAppWindow():hWnd
   FOR nCont = 1 TO 10
      oThisWindow := WindowClass():New()
      oThisWindow:oParent := hWnd
      oThisWindow:oMain   := wvgSetAppWindow()
      hb_ThreadStart( { || oThisWindow:Execute() } )
      oWindow[ nCont ] := oThisWindow
   NEXT
   WaitForEsc()
   RETURN

CREATE CLASS WindowClass
   VAR oParent
   VAR oMain
   METHOD Execute()
   END CLASS   
   
METHOD Execute()
   SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE + HB_INKEY_GTEVENT )
   hb_gtReload( "WVG" )
   SetMode( 5, 60 )
   CLS
   wapi_SetParent( wvgSetAppWindow():hWnd, ::oParent )
   WaitForEsc( ::oMain )
   RETURN NIL
   
FUNCTION wapi_SetParent( hWndChild, hWnd )
   CallDll32( "SetParent", "user32.dll", hWndChild, hWnd )
   RETURN NIL   

FUNCTION WaitForEsc( oMain )
   DO WHILE Inkey(0) != K_ESC
      IF oMain != NIL
         oMain:Refresh()
      ENDIF
   ENDDO
   RETURN .T.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Dúvida sobre GUI no Windows

Mensagem por alxsts »

Olá!

Nada posso dizer sobre a gtwvg, pois nunca vi.

Estou testando a Qt4xHb do Gambeta e a coisa é fantástica!

Quanto ao seu inglês, não se preocupe. se o tradutor do Google. Não é perfeito mas quebra o galho...
[]´s
Alexandre Santos (AlxSts)
Responder