Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
AFFICHAGE D'IMAGES JPG AVEC IPICTURE EN C
Information sur la source
Description
A la demande de BruNews, et en réponse à une question du forum, voici un petit code source en C montrant comment afficher une image JPG en utilisant l'interface COM IPicture.
Source
- #include <windows.h>
- #include <olectl.h>
-
- // Variables globales:
- char chemin[260];
- WNDPROC OldStaticProc;
-
- // Fonction d'affichage de l'image JPG:
- void AfficheImage(char* path, HWND hwndcible)
- {
- // Variables:
- IPicture* pic;
- HRESULT hres;
- HDC hdc;
- RECT rect;
- int hauteur, largeur;
- WCHAR wpath[260];
- // Convertir le chemin en UNICODE:
- MultiByteToWideChar(0,0,path,-1,wpath,260);
- // Ouverture de l'image:
- hres = OleLoadPicturePath(wpath, 0,0, 0, &IID_IPicture, (void**)&pic);
- // Obtenir le HDC du controle cible:
- hdc=GetDC(hwndcible);
- // Obtenir la zone cliente du controle cible:
- GetClientRect(hwndcible,&rect);
- // Obtenir la largeur et la hauteur de l'image:
- hres=pic->lpVtbl->get_Width(pic,&largeur);
- hres=pic->lpVtbl->get_Height(pic,&hauteur);
- // Afficher l'image:
- hres=pic->lpVtbl->Render(pic,hdc,0,0,rect.right,rect.bottom,0,hauteur,largeur,-hauteur,0);
- // Libérer le HDC du controle cible:
- ReleaseDC(hwndcible,hdc);
- //Libérer l'interface IPicture:
- pic->lpVtbl->Release(pic);
- }
-
- // Procédure de sous-classement de notre Static:
- LRESULT WINAPI StaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- // Traitement du message WM_PAINT:
- if(message==WM_PAINT)
- {
- PAINTSTRUCT ps;
- BeginPaint(hwnd,&ps);
- // Appeler la fonction d'affichage de l'image:
- AfficheImage(chemin,hwnd);
- EndPaint(hwnd,&ps);
- return 0;
- }
- // Appeler la procédure par défaut des Statics:
- return CallWindowProc(OldStaticProc, hwnd, message, wParam, lParam);
- }
-
- // Procédure de notre boite de dialogue:
- BOOL WINAPI DialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
- {
- // Variables:
- static HWND hStatic,hQuitter;
-
- switch(message)
- {
- case WM_INITDIALOG:
- // Former le chemin complet de l'image:
- GetCurrentDirectory(260,chemin);
- lstrcat(chemin,"\\image.jpg");
- // Donner un titre à la boite de dialogue:
- SetWindowText(hDlg,"Affichage d'images JPG avec IPicture");
- // Créer les controles:
- hQuitter=CreateWindow("BUTTON","Quitter",WS_VISIBLE | WS_CHILD ,424,130,60,20,hDlg,0,0,0);
- hStatic=CreateWindowEx(0,"STATIC","",WS_VISIBLE | WS_CHILD | SS_SUNKEN,10,10,400,260,hDlg,0,0,0);
- // Sous-classer le Static:
- OldStaticProc=(WNDPROC)SetWindowLong(hStatic,GWL_WNDPROC,(LONG)StaticProc);
- // Changer la police du bouton "Quitter":
- SendMessage(hQuitter,WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
- break;
-
- case WM_COMMAND:
- // Fermer la boite de dialogue si clic sur "Quitter":
- if((HWND)lParam==hQuitter) EndDialog(hDlg,0);
- break;
-
- case WM_CLOSE:
- // Fermer la boite de dialogue:
- EndDialog(hDlg,0);
- break;
-
- default:
- break;
- }
- return 0;
- }
-
- int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
- {
- // Déclaration d'une structure DLGTEMPLATE:
- LPDLGTEMPLATE lpdt;
- // Initialiser la librairie COM pour notre application:
- CoInitialize(0);
- // Allouer de la mémoire pour notre structure DLGTEMPLATE:
- lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
- if (!lpdt) return 1;
- // Définir les styles et les dimensions de la boite de dialogue:
- lpdt->style = WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER ;
- lpdt->x = 0; lpdt->y = 0; lpdt->cx =250; lpdt->cy = 152;
- // Lancer la boite de dialogue:
- DialogBoxIndirectParam(0,lpdt,0,(DLGPROC)DialogProc,(LPARAM) 0);
- // Libérer la mémoire allouée pour notre structure DLGTEMPLATE:
- GlobalFree((HGLOBAL) lpdt);
- // Libérer la librairie COM:
- CoUninitialize();
- return 0;
- }
#include <windows.h>
#include <olectl.h>
// Variables globales:
char chemin[260];
WNDPROC OldStaticProc;
// Fonction d'affichage de l'image JPG:
void AfficheImage(char* path, HWND hwndcible)
{
// Variables:
IPicture* pic;
HRESULT hres;
HDC hdc;
RECT rect;
int hauteur, largeur;
WCHAR wpath[260];
// Convertir le chemin en UNICODE:
MultiByteToWideChar(0,0,path,-1,wpath,260);
// Ouverture de l'image:
hres = OleLoadPicturePath(wpath, 0,0, 0, &IID_IPicture, (void**)&pic);
// Obtenir le HDC du controle cible:
hdc=GetDC(hwndcible);
// Obtenir la zone cliente du controle cible:
GetClientRect(hwndcible,&rect);
// Obtenir la largeur et la hauteur de l'image:
hres=pic->lpVtbl->get_Width(pic,&largeur);
hres=pic->lpVtbl->get_Height(pic,&hauteur);
// Afficher l'image:
hres=pic->lpVtbl->Render(pic,hdc,0,0,rect.right,rect.bottom,0,hauteur,largeur,-hauteur,0);
// Libérer le HDC du controle cible:
ReleaseDC(hwndcible,hdc);
//Libérer l'interface IPicture:
pic->lpVtbl->Release(pic);
}
// Procédure de sous-classement de notre Static:
LRESULT WINAPI StaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// Traitement du message WM_PAINT:
if(message==WM_PAINT)
{
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
// Appeler la fonction d'affichage de l'image:
AfficheImage(chemin,hwnd);
EndPaint(hwnd,&ps);
return 0;
}
// Appeler la procédure par défaut des Statics:
return CallWindowProc(OldStaticProc, hwnd, message, wParam, lParam);
}
// Procédure de notre boite de dialogue:
BOOL WINAPI DialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
// Variables:
static HWND hStatic,hQuitter;
switch(message)
{
case WM_INITDIALOG:
// Former le chemin complet de l'image:
GetCurrentDirectory(260,chemin);
lstrcat(chemin,"\\image.jpg");
// Donner un titre à la boite de dialogue:
SetWindowText(hDlg,"Affichage d'images JPG avec IPicture");
// Créer les controles:
hQuitter=CreateWindow("BUTTON","Quitter",WS_VISIBLE | WS_CHILD ,424,130,60,20,hDlg,0,0,0);
hStatic=CreateWindowEx(0,"STATIC","",WS_VISIBLE | WS_CHILD | SS_SUNKEN,10,10,400,260,hDlg,0,0,0);
// Sous-classer le Static:
OldStaticProc=(WNDPROC)SetWindowLong(hStatic,GWL_WNDPROC,(LONG)StaticProc);
// Changer la police du bouton "Quitter":
SendMessage(hQuitter,WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
break;
case WM_COMMAND:
// Fermer la boite de dialogue si clic sur "Quitter":
if((HWND)lParam==hQuitter) EndDialog(hDlg,0);
break;
case WM_CLOSE:
// Fermer la boite de dialogue:
EndDialog(hDlg,0);
break;
default:
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
{
// Déclaration d'une structure DLGTEMPLATE:
LPDLGTEMPLATE lpdt;
// Initialiser la librairie COM pour notre application:
CoInitialize(0);
// Allouer de la mémoire pour notre structure DLGTEMPLATE:
lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
if (!lpdt) return 1;
// Définir les styles et les dimensions de la boite de dialogue:
lpdt->style = WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER ;
lpdt->x = 0; lpdt->y = 0; lpdt->cx =250; lpdt->cy = 152;
// Lancer la boite de dialogue:
DialogBoxIndirectParam(0,lpdt,0,(DLGPROC)DialogProc,(LPARAM) 0);
// Libérer la mémoire allouée pour notre structure DLGTEMPLATE:
GlobalFree((HGLOBAL) lpdt);
// Libérer la librairie COM:
CoUninitialize();
return 0;
}
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
Téléchargements
Logiciels à télécharger sur le même thème :
|