Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Design de fenêtre et autre.

30 réponses
Avatar
Maxime
Bonjour =E0 tous,

Je suis actuellement en train de d=E9velopper une GUI =E0 base de l'API
WIN32. Et je suis confront=E9 =E0 plusieurs probl=E8mes :

1-Je n'arrive pas =E0 trouver une biblioth=E8que permettant d'afficher les
bmp ET les jpgs, tga, gif (=E9ventuellement les lire) et images de ce
genre;
2-Je n'arrive pas =E0 faire fonctionner l'impl=E9mentation des fonctions
de retournement d'images, ... en bref, de modifications d'images;
3-Je n'arrive pas =E0 trouver une fonction permettant de changer le
design d'une fen=EAtre, =E0 savoir par exemple son fond, actuellement elle
ressemble =E0 une fen=EAtre Windows95;
4-Je n'arrive pas non plus =E0 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 =E0 faire fonctionner les TreeView, notamment
=E0 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=E9cessairement r=E9pondre =E0 toutes mes questions, mais merci =E0 tous c=
eux
qui voudront bien apporter leur pierre ;).

10 réponses

1 2 3
Avatar
Christian ASTOR
On 13 nov, 21:08, Maxime wrote:

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
Avatar
Maxime
On 13 nov, 21:43, Christian ASTOR wrote:
On 13 nov, 21:08, Maxime wrote:

> 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.
Avatar
Maxime
P.S. : Je suis sous Vista.
Avatar
Christian ASTOR
On 13 nov, 22:20, Maxime wrote:

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)
{
//....
}
Avatar
Maxime
On 14 nov, 12:49, Christian ASTOR wrote:
On 13 nov, 22:20, Maxime wrote:

> 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;
}
Avatar
Christian ASTOR
On 14 nov, 16:55, Maxime wrote:
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)
Avatar
Maxime
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é...
Avatar
Christian ASTOR
On 15 nov, 15:21, Maxime wrote:
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."
Avatar
Maxime
On 15 nov, 19:19, Christian ASTOR wrote:
On 15 nov, 15:21, Maxime wrote:

> 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.
Avatar
Maxime
Qui plus est, il me dit que le bouton de type BS_SPLITBUTTON lui est
inconnu. Un include particulier?
1 2 3