Api marche pas

Résolu
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015 - 13 avril 2005 à 22:15
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 17 avril 2005 à 16:48
salut a tous bon j'ai essayer d'utliser l'api suivante



SetLayeredWindowAttributes avec quelque constante alors le compilateur
me dit qu'elle est pas declaré :s ( on sachan que cette derniere est
une dll de user32.dll )

je voudrai savoir comment faire pour pouvoir l'utiliser

merci

15 réponses

T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
13 avril 2005 à 23:35
merci mais bon c pas ca ^^



voila ce qu'il faut faire ^^



// a lentete du fichier

typedef BOOL (WINAPI *SLWA_FUNC)(HWND hwnd,COLORREF crKey,BYTE

bAlpha,DWORD dwFlags);



SLWA_FUNC SetLayeredWindowAttributes;









// dans la winmain




HMODULE hUser32 = GetModuleHandle("USER32.DLL");


if (!hUser32) return false;

SetLayeredWindowAttributes = (SLWA_FUNC)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2005 à 23:22
#define _WIN32_WINNT 0x0500
#include <windows.h>

devrait passer ainsi.

ciao...
BruNews, MVP VC++
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
13 avril 2005 à 23:37
lol je vois que j'ai une autre question ^^ :



j'ai traduit ceci en c++ mas ca marche pas (enfin je pense que ca vien de moi l'erreur)



valeur Hexa en vb &H80000 je l changer en 0x080000 en c++ et ca marche pas j'ai aussi essayer 0x80000





merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2005 à 23:48
vb &H80000 est bien 0x80000 en C.

http://www.cppfrance.com/code.aspx?ID=29750
Démo ici qu'il n'y a pas besoin de charger dynamiquement SetLayeredWindowAttributes(), seulement si ton prog doit tourner sur les vieux systèmes.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 avril 2005 à 23:50
Je pense que rajouter des 0 à gauche d'un nombre ca risque de pas changer grand chose.

Par contre, je vois pas d'ou tu sors cette valeur 0x80000.

Pour ton problème de départ, le moyen qu'on utilise en général c'est
utiliser User32.lib et windows.h plutot que d'aller directement
chercher dans la DLL...
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
13 avril 2005 à 23:57
je tourne sous winxp prof ( j'ai essayer de compiler plien de code qui
utilise cettte derniere sous VC++6 ,vc++7 et devc++ et jai tjr le meme
prob ^^



mais avec le code que je vien de mettre en haut ca ma tous reglé ^^
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
13 avril 2005 à 23:58
dsl pour les fot d'ortho lol j'avait pas f attention ^^
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 avril 2005 à 01:10
Salut,

J'ai utilisé la fonction SetLayeredWindowAttributes() plusieurs fois sur Visulal C++6 sous Win2000 et XP sans avoir à appeler dynamiquement user32.dll. Comme te l'a précisé BruNews, il suffit de mettre
:

#define _WIN32_WINNT 0x0500

au tout début du code, avant les includes. Ca marche bien et c'est plus facile.
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
15 avril 2005 à 02:04
alors la c pas koi dire mais chez moi ca marche pas :s
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2005 à 09:43
Faudrait que tu vérifies dans les fichiers de VC++ si la fonction est déclarée sinon faut installer le dernier service pack de VC++.

ciao...
BruNews, MVP VC++
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
15 avril 2005 à 12:38
exactement il est pas declaré mais peut tu me filler un lien vers le dernier pack stp ,,?

MERCI d'avance
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2005 à 13:41
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
15 avril 2005 à 13:43
thx ^^
0
T_Mehdi Messages postés 294 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 24 juillet 2015
16 avril 2005 à 17:54
apres avoir telecharger le pack ca marche pas encore ni sur mon pc ni sur celui de mon prof
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 avril 2005 à 16:48
SetLayeredWindowAttributes() est définie dans le fichier winuser.h
avec toutes les constantes nécessaires. Le mien date du 26 Mars 2003.
Vérifies donc le tien dans le dossier include de VC6.



Si tu préfères ta première solution voici comment faire:



//Définition des constantes en global:

#define WS_EX_LAYERED 0x00080000

#define LWA_COLORKEY 0x00000001

#define LWA_ALPHA 0x00000002

//Définition du type de pointeur pour notre API:

typedef BOOL (WINAPI *PFonction)(HWND, COLORREF , BYTE , DWORD );

PFonction SetLayeredWindowAttributes;



Dans la fonction WinMain tu fais:

int WINAPI WinMain (.......)

{

//.....

HMODULE hUser32 = GetModuleHandle("USER32.DLL");


SetLayeredWindowAttributes = (PFonction)
GetProcAddress(hUser32, "SetLayeredWindowAttributes");

//....

}



Je pense que tu vais oublié de définir le type de pointeur de fonction. Voila, ça devrait aller.
0
Rejoignez-nous