Bonjour à tous,
Je ne suis pas un spécialiste du C++ et des MFC et je souhaiterais comprendre ce qui ne va pas dans mon programme.
Je voudrais que celui-ci affiche une image BMP dans un picture box après que l'utilisateur l'ai choisi via une boite de type OpenFileDialog. Ceci ne doit, je pense, pas etre trop difficile à effectuer dans la mesure ou la meme chose en VB ou Csharp est simplissime.
Voici mon code :
void CGestionImageDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
// m_image = nomImage;
// UpdateData(FALSE);
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CGestionImageDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/// Chargement de l'image
void CGestionImageDlg::OnButtonParcour()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
UpdateData(TRUE); // Récup de l'état des autres zones de saisie
// Définition des filtres pour l'ouverture des fichiers
char szFilters[]= "Images Bitmap (*.bmp)|*.bmp,*.BMP|Tout les fichiers (*.*)|*.*||";
// Création de la boite de dialogue d'ouverture de fichiers
CFileDialog dialogOuvrir (TRUE, "", "*.bmp", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
// Affichage de la boite de dialogue
// Affichage du bitmap dans le PictureBox de la feuille
if( dialogOuvrir.DoModal ()==IDOK )
{
CString cheminImage = dialogOuvrir.GetPathName();
// Ouverture et lecture du fichier
// Récupération du handle de l'iamge chargée
CWnd * hWndViewer = this->GetDlgItem(IDC_STATIC_PICTURE);
CDC * dcControlePicture = hWndViewer->GetDC ();
CString nomImage = dialogOuvrir.GetFileName ();
// Chargement du bitmap
HBITMAP hBitmap = (HBITMAP)LoadImage( 0, dialogOuvrir.m_ofn.lpstrFileTitle, IMAGE_BITMAP, 0,0, LR_LOADFROMFILE| LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
// Associer IMAGE au control PictureBox
hWndViewer->SendMessage( STM_SETIMAGE,
(WPARAM) IMAGE_BITMAP,
(LPARAM) hBitmap );
//On change le titre de la feuille avec le nom du Fichier
this->m_cheminImage= dialogOuvrir.m_ofn.lpstrFile;
SetWindowText(nomImage);
UpdateData (FALSE);
}
return;
}
Ceci ne créé aucun messages d'eereur, mais au final l'image ne s'affiche pas. Je pense que mon probleme se situe autour de la fonction LoadImage(...), mais je ne vois pas ou et ceux malgré mes recherches (MSDN, Livres, Forums...)
Si quelqu'un a une idée ou une explication, j'en serais très heureux.
A++ et merci d'avance
Dragoon