Bonjour
je ne comprend pas trop ce qui se passe. Je cherche à apposer une bItmap sur une ressource CStatic. Je crée ma ressoruce de cette manière:
Quand on clique sur mon CStatic, une boite de Dialogue s'ouvre. Je cherche à charger l'image que je choisis via CFileDialog
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CWnd *wndObject = new CCtrlStaticVis(); ((CCtrlStaticVis*)wndObject)->Create( GetLabel(), WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE|SS_NOTIFY, GetPlacement(), parent, GetTag()); SetCtrlObject(wndObject);
L'image à charger écrite en dur "C:\\image2.bmp" s'affiche.(avec hBitmap1 mies en comentaire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void CCtrlStaticVis::OnStnClicked() { CString OpenFilter; HBITMAP hBitmap; OpenFilter = "(*.bmp)|*.bmp|"; OpenFilter += "(*.png)|*.png||"; CFileDialog fileOpenDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, OpenFilter, this); bool iRet = fileOpenDialog.DoModal(); if(iRet==IDOK) { CFile File; VERIFY(File.Open(fileOpenDialog.GetPathName(),CFile::modeRead)); //m_fileToLoad = fileOpenDialog.GetPathName(); m_fileToLoad = fileOpenDialog.GetPathName(); SetBitmap(m_fileToLoad); } RedrawWindow(); }
La même image récupérée via un CFileDialog provoque un crash, hBitmap mal initialisé (0x00000000)(avec hBitmap mise en comentaire)
Et le truc aussi, c'est que lorsque je charge l'image "C:\\image2.bmp", hBitmap et hBitmap1 sont mal instanciés (0x00000000). Par contre, lorsque je charge une image autre que "C:\\image2.bmp", elle apprait bien dans le CStatic!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void CCtrlStaticVis::SetBitmap(CString strBitmap) { m_sBitmap = strBitmap; // CString bSlash = "\\"; CString dbSlash = "\\\\"; m_sBitmap.Replace(bSlash,dbSlash); HBITMAP hBitmap = (HBITMAP) ::LoadImage(NULL,//AfxGetInstanceHandle(), (LPCTSTR)"C:\\image2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE); HBITMAP hBitmap1 = (HBITMAP) ::LoadImage(NULL,//AfxGetInstanceHandle(), m_sBitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE); // Do we have a valid handle for the loaded image? if (hBitmap) { // Delete the current bitmap if (m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach(); // If there was a bitmap, detach it // Attach the currently loaded bitmap to the bitmap object m_bmpBitmap.Attach(hBitmap); } m_bmpBitmap.GetBitmap(&bm); //Get Bitmap Structure Invalidate(); }
Je ne comprend pas ce qui se passe.
Merci
Partager