Slt Si je comprends bien tu veux afficher une image (BMP) dans un static. 2 possibilités si tu n'as pas de handle (HBITMAP) sur ton image. utilise la fonction LoadImage qui peut redimensionner toute seul à ta zone d'affichage. char strFilter[] = "MyType Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"; HRESULT hResult; CString Path; //Crée une boite de dialogue d'ouverture de fichier CFileDialog OpenDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter); //Ouvre la boite de dialogue hResult = (int)OpenDlg.DoModal(); if( hResult == IDOK ){ //Récupère le nom du fichier ouvert Path = OpenDlg.GetPathName(); //Recupére le taille de la fenetre d'affichage pour dimensionner l'image a celle ci CRect rectWinAffichage; m_ctrImage.GetWindowRect(rectWinAffiche); //m_ctrImage de type CStatic int iXdesire = rectWinAffichage.Width(); int iYdesire = rectWinAffichage.Height(); //Chargement de l'image dans le handle sur le bitmap HBITMAP hBitmap; //Handle sur un bitmap HINSTANCE hinst = AfxGetInstanceHandle(); hBitmap = (HBITMAP)LoadImage(hinst, Path, IMAGE_BITMAP, iXdesire, iYdesire, LR_LOADFROMFILE); //recupere le bitmap depuis un fichier if( hBitmap == NULL) MessageBox("Erreur lors de l'ouverture du fichier assurez-vous qu'il s'agit bien d'un fichier .BMP", "Erreur d'ouverture",MB_ICONERROR | MB_OK); //Affiche le bitmap ds le control m_ctrImage.SetBitmap(hBitmap ) Ou 2ieme methode si tu as deja un handle sur ton image (hBmpSrc) utilise la fonction StretchBlt() /*Redimensionner l'image */ // Recupere le DC associé au control d'affichage CDC* pcdc = m_ctrImage.GetDC(); HDC hdcDst = pcdc->GetSafeHdc(); // recupere la taille de la zone d'affichage CRect rectWinAffiche; m_ctrImage.GetWindowRect(rectWinAffiche); //Creer un HDC pour l'image source HDC hdcSrc = NULL; hdcSrc = CreateCompatibleDC(hdcDst); SelectObject(hdcSrc,hBmpSrc); //Redimensionne et affiche l'image StretchBlt(hdcDst, 0, 0, rectWinAffiche.Width(), rectWinAffiche.Height(), hdcSrc, 0, 0, /*image.nbColonnes*/, /*image.nbLignes*/, SRCCOPY);
|