Page 1 sur 1

problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 19:55
par celtic88
slt tout le monde :)

alors mon problème :( : c'est que j'essaie de crée un "widow" avec un 'class name' bien identique ! tous la marche très bien la fenetre est bien crée mai elle reste blocker et je sai pas pour quoi !

merci pour votre aide bien apprécié :)

Code : Tout sélectionner

Global classname.s="testttttt",hTestWndProc

Procedure TrstWndProc(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_PAINT
      hDC = GetDC_(hWnd) 
      tRect.RECT
      GetClientRect_(hWnd,@tRect) 
      ValidateRect_(hWnd, @tRect) 
      aRet = FillRect_(hDC, @tRect, GetStockObject_(#WHITE_BRUSH) )
      iRet = DrawText_(hDC, @"Test", -1,@tRect, (#DT_SINGLELINE|#DT_CENTER|#DT_VCENTER))
      ReleaseDC_(hWnd, hDC)
    Case #WM_CLOSE
      DestroyWindow_(hWnd)
      UnregisterClass_(classname,GetModuleHandle_(#NUL))
      End
    Case #WM_DESTROY
      ;PostQuitMessage_(0)
    Default
      ProcedureReturn DefWindowProc_(hWnd, uMsg, wParam, lParam) 
  EndSelect
  ProcedureReturn 0
EndProcedure

hicon=LoadIcon_(0,#IDI_APPLICATION)
hcursor=LoadCursor_(0,#IDC_ARROW)
classst.WNDCLASSEX
classst\cbSize= SizeOf(WNDCLASSEX)
classst\style=(#CS_VREDRAW| #CS_HREDRAW)
classst\lpfnWndProc=@TrstWndProc()
classst\hInstance=GetModuleHandle_(#NUL)
classst\hIcon=hicon
classst\hCursor=hcursor
classst\hbrBackground=GetStockObject_(#WHITE_BRUSH)
classst\lpszClassName=@classname
classst\hIconSm=hicon
hTestWndProc=RegisterClassEx_(@classst)

hTest=CreateWindowEx_(0,classname,"Test 123",#WS_OVERLAPPEDWINDOW, #CW_USEDEFAULT, 0, #CW_USEDEFAULT, 0, 0, 0, GetModuleHandle_(#NUL), 0)
ShowWindow_(hTest,#SW_SHOW)

While #True
  Delay(9999)
Wend

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:19
par celtic88
@Spock merci pour ta réponse :)!

en fait je cherche a crée un fenêtre avec la fonction "CreateWindowEx https://msdn.microsoft.com/en-us/librar ... s.85).aspx " ,pour plus d option et pour les avantages qu'elle me donne cette "fonction" ...,bon voila ma question c est pas comment crée un fenêtre !,mai pour quoi mon programme ce bloque et re-merci.

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:25
par celtic88
ahhh il faux crée un fenêtre avec "OpenWindow" avan,, pour que ça marche c est un peu bizarre sa tu l trouve non?

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:33
par celtic88
bon je programme avec d autre language est je veut Juste apprendre le pb question de sa facilite les chouse

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:43
par celtic88
OOK MERCI :)

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:44
par nico
Je ne crois pas que CreateWindowEx ai besoin d'une fenêtre parente, c'est une option.

Si tu codes avec des API, les fenêtres; les fonctions de PureBasic deviennent inutiles; même si PureBasic n'offre pas toutes les fonctionnalités pour les fenêtres et contrôles, tu peux quand même les rajouter avec des API, genre SetWindowLongPtr par exemple.

C'est une très mauvaise idée de passer par des API pour créer tes fenêtres, tu vas perdre en simplicité.

Sur Purearea, tu as des exemples:
http://www.purearea.net/pb/english/index.htm

Code : Tout sélectionner

; English forum:
; Author: Unknown (updated for PB4.00 by blbltheworm)
; Date: 31. March 2003
; OS: Windows
; Demo: No

Procedure WindowCallback(Window, Message, wParam, lParam) 
  Select Message 
    Case #WM_CLOSE 
      If MessageBox_(Window, "Wirklich beenden?", "EXIT", #MB_YESNO) = #IDYES 
        DestroyWindow_(Window) 
      Else 
        Result  = 0 
      EndIf 
    Case #WM_DESTROY 
      PostQuitMessage_(0) 
      Result  = 0 
    Default 
      Result  = DefWindowProc_(Window, Message, wParam, lParam) 
  EndSelect 
  ProcedureReturn Result 
EndProcedure 

#Style  = #WS_VISIBLE | #WS_BORDER | #WS_SYSMENU 
#StyleEx  = #WS_EX_TOOLWINDOW ;| #WS_EX_OVERLAPPEDWINDOW 

WindowClass.s  = "MeinFenster" 
wc.WNDCLASSEX 
wc\cbsize  = SizeOf(WNDCLASSEX) 
wc\lpfnWndProc  = @WindowCallback() 
wc\hCursor  = LoadCursor_(0, #IDC_CROSS); #IDC_ARROW   = Arrow 
; #IDC_SIZEALL = Size Arrow 
; #IDC_CROSS   = Cross 
wc\hbrBackground  = #COLOR_WINDOW + 1;CreateSolidBrush_(RGB($8F,$8F,$8F)) 
wc\lpszClassName  = @WindowClass 
RegisterClassEx_(@wc) 

hWndMain  = CreateWindowEx_(#StyleEx, WindowClass, "Test-Window", #Style, 10, 10, 200, 200, 0, 0, 0, 0) 
CreateWindowEx_(0, "Static", "", #WS_CHILD | #WS_VISIBLE | $12, 9, 9, 102, 22, hWndMain, 0, 0, 0) 
CreateWindowEx_(0, "Button", "Button 1", #WS_CHILD | #WS_VISIBLE, 10, 10, 100, 20, hWndMain, 0, 0, 0) 

ShowWindow_(hWndMain,  #SW_SHOWDEFAULT) 
UpdateWindow_(hWndMain); 

While GetMessage_(msg.MSG, #Null, 0, 0 ) 
  TranslateMessage_(msg) 
  DispatchMessage_(msg) 
Wend

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:51
par celtic88
est ca marche lollll par ici http://www.winprog.org/tutorial/simple_window.html

Code : Tout sélectionner

Global classname.s="test_best",hTestWndProc,hTest,Idbout1=1003,Idbout2=1004,IDC_MAIN_STATUS=1005
Procedure LoWord(value)
  ProcedureReturn value & $FFFF
EndProcedure
Procedure HiWord(value)
  ProcedureReturn value >> 16 & $FFFF
EndProcedure
Procedure TrstWndProc(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_COMMAND
      Select LoWord(wParam)
        Case Idbout1
          MessageBox_(hWnd,"vous avez cliqué sur le bouton 1","",32)
        Case Idbout2
          MessageBox_(hWnd,"vous avez cliqué sur le bouton 2","",32)
      EndSelect
      ;Debug Str(LoWord(wParam)) + "  " + Str(HiWord(wParam)) + "  " + Str(lParam)
    Case #WM_PAINT
      spaint.PAINTSTRUCT
      hDC = BeginPaint_(hWnd,@spaint) 
      tRect.RECT
      GetClientRect_(hWnd,@tRect) 
      DrawText_(hDC, @classname, -1,@tRect, (#DT_SINGLELINE|#DT_CENTER|#DT_VCENTER))
      EndPaint_(hWnd,@spaint) 
    Case #WM_CLOSE
      DestroyWindow_(hWnd)
      UnregisterClass_(classname,hTestWndProc)
      End
    Case #WM_DESTROY
      ;PostQuitMessage_(0)
    Case #WM_SIZE
      SendMessage_(GetDlgItem_(hWnd, IDC_MAIN_STATUS), #WM_SIZE, 0, 0)
    Default
      ProcedureReturn DefWindowProc_(hWnd, uMsg, wParam, lParam) 
  EndSelect
  ProcedureReturn 0
EndProcedure

Procedure WinThread(*avooi) 
  
  hicon=LoadIcon_(0,#IDI_INFORMATION)
  hcursor=LoadCursor_(0,#IDC_HAND)
  
  classst.WNDCLASSEX
  With classst
    \cbSize= SizeOf(WNDCLASSEX)
    \style=(#CS_VREDRAW| #CS_HREDRAW)
    \lpfnWndProc=@TrstWndProc()
    \hInstance=GetModuleHandle_(#NUL)
    \hIcon=hicon
    \hCursor=hcursor
    \hbrBackground=GetStockObject_(#WHITE_BRUSH)
    \lpszClassName=@classname
    \lpszMenuName=3
    \hIconSm=hicon
  EndWith
  
  hTestWndProc=RegisterClassEx_(@classst)
  
  hTest=CreateWindowEx_(#WS_EX_TOPMOST,classname,"Test 123",#WS_OVERLAPPEDWINDOW, #CW_USEDEFAULT, 50,#CW_USEDEFAULT,  50, 0, 0, GetModuleHandle_(#NUL), 0)
  hwndbout= CreateWindowEx_( 0,"Button", "bouton 1", #WS_CHILD | #WS_VISIBLE, 10, 10, 100, 20, hTest, Idbout1, GetModuleHandle_(#NUL), 0) 
  CreateWindowEx_(0, "Button", "bouton 2", #WS_CHILD | #WS_VISIBLE, 110, 10, 100, 20, hTest, Idbout2, GetModuleHandle_(#NUL), 0) 
  status_handle=CreateWindowEx_(0, "msctls_statusbar32", "", #WS_CHILD | #WS_VISIBLE, 0, 0, 0, 0, hTest, IDC_MAIN_STATUS, GetModuleHandle_(#NUL), 0)   
  Dim status_parts(2)
  status_parts(0)=200
  status_parts(1)=100+status_parts(0)
  status_parts(2)=100+status_parts(1)
  SendMessage_(status_handle, #SB_SETPARTS, 3, @status_parts())  
  SendMessage_(status_handle, #SB_SETTEXT, 0, @"Ready")
  SendMessage_(status_handle, #SB_SETTEXT, 1, @"For test")  
  SendMessage_(status_handle, #SB_SETTEXT, 2, @"Oky")   
  #SB_SETICON = #WM_USER + 15
  SendMessage_(status_handle, #SB_SETICON, 2, hicon)
  ShowWindow_(hTest,#SW_SHOW)
  Msg.MSG
  While GetMessage_(@Msg, hTest, 0, 0) > 0 : DispatchMessage_(@Msg) : Wend
  
EndProcedure


Thread = CreateThread_( #Null, #Null, @WinThread(), #Null, #Null, #Null)

While #True
  Sleep_(999999999)
Wend

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 22:54
par celtic88
mico j ai pas veu ton poste merci a vous j apprend beaucoup avec vous :)

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:04
par nico
Peut être que Celtic est un habitué du langage C, cela lui permettrait de convertir du code C plus facilement et d'utiliser des librairies propre à PureBasic.

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:14
par celtic88
Spock,
oui c est tree tree simple, mai la dans ce section de débutants en chercher a progresser et comprendre comment les chose ce passe pour l apprendre et pour quoi pas le modifie et donner ton propre désire :) ,et comme tu sais pb ne propos pas a tout les fonctions de windows des raccourci comme "OpenWindow" il faux que tu débrouille tout seul et voila location d apprendre ;)

salutations à vous.

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:31
par celtic88
loooooool omg what this! mai moi je connais pas le chinois :lol:

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:34
par celtic88
pb un puissant langage,, toujours je pence a son créateur mai ce mec est pure genie!!!


un tree Grand Respect pour son createur

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:40
par celtic88
Pure basic = La puissance en toute simplicité

Re: problème avec CreateWindowEx ?

Publié : dim. 13/sept./2015 23:54
par celtic88
mai J'arrive pas à le comprendre pour quoi ce puissant langage n arrive pas a avoir son statue comme un langage de haute niveau est avoir plus de programmeur quil le pratique ,et ci en le compare avec d autre langage comme vb ou dephii le Pb son sor tree tree bien avec eux,, je dirais même un peut mieux que delphi a mon avis et largement contre le vb.net !! :)

Re: problème avec CreateWindowEx ?

Publié : lun. 14/sept./2015 7:10
par Micoute
Je n'aurais pas mieux dis !