Comment gérer un curseur avec 2 versions : N&B et 32 bits ?

Comment gérer un curseur avec 2 versions : N&B et 32 bits ? - C++ - Programmation

Marsh Posté le 01-09-2006 à 16:43:55    

Bonjour,
 
Je développe un logiciel Win32 en C++ (avec MFC) et j'ai besoin d'y inclure un joli curseur de souris symbolisant la rotation.
 
Avec un petit shareware, j'ai créé un fichier cursor1.cur contenant en 2 versions différentes :
- La première version N&B est compatible avec toutes les versions de Windows
- La 2ème version, en 32 bits (avec alpha channel pour donner de l'ombre à mon curseur), n'est compatible qu'avec XP donc je ne peux pas me permettre de ne garder que la version avec alpha channel car il faut que mon prog (professionnel) fonctionne aussi sous Windows 2000.
 
J'ai rajouté ce fichier dans mes ressources en tant que IDC_CURSOR_ROTATION et je le charge donc avec :
m_CursorRotation = theApp.LoadCursor(IDC_CURSOR_ROTATION);
Et je fais appel à SetCursor(m_CursorRotation); lorsque je souhaite l'afficher.
 
Pour info : l'éditeur de ressources reconnait bien mes 2 versions donc le shareware a bien créé un fichier valide.
 
http://img131.imageshack.us/img131/1598/curseurwh5.gif
 
Le problème, c'est que ça m'affiche la version N&B même si je suis sous XP et je n'ai trouvé aucune fonction permettant d'indiquer quelle version choisir parmi les 2 incluses dans le fichier ".CUR".
 
Enfin, je me dis qu'il existe peut-être une option pour que Windows XP rajoute tout seul l'ombre à un curseur N&B afin d'éviter aux gens comme moi de s'embêter à dessiner une ombre sur l'alpha channel et de faire un curseur en 2 versions.
 
Donc connaissez-vous un moyen pour me permettre d'afficher mon curseur personnalisé avec son ombre sous XP et en N&B sous Windows 2000 et versions antérieures ?
Merci. :jap:


Message édité par xman le 01-09-2006 à 16:49:08
Reply

Marsh Posté le 01-09-2006 à 16:43:55   

Reply

Marsh Posté le 03-09-2006 à 01:49:23    

Personne n'a jamais essayé d'employer des curseurs de souris personnalisés incluant une ombre ? :??:

Reply

Marsh Posté le 03-09-2006 à 06:03:23    

Salut.
 
Comme ça, je dirai que ça peut venir de l'absence du fichier manifest dans les ressources (sans oublier l'appel à InitCommonControls). Enfin, c'est une simple supposition.
 
Car dans la MSDN, c'est bien précisé que LoadCursor sélectionne l'image la mieux adaptée au périphérique d'affichage.
A moins que ton affichage ne soit pas en 32 bits. :)

Reply

Marsh Posté le 03-09-2006 à 15:42:43    

Ah merci, je zieuterai ça demain.
Mon affichage est bien en 32bits (d'ailleurs les curseurs standard comme la flèche par défaut ont bien leur ombre) mais je ne crois pas faire appel à InitCommonControls ni jamais m'être préoccupé du fichier manifest.
 
J'espère que ce n'est pas parce que j'utilise VC++6.0 qui commence à dater.

Reply

Marsh Posté le 04-09-2006 à 13:10:59    

prends un outil d'édition d'icône/curseur.
 
tu dessines le curseur en 32bits, il te fera les versions dégradées pour toi.

Reply

Marsh Posté le 04-09-2006 à 22:19:18    

Pour ce qui est de le dessiner, c'est ce que j'ai fait. :)
Je vous ai pas mis de capture parce que VC++ 6.0 est trop moisi pour connaître les curseurs pour Windows XP et il l'affiche mal.
Mais si je lui file un fichier avec juste la version 32 bits, il l'affiche toujours mal dans VC++6.0 mais une fois compilé le curseur s'affiche bien comme je veux dans mon prog.
Mais si je lui file un fichier incluant les 2 versions, c'est la version mono qui est choisie. :(
 
Bon sinon aujourd'hui j'ai regardé un peu plus en détail et InitCommonControls ou plutôt InitCommonControlsEx n'a pas l'air de faire grand chose. Et pour le manifest, j'ai pas trop capté quoi faire avec.
 
On devrait prochainement passer à Visual Studio .NET alors j'espère que ça arrangera les choses. En attendant, c'est pas un drame si le curseur n'a pas d'ombre, y'a d'autres priorités sur notre soft. ^^


Message édité par xman le 04-09-2006 à 22:19:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed