Page 1 sur 1

L'adresse mémoire de la classe d'une fenêtre par son handle?

Publié : mar. 21/juin/2005 12:45
par Lna
(Obtenir l'adresse mémoire de la classe d'une fenêtre par son handle)

Bonjour à toutes et à tous,

Sauriez-vous s'il vous plaît, s'il existe une instruction API qui retourne l'adresse mémoire, où est stockée la classe d'une fenêtre de sa structure WNDCLASS (comme au moment de sa création uniquement par API, par exemple) ?

Merci d'avance

A +

Publié : mar. 21/juin/2005 19:38
par erix14
Je ne pense pas que l'on puisse avoir l'adresse mémoire où est stockée la classe ( Window la garde secrète :( ) Mais on peut en avoir une copie ! :D grâce aux fonctions GetClassName et GetClassInfoEx
Regarde mon petit exemple :

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 200, 200,#PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Window Class")
     
     handle = WindowID()
     
     StartDrawing(WindowOutput())
     class$=Space(255)
     GetClassName_(handle,@class$,Len(class$))
     class$ = Left(class$,Len(class$))
     wc.WNDCLASSEX
     wc\cbSize = SizeOf(WNDCLASSEX)
     If GetClassInfoEx_(GetModuleHandle_(#Null),@class$,@wc)
          DrawingMode(1)
          Locate(10,30)
          DrawText("Class : "+PeekS(wc\lpszClassName))
          Locate(10,50)
          DrawText("WndProc : "+Hex(wc\lpfnWndProc))
          Locate(10,70)
          DrawText("Style : "+Hex(wc\style))
          ;typedef struct _WNDCLASSEX {    // wc  
          ;    UINT    cbSize; 
          ;    UINT    style; 
          ;    WNDPROC lpfnWndProc; 
          ;    int     cbClsExtra; 
          ;    int     cbWndExtra; 
          ;    handle  hInstance; 
          ;    hIcon   hIcon; 
          ;    hCursor hCursor; 
          ;    HBRUSH  hbrBackground; 
          ;    LPCTSTR lpszMenuName; 
          ;    LPCTSTR lpszClassName; 
          ;    hIcon   hIconSm; 
          ;} WNDCLASSEX; 
          
     EndIf
     StopDrawing()
     Repeat
          EventID = WaitWindowEvent()
          If EventID = #PB_Event_CloseWindow
               Quit = 1
          EndIf
     Until Quit = 1
EndIf
End

Publié : mer. 22/juin/2005 11:36
par Lna
Bonjour erix14,

Je te remercie pour ta réponse, ainsi que pour le temps passé à réaliser le programme d'exemple.
Oui, c'est la bonne API pour copier la classe d'une fenêtre.
Vue le nombre des API avec leurs noms pas toujours explicites, il devient bien difficile de s'y retrouver.

Encore un grand merci

A +