Bonjour à tous
En fait je souhaite creer une "dialog" aux coins arrondis avec des boutons arrondis (bitmaps).
- Pour la dialog, je n'ai aucun problème tout s'affiche bien (combinaison CreateRoundRectRgn et SetWindowRgn).
- En revanche pour mon boutons perso, j'ai un petit problème, en fait je combine la même technique que pour la dialog,
mon bouton s'affiche alors très bien (coins arrondis) mais si je place une autre fenêtre (un autre programme) sur ma dialog et que je l'enlève de suite alors ma région ne fonctionne plus, mon bouton est redevenu carré.
Voici les partis interessantes du code (VS 6.0) :
- Dans DilogProc :
case WM_INITDIALOG:
// mon bouton
hButton = CreateWindowEx(NULL,Cname,NULL,BS_OWNERDRAW | WS_CHILDWINDOW | WS_VISIBLE,262,56,30,30,Dlg,NULL,hInstance,NULL);
// coins arrondis de la dialog
region = CreateRoundRectRgn(0,0,300,160,19,19);
SetWindowRgn((HWND)Dlg,region,true);
return TRUE;
case WM_DRAWITEM:
lpDrawOwnButton = (LPDRAWITEMSTRUCT)lParam;
switch (lpDrawOwnButton->itemAction) {
case ODA_DRAWENTIRE:
region2 = CreateRoundRectRgn(0,0,300,160,19,19); //ce code ne fonctionne pas lors d'un redessinement
SetWindowRgn(lpDrawOwnButton->ItemHwnd,region2,true); //pourtant j'ai vérifié avec une msgbox que ce code //est bien appelé
DrawButton(lpDrawOwnButton->hDC, lpDrawOwnButton->CtlID); //j'affiche mon bouton ici
- Procédure affichage du boutton
BOOL DrawButton(HDC P_hDC,DWORD P_szBmpName)
{
HDC hBmpDC;
HBITMAP hOldBmp, hBmp,hBmpMask;
BITMAP bm;
GetObject(hBmp, sizeof(BITMAP), (LPSTR)&BmpHdr);
hBmpDC = CreateCompatibleDC(P_hDC);
hOldBmp =(HBITMAP) SelectObject(hBmpDC, hBmp);
BitBlt(P_hDC, 0, 0, BmpHdr.bmWidth, BmpHdr.bmHeight, hBmpDC, 0, 0, SRCCOPY);
SelectObject(hBmpDC, hOldBmp);
DeleteDC(hBmpDC);
DeleteObject(hBmp);
}
Y a t il un autre message à gérer?
Si quelqu'un peut m'aider je le remercie d'avance.