divadav
Messages postés94Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention22 janvier 2009
-
19 oct. 2005 à 12:05
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
20 oct. 2005 à 09:27
Hello tout le monde !!
Voilà, je suis plutôt un développeur Delphi, mais vu que je reprends une formation cette année, je me replonge dans le C/C++. Et on en profite pour apprendre à utiliser Eclipse !!
Donc, mon environnement de dev est le suivant :
- Windows XP ou Windows 2000
- Plateforme Eclipse
- Compilateur MinGW
Et maintenant, mon problème :
Je cherche à mapper un ancien projet fait sous Borland C++ 5.0 vers MinGW... J'ai déjà réussi à créer le bon makefile, changer deux ou trois petites choses, et au final, la plupart du code marche bien... Il ne me reste qu'un seul problème :
Sous MinGW, la fonction TransparentBlt() ne fonctionne pas. En fait, dans <wingdi.h>, elle n'est déclarée que si la variable WINVER >= 0x0500, ce qui n'est apparemment pas le cas sous Windows XP... Alors que je lis partout que cette fonction n'est pas compatible avec Win 95/98/NT4 uniquement !
Quelqu'un aurait une idée pour régler ça ? Ou au pire, recréer une fonction correspondant en se basant sur BitBlt avec un masque XOR...
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 19 oct. 2005 à 12:53
Fait simplement
#define WINVER 0x0500 avant d'inclure <windows.h> et cela rendra disponible la fonction.
=> ton code sera alors valide pour W2K et XP.
Ce define permet de limiter des fonctionnalités à la compilation. A l'exécution, tu peut toujours faire un GetVersionEx pour signaler la version min qu'il faut
divadav
Messages postés94Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention22 janvier 20092 19 oct. 2005 à 15:17
Merci bcp pour cette réponse... La technique fonctionne bien !
Malgré tout, je me suis plutôt tourné vers la redéfinition de la fonction : je préfère ne pas trop modifier les variables globales gérées par le compilo !!
Pour régler mon problème, j'ai trouvé une fonction nommé TransparentBltU( ), qui fonctionne avec les mêmes arguments, et qui est également compatible Win 95/98/NT4 !
Pour info, voici la fonction :
bool TransparentBltU(HDC dcDest, int nXOriginDest, int nYOriginDest,
int nWidthDest, int nHeightDest, HDC dcSrc, int nXOriginSrc, int nYOriginSrc,
int nWidthSrc, int nHeightSrc, UINT crTransparent )
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 20 oct. 2005 à 09:27
Il n'y a aucun risque à définir des variables de version avant d'inclure des headers. Cela permet d'activer ou désactiver des fonctionnalités. Après tout dépend de la cible min de ton prog. Tu peux également faire un test de la version de Windows pour savoir quelle fonction appeler (celle de l'API, sans doute optimisée ou la version compatible que tu as donné pour les systèmes dépourvus de la fonction de l'API).