Salut a tous,
j'ai une appli MFC avec des CBitmapButton. Ces CBitmapButton ont un fond gris mais suivant le theme de bureau de pc le fond se voit.
Alors ma question est comment faire que ce fond soit transparent ?
Merci
Salut a tous,
j'ai une appli MFC avec des CBitmapButton. Ces CBitmapButton ont un fond gris mais suivant le theme de bureau de pc le fond se voit.
Alors ma question est comment faire que ce fond soit transparent ?
Merci
Bonjour,
J'ai trouvé ça en faisant une recherche : http://www.developpez.net/forums/showthread.php?t=94819.
Tu devrais trouver réponse à ta question.
J'ai essayé mais ca me marche pas....
Ca me marque que transparentBitmapButton n'a pas de contructeur.
j'essaye d'utiliser le code que FireJoker a donné en lien pour mettre un arrière plan transparent sur un CbitmapButton.
Quand je l'utilise, je remplace
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part CBitmapButton Image;
et le compilo gueule et me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part CTransparentBitmapButton Image;
La reponse est assez explicite mais comment utiliser ce code alors ? parce qu'il est censé marcher
Code : Sélectionner tout - Visualiser dans une fenêtre à part error C2512: 'CTransparentBitmapButton' : aucun constructeur par défaut approprié disponible
Je ne connais pas du tout cette classe CTransparentBitmapButton proposée par Firejocker, mais as-tu essayé de rajouter un constructeur par défaut à cette classe, qui ne ferait rien d'autre qu'appeler le constructeur par défaut de la classe mère CBitmapButton ?
Car de toute façon, à moins que tu construises tes boutons sans utiliser les ressources, ce n'est pas le constructeur qui compte mais la méthode PreSubclassWindow.
Et il est public ?
Tu n'as pas oublié l'include de TransparentBitmapButton.h ?
Sinon, je ne vois pas d'où ce message d'erreur peut venir...
malheureusement pour moi, oui il est public et j'ai bien inclus le header
J'espere que FireJoker va me repondre ...
Si par hasard tu as mis la classe CTransparentBitmapButton dans une dll distincte de ton projet, il ne faut pas oublier de l'exporter...
Code : Sélectionner tout - Visualiser dans une fenêtre à part class __declspec(dllexport) CTransparentBitmapButton : public CBitmapButton
Est ce qu'il ne manque pas dans le constructeur de la classe contenant CTransparentBitmapButton Image;
un appel au constructeur CTransparentBitmapButton ?
Bon alors un collegue ma donné la reponse.
Alors ....
1/ ButtonTransparent.h
2/ dans XXXdlg.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #ifdef BUTTONBAR_IMPLEMENT HBITMAP __declspec(dllexport) CreateGrayScaleBitmap(HDC hDC, HBITMAP hBmp); DWORD __declspec(dllexport) DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, BITMAP *pbm, long xStart, long yStart, COLORREF *pcTransparentColor = NULL); #else HBITMAP __declspec(dllimport) CreateGrayScaleBitmap(HDC hDC, HBITMAP hBmp); DWORD __declspec(dllimport) DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, BITMAP *pbm, long xStart, long yStart, COLORREF *pcTransparentColor = NULL); #endif #endif
Voila, merci de votre aide a tous
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
28
29
30
31
32 #include "ButtonTransparent.h" CButtonTranparent::CButtonTranparent(UINT uiBmp) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_bmp.Attach(::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uiBmp), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADMAP3DCOLORS)); m_bmp.GetBitmap(&m_bitmap); } /*virtual*/ CButtonTranparent::~CButtonTranparent() { } /*virtual*/ void CButtonTranparent::DrawItem(LPDRAWITEMSTRUCT lpDIS) { CDC *pDC = GetDC(); HBITMAP hBitmap = (HBITMAP)m_bmp.m_hObject; BITMAP *pbmp = &m_bitmap; DrawTransparentBitmap(pDC->m_hDC, hBitmap, pbmp, 0, 0); ReleaseDC(pDC); } // et enfin l'appel pour avoir ce bt transparent et ayant bien sur auparavent mis notre image "IDBIMAGE" dans les resoureces et lui avoir attribué la variable "IDC_image" XXXDlg::XXXDlg(CWnd* pParent) : CDialog(XXXDlg::IDD, pParent), IDC_image(IDB_IMAGE) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
Partager