Soyez le premier à donner votre avis sur cette source.
Snippet vu 9 647 fois - Téléchargée 40 fois
'*---------------------------------------- '* Génération de fenetre a l'aide d'api '* '* Copyright vbapihelpline '* Update , traduction et adaptation '* TheSaib pour Codes-sources.com '* 18/12/02 '* Laissez les copyright dans vos softs '* Le copiage sans copyright tue le developpements '* amateur '*---------------------------------------- Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long Private Declare Function RegisterClass Lib "user32.dll" Alias "RegisterClassA" (lpWndClass As WNDCLASS) As Long Private Declare Function UnregisterClass Lib "user32.dll" Alias "UnregisterClassA" (ByVal lpClassName As Any, ByVal hInstance As Long) As Long Private Declare Function DefWindowProc Lib "user32.dll" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Type WNDCLASS style As Long lpfnWndProc As Long cbClsExtra As Long cbWndExtra As Long hInstance As Long hIcon As Long hCursor As Long hbrBackground As Long lpszMenuName As String lpszClassName As String End Type 'constante dwExStyle Private Const WS_EX_ACCEPTFILES = &H10 'Drag and Drop possible Private Const WS_EX_CONTEXTHELP = &H400 '? dans la titleBar Private Const WS_EX_CONTROLPARENT = &H10000 'La fenetre peut avoir des enfants Private Const WS_EX_DLGMODALFRAME = &H1 'La fenetre est une frame modale Private Const WS_EX_LEFT = &H0 'Alignement a gauche de la fenetre Private Const WS_EX_LEFTSCROLLBAR = &H4000 'La scrollbar a gauche Private Const WS_EX_LTRREADING = &H0 'La lecture du texte se fait de Gauche a droite Private Const WS_EX_MDICHILD = &H40 'La fenetre est une fenetre enfantée Private Const WS_EX_NOACTIVATE = &H8000000 '(Win 2000) La fenetre ne peut etre activée Private Const WS_EX_NOPARENTNOTIFY = &H4 'La fenetre n'est pas detruite par sa parente Private Const WS_EX_OVERLAPPEDWINDOW = &H300 '? Private Const WS_EX_PALETTEWINDOW = &H188 '? Private Const WS_EX_RIGHT = &H1000 'Aligenement a droite de la fenetre Private Const WS_EX_RIGHTSCROLLBAR = &H0 'Ya des scrollbars a droite Private Const WS_EX_RTLREADING = &H2000 'Lecture de droite a gauche du texte possible Private Const WS_EX_STATICEDGE = &H20000 'RElatif aux objets 3D de la form Private Const WS_EX_TOOLWINDOW = &H80 'c une toolwindow Private Const WS_EX_TOPMOST = &H8 'La fenetre est toujorus visible Private Const WS_EX_TRANSPARENT = &H20 'La fenetre est transparente Private Const WS_EX_WINDOWEDGE = &H100 'Bords de la fenetre sizable 'dwStyle Konstanten Private Const WS_BORDER = &H800000 'La fenetre a des bordures Private Const WS_CAPTION = &HC00000 'La fenetre a un titre Private Const WS_CHILD = &H40000000 'LA fenetre est une enfant Private Const WS_CLIPCHILDREN = &H2000000 'Les fenetres enfants ne regourpent pas la fenetre mère Private Const WS_CLIPSIBLINGS = &H4000000 'Les fenetres enfants ne regourpent pas la fenetre mère Private Const WS_DISABLED = &H8000000 'La fenetre est désactivée Private Const WS_DLGFRAME = &H400000 'TitleBar et c une boite de dialogue Private Const WS_GROUP = &H20000 'Rassemblage de toutes les fenetres et boutons de commande dans un groupe Private Const WS_HSCROLL = &H100000 'La fenetre a des scrollbars horizontaux Private Const WS_MAXIMIZE = &H1000000 'La fenetre est maximisée Private Const WS_MAXIMIZEBOX = &H10000 'Symbole 'Maximiser' Private Const WS_MINIMIZE = &H20000000 'La fenetre est réduite Private Const WS_MINIMIZEBOX = &H20000 'Symbole 'minimiser' Private Const WS_OVERLAPPED = &H0 'TitleBAr et X Private Const WS_OVERLAPPEDWINDOW = &HCF0000 'La fenetre a des clipcontrols (-OX) Private Const WS_POPUP = &H80000000 'Mode popup Private Const WS_POPUPWINDOW = &H80880000 'Mode popup (toolbox) Private Const WS_SIZEBOX = &H40000 'La fenetre peut etre redimenssionner Private Const WS_SYSMENU = &H80000 'La fenetre a une barre de titre Private Const WS_TABSTOP = &H10000 'La fenetre est réactive au tab Private Const WS_VISIBLE = &H10000000 'La fenetre est visible Private Const WS_VSCROLL = &H200000 'La fenetre a un scrollbar vertical 'Autres Constantes Private Const CW_USEDEFAULT = &H80000000 'Constante hWndParent Private Const HWND_BROADCAST = &HFFFF 'Cosntante WNDCLASS.style Private Const CS_BYTEALIGNCLIENT = &H1000 'Alignement en fonction des bits de limitations ? Private Const CS_BYTEALIGNWINDOW = &H2000 'Orientation de la fenetre Private Const CS_CLASSDC = &H40 'Toutes les fenêtres de cette classe ont les mêmes Contexte Private Const CS_DBLCLKS = &H8 'double click sur la fenetre Private Const CS_HREDRAW = &H2 'Lors de changement d'attributs de la frame (taille position ...) Redessinage de la fenetre (partie horizontale) Private Const CS_NOCLOSE = &H200 'Désactivation du close Private Const CS_OWNDC = &H20 'Chaque fenêtre qui est dérivée de cette classe obtient son propre contexte Private Const CS_PARENTDC = &H80 'Permet à la fenetre d'etre dessiné sur sa parente Private Const CS_SAVEBITS = &H800 'Conservation des infos de la fenetre (+ou-) Private Const CS_VREDRAW = &H1 'Lors de changement d'attributs de la frame (taille position ...) Redessinage de la fenetre (partie verticale) 'Cosntantes WNDCLASS.hbrBackground Private Const COLOR_ACTIVEBORDER = 10 'couleur des bordure en mode activé (Focusé) Private Const COLOR_ACTIVECAPTION = 2 'Couleur de mode activé Private Const COLOR_APPWORKSPACE = 12 'Couleur de la zone de travail Private Const COLOR_BACKGROUND = 1 'Couleur du fond de la fenetre Private Const COLOR_BTNFACE = 15 'Couleur du bouton (face) Private Const COLOR_BTNHIGHLIGHT = 20 'Couleur du bont surligné (on passe dessus) Private Const COLOR_BTNSHADOW = 16 'Couleurs de l'ombre d'un bouton Private Const COLOR_BTNTEXT = 18 'Couleur des textes sur les bouttons Private Const COLOR_CAPTIONTEXT = 9 'Couleur du texte actifs Private Const COLOR_GRAYTEXT = 17 'SCouleur du texte inactif Private Const COLOR_HIGHLIGHT = 13 Private Const COLOR_HIGHLIGHTTEXT = 14 'couleur du texte surligné Private Const COLOR_INACTIVEBORDER = 11 'Couleur des bordures inactives Private Const COLOR_INACTIVECAPTION = 3 'Couleur du titre de la fenetre inactive Private Const COLOR_INACTIVECAPTIONTEXT = 19 'Couleur standard d'un texte de bord de titre inactif Private Const COLOR_MENU = 4 'Couleur des menus Private Const COLOR_MENUTEXT = 7 'Couleur des textes des menus Private Const COLOR_SCROLLBAR = 0 'Couleurs des scrolls Private Const COLOR_WINDOW = 5 'Couleur de la fenetre Private Const COLOR_WINDOWFRAME = 6 'Couleur de la frame Private Const COLOR_WINDOWTEXT = 8 'Couleur du texte de la fenetre 'Info de la fenerte Private Const WM_DESTROY = &H2 'Fenetre detruite Private Const WM_MOVE = &H3 'Décalage de la fenetre Private Const WM_SIZE = &H5 'Changement de taille de la fenetre Private Const WM_LBUTTONDBLCLK = &H203 'Fenetre doublecliquée Private WindowClose As Boolean 'Procedure principale de la fenetre tous les messages passent par cette fonctions Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim HIWORD As Long, LOWORD As Long 'Test des messages 'routine liées aux messages Select Case uMsg Case WM_DESTROY Debug.Print "Fermeture de l'application" WindowClose = True Case WM_SIZE HIWORD = CLng("&H" & Left(Right("00000000" & Hex(lParam), 8), 4)) - 24 'Bit de poids fort LOWORD = CLng("&H" & Right(Right("00000000" & Hex(lParam), 8), 4)) - 4 'Bit de poids faible Debug.Print "Modification de la taille de la fenetre : (x=" & HIWORD & ",y=" & LOWORD & ")" Case WM_MOVE HIWORD = CLng("&H" & Left(Right("00000000" & Hex(lParam), 8), 4)) - 24 LOWORD = CLng("&H" & Right(Right("00000000" & Hex(lParam), 8), 4)) - 4 Debug.Print "Deplacement de la fenetre : (x=" & HIWORD & ",y=" & LOWORD & ")" Case WM_LBUTTONDBLCLK Debug.Print "DoubleClick sur la fenetre." End Select 'Procédure standard de définition de fonction principale WindowProc = DefWindowProc(hWnd, uMsg, wParam, lParam) End Function 'Permet de recuperre l'adresse de la fenetre principele Private Function GetFuncAddress(ByVal Address As Long) As Long GetFuncAddress = Address End Function Sub Main() Dim OwnClass As WNDCLASS, hWnd As Long Dim ClassAtom As Long 'Attributs de la classe With OwnClass .style = CS_OWNDC Or CS_HREDRAW Or CS_VREDRAW .lpfnWndProc = GetFuncAddress(AddressOf WindowProc) .hInstance = App.hInstance .lpszClassName = "Classe_Principale" .hbrBackground = COLOR_APPWORKSPACE End With 'Enregistrement de la classe ClassAtom = RegisterClass(OwnClass) If ClassAtom = 0 Then MsgBox "Enregistrement de la classe impossible.", vbInformation, "Erreur" End End If 'Création de la fenetre Dim NormalStyles As Long Dim xPos As Long, yPos As Long NormalStyles = WS_OVERLAPPEDWINDOW Or WS_CAPTION Or WS_BORDER Or WS_VISIBLE 'Attributs de la fenetre xPos = (Screen.Width / Screen.TwipsPerPixelX - 320) / 2 'Position Horizontale yPos = (Screen.Height / Screen.TwipsPerPixelY - 200) / 2 'Position Verticlae hWnd = CreateWindowEx(WS_EX_APPWINDOW, "Classe_Principale", "TheSaib Form Création", NormalStyles, xPos, yPos, 320&, 200&, 0&, 0&, App.hInstance, ByVal 0&) If hWnd = 0 Then MsgBox "Creation de la classe impossible", vbInformation, "Erreur" GoTo UnregisterClass End End If 'Fermeture de la fenetre quand le message close est envoyée Do DoEvents Loop While WindowClose = False 'Désenregistrement de la classe UnregisterClass: Retval = UnregisterClass("Classe_Principale", App.hInstance) If Retval = 0 Then MsgBox "Unregistrer de la classe impossible", vbCritical, "Erreur" End If End Sub
3 août 2008 à 19:22
Pour les événements, c'est dans la CallBack : WindowProc dans la source.
Pour un bouton_click, il faut intercepeter le message WM_COMMAND puis faire un switch sur lParam : (Code C++)
if((HWND) lParam == VarDeMonControle )
{
VarDeMonControle_click();
}
Voilà, pour les autres faut aller sur le site de Microsoft.
3 août 2008 à 19:16
En API, pour créer un controles c'est :
VarDeMonControle = CreateWindowEx(0, ClasseDuControle(bouton c'est "button"), TexteDuControle, puis le reste avec après les styles, les pos, etc...
en style on met en général "WC_CHILD or WC_VISIBLE".
Quelque ClasseDeControles :
Bouton = "button"
TextBox = "edit"
ComboBox = "combobox"
ListBox = "listbox"
Label = "static"
Voila
20 avril 2006 à 00:16
17 juin 2005 à 14:29
17 juin 2005 à 11:15
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.