Design de fenêtre et autre.

Le
Maxime
Bonjour à tous,

Je suis actuellement en train de développer une GUI à base de l'API
WIN32. Et je suis confronté à plusieurs problèmes :

1-Je n'arrive pas à trouver une bibliothèque permettant d'afficher les
bmp ET les jpgs, tga, gif (éventuellement les lire) et images de ce
genre;
2-Je n'arrive pas à faire fonctionner l'implémentation des fonctions
de retournement d'images, en bref, de modifications d'images;
3-Je n'arrive pas à trouver une fonction permettant de changer le
design d'une fenêtre, à savoir par exemple son fond, actuellement elle
ressemble à une fenêtre Windows95;
4-Je n'arrive pas non plus à trouver de fonction permettant de changer
le design d'un bouton, ils font plus du type de Windows95
actuellement;
5-Dans mon switch qui analyse les messages provenant de l'utilisateur,
lorsque je fais plusieurs if pour savoir -via le lParam- de quel
bouton vient le message, il ne se passe rien;
6-Je n'arrive pas non plus à faire fonctionner les TreeView, notamment
à cause de ressources manquantes pour les images (plus, moins,
dossier).

Je sais que je demande beaucoup et qu'une seule personne ne saura pas
nécessairement répondre à toutes mes questions, mais merci à tous c=
eux
qui voudront bien apporter leur pierre ;).
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #20550451
On 13 nov, 21:08, Maxime
1-Je n'arrive pas à trouver une bibliothèque permettant d'afficher le s
bmp ET les jpgs, tga, gif (éventuellement les lire) et images de ce
genre;



GDI+ gère tout.
Il y a d'autres méthodes classiques comme OleLoadPicture() (KB218972)
ou par le Shell

3-Je n'arrive pas à trouver une fonction permettant de changer le
design d'une fenêtre, à savoir par exemple son fond, actuellement ell e
ressemble à une fenêtre Windows95;
4-Je n'arrive pas non plus à trouver de fonction permettant de changer
le design d'un bouton, ils font plus du type de Windows95
actuellement;



Il faut utiliser un Manifest :
http://msdn.microsoft.com/en-us/library/ms997646.aspx

6-Je n'arrive pas non plus à faire fonctionner les TreeView, notamment
à cause de ressources manquantes pour les images (plus, moins,
dossier...).



Pas très clair, comme la 5....
Les TreeViews sont bien détaillés dans MSDN :
http://msdn.microsoft.com/en-us/library/bb773409(VS.85).aspx
ou Control Spy pour tous les C.Controls
Maxime
Le #20550591
On 13 nov, 21:43, Christian ASTOR
On 13 nov, 21:08, Maxime
> 1-Je n'arrive pas à trouver une bibliothèque permettant d'afficher les
> bmp ET les jpgs, tga, gif (éventuellement les lire) et images de ce
> genre;

GDI+ gère tout.
Il y a d'autres méthodes classiques comme OleLoadPicture()  (KB218972 )
ou par le Shell

> 3-Je n'arrive pas à trouver une fonction permettant de changer le
> design d'une fenêtre, à savoir par exemple son fond, actuellement e lle
> ressemble à une fenêtre Windows95;
> 4-Je n'arrive pas non plus à trouver de fonction permettant de change r
> le design d'un bouton, ils font plus du type de Windows95
> actuellement;

Il faut utiliser un Manifest :http://msdn.microsoft.com/en-us/library/ms9 97646.aspx

> 6-Je n'arrive pas non plus à faire fonctionner les TreeView, notammen t
> à cause de ressources manquantes pour les images (plus, moins,
> dossier...).

Pas très clair, comme la 5....
Les TreeViews sont bien détaillés dans  MSDN :http://msdn.microsoft .com/en-us/library/bb773409(VS.85).aspx
ou Control Spy pour tous les C.Controls



1-Mais GDI+ est quelque chose d'en dehors de l'API WIN32, non?
3- et 4-Celà me parait un peu compliqué.... saurais-tu me l'expliquer?
6-Les ressources manquantes sont les images de plus et de moins lors
de la navigation les dossiers, de même que l'image de dossier est pour
représenter les dossiers lors de la navigation dans le TreeView, il
manque ces images et il faudrait faire un fichier resources, mais je
ne sais pas comment le faire. De plus, je me suis initié aux TreeView
avec msdn, et je n'y ai donc pas trouvé mon bonheur, même en copiant/
collant leur code.
5-Il s'agit de :

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM
wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the
message queue */
break;
case WM_COMMAND:
if (BN_CLICKED && (GET_LPARAM(BN_CLICKED, lParam) ==
HwndButtonUpdate))
{
miseajour();
}
if (BN_CLICKED && (GET_LPARAM(BN_CLICKED, lParam) ==
HwndButtonEmpty))
{
printf("You crazy!");
}
if (BN_CLICKED && (GET_LPARAM(BN_CLICKED, lParam) ==
HwndButtonCredits))
{
// CreateWindowEx(0, szClassName, "Familly Shorter",
WS_OVERLAPPEDWINDOW, 50, 50, 50, 200, HWND_DESKTOP, NULL,
hThisInstance, NULL);
}
if (BN_CLICKED && (GET_LPARAM(BN_CLICKED, lParam) ==
HwndButtonExit))
{
PostQuitMessage (0);
}
break;
default: /* for messages that we don't
deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

Merci pour les réponses que tu m'a déjà données.
Maxime
Le #20550741
P.S. : Je suis sous Vista.
Christian ASTOR
Le #20553731
On 13 nov, 22:20, Maxime
1-Mais GDI+ est quelque chose d'en dehors de l'API WIN32, non?



Non, c'est inclus en natif (l'Explorer l'utilise souvent..)
http://msdn.microsoft.com/en-us/library/ms533802(VS.85).aspx

3- et 4-Celà me parait un peu compliqué.... saurais-tu me l'expliquer ?



Il n'y a quasiment rien à faire : juste les étapes 1, 2 et 3 de
"To create a manifest and enable your application to use visual
styles."
pour créer le fichier NomApp.exe.manifest comme indiqué, dans le
répertoire de l'exécutable, si on ne veut pas le mettre en ressources.

6-Les ressources manquantes sont les images de plus et de moins lors de l a navigation les dossiers, de même que l'image de dossier est pour repr ésenter les dossiers lors de la navigation



Toutes ces ressources sont incluses dans Windows, notamment par
l'ImageList Système qu'on récupère par SHGetFileInfo()
Mais pour le +/-, c'est automatique par le style TVS_HASBUTTONS

5-Il s'agit de :
        case WM_COMMAND:
            if (BN_CLICKED && (GET_LPARAM(BN_CLICKED, lParam)



Il faut faire :

if (HIWORD (wParam) == BN_CLICKED)
{
//....
}
Maxime
Le #20555241
On 14 nov, 12:49, Christian ASTOR
On 13 nov, 22:20, Maxime
> 1-Mais GDI+ est quelque chose d'en dehors de l'API WIN32, non?

Non, c'est inclus en natif (l'Explorer l'utilise souvent..)http://msdn.mi crosoft.com/en-us/library/ms533802(VS.85).aspx

> 3- et 4-Celà me parait un peu compliqué.... saurais-tu me l'expliqu er?

Il n'y a quasiment rien à faire : juste les étapes 1, 2 et 3 de
"To create a manifest and enable your application to use visual
styles."
pour créer le fichier NomApp.exe.manifest comme indiqué, dans le
répertoire de l'exécutable, si on ne veut pas le mettre en ressources .

> 6-Les ressources manquantes sont les images de plus et de moins lors de la navigation les dossiers, de même que l'image de dossier est pour repr ésenter les dossiers lors de la navigation

Toutes ces ressources sont incluses dans Windows, notamment par
l'ImageList Système qu'on récupère par SHGetFileInfo()
Mais pour le +/-, c'est automatique par le style TVS_HASBUTTONS




Hum... comment linker à la librairie et utiliser InitCommonControls()?

De plus, j'utilise ImageList, mais il me renvoie le problème susdit :

/*BOOL InitTreeViewImageLists(HWND hwndTV)
{
HIMAGELIST himl; // handle to image list
HBITMAP hbmp; // handle to bitmap

// Create the image list.
if ((himl = ImageList_Create(CX_BITMAP,
CY_BITMAP,
FALSE,
NUM_BITMAPS, 0)) == NULL)
return FALSE;

// Add the open file, closed file, and document bitmaps.
hbmp = LoadBitmap(hinst, MAKEINTRESOURCE(IDB_OPEN_FILE));
g_nOpen = ImageList_Add(himl, hbmp, (HBITMAP)NULL);
DeleteObject(hbmp);

hbmp = LoadBitmap(hinst, MAKEINTRESOURCE(IDB_CLOSED_FILE));
g_nClosed = ImageList_Add(himl, hbmp, (HBITMAP)NULL);
DeleteObject(hbmp);

hbmp = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_DOCUMENT));
g_nDocument = ImageList_Add(himl, hbmp, (HBITMAP)NULL);
DeleteObject(hbmp);

// Fail if not all of the images were added.
if (ImageList_GetImageCount(himl) < 3)
return FALSE;

// Associate the image list with the tree-view control.
TreeView_SetImageList(hwndTV, himl, TVSIL_NORMAL);

return TRUE;
}
Christian ASTOR
Le #20556041
On 14 nov, 16:55, Maxime
Hum... comment linker à la librairie et utiliser InitCommonControls()?
De plus, j'utilise ImageList, mais il me renvoie le problème susdit



Non, c'est la System ImageList, récupérée par SHGetFileInfo()
Voir l'exemple du SDK EnumDesk.cpp (..SamplesWinUIShellEnumDesk)
qui fait exactement ça (un Explorer avec TreeView et ListView)
Maxime
Le #20559951
Je n'arrive pas à utliser le manifest, il dit qu'il y a une erreur
avant LPSTR :

InitCommonControlsEx();
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "Familly
Shorter.exe.manifest";

HWND HwndButtonUpdate, HwndButtonEmpty, HwndButtonHelp,
HwndButtonExit, HwndButtonCredits, HwndButtonReload, HwndButtonCreate,
HwndButtonSuppress, HwndButtonBackup;
HWND HwndTreeView;
HINSTANCE hinst;

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//La fonction créant la fenêtre principale vient après... Dois-je
mettre la déclaration de manifest dedans? Qui plus est, est-il
nécessaire de remplir les champs dans le manifest? A savoir nom de
l'application et autre...

De plus, que dois-je mettre dans ce cas-là dans InitCommonControlsEx
()? Rien n'est précisé...
Christian ASTOR
Le #20561401
On 15 nov, 15:21, Maxime
Je n'arrive pas à utliser le manifest, il dit qu'il y a une erreur
avant LPSTR :



Mais il ne faut rien mettre dans le code, à part appeler
InitCommonControls(), qui de toute façon devrait déjà y être si l'o n
utilise un des C. Controls.
(RT_MANIFEST , c'est dans le .rc !)
Et comme c'est écrit, on n'a pas besoin de le mettre en ressource :"
Alternatively, you can place the XML manifest file in the same
directory as your application's executable file."
Maxime
Le #20562101
On 15 nov, 19:19, Christian ASTOR
On 15 nov, 15:21, Maxime
> Je n'arrive pas à utliser le manifest, il dit qu'il y a une erreur
> avant LPSTR :

Mais il ne faut rien mettre dans le code, à part appeler
InitCommonControls(), qui de toute façon devrait déjà y être si l 'on
utilise un des  C. Controls.
(RT_MANIFEST , c'est dans le .rc !)
Et comme c'est écrit, on n'a pas besoin de le mettre en ressource :"
Alternatively, you can place the XML manifest file in the same
directory as your application's executable file."



Merci, le manifest marche parfaitement maintenant!

Néanmoins, j'aurais besoin de changer la couleur de fond de la
fenêtre. Sais-tu comment faire?

De plus, je n'ai pas bien compris ce que tu m'a dit au sujet des
messages avec le HIWORD; comment saurais-je qui plus est de quel
bouton vient le message? Mon code marchais bien avec un bouton, il
exécutait les instructions, mais avec plusieurs boutons rien ne se
passe.
Maxime
Le #20562221
Qui plus est, il me dit que le bouton de type BS_SPLITBUTTON lui est
inconnu. Un include particulier?
Publicité
Poster une réponse
Anonyme