Dessiner un rectangle de fond transparent (2 pb)
Bonjour,
Bon, j'en peux plus, j'y arrive pas!
J'ai une image affichée par OnDraw dans la vue et je veux dessiner par dessus un rectangle de sélection (il se crée en pointillés et au relachement de la souris passe en trais pleins).
1°/ Je cherche dans la doc depuis un bon moment mais je ne trouve pas de moyen de créér un pinceau transparent pour le fond.
2°/ Si je dessine le rectangle dans OnDraw, je ne vois pas le style de crayon que j'ai demandé (j'avais avant dessiné le rectangle dans OnMouseMove en créant/sélectionnant le crayon , dessinant le rectangle, et déselectionnat/détruisant le crayon, ce qui a mon avis était pas génial).
Et voilà le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void CMyProjectView::OnLButtonDown(UINT nFlags, CPoint point)
{
if(!m_ImgView)
return;
m_StartPoint = point;
m_hpNew = CreatePen(PS_DOT, 1, RGB(0,255,0));
m_hpOld = (HPEN)SelectObject(GetDC()->m_hDC,m_hpNew);
//m_hbrNew = CreateSolidBrush(!!!!!!!!Transparent!!!!!!!!); //pour l'instant il est blanc, ça me va pas
//m_hbrOld =(HBRUSH)SelectObject(hDC,m_hbrNew);
m_bDrawRect = true;
CView::OnLButtonDown(nFlags, point);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| void CMyProjectView::OnMouseMove(UINT nFlags, CPoint point)
{
if(!m_ImgView)
return;
//** Position de la souris
int xCursor = point.x;
int yCursor = point.y;
//** Si le bouton est enfoncé, on change le point final du rectangle.
if((GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0)
{
m_EndPoint.x = xCursor;
m_EndPoint.y = yCursor;
//** Redessine l'image avec le nouveau rectangle
OnDraw(GetDC());
}
CView::OnMouseMove(nFlags, point);
} |
Code:
1 2 3 4 5 6 7
| void CMyProjectView::OnDraw(CDC* pDC)
{
//...
if(m_bDrawRect)
Rectangle(pDC->m_hDC, m_StartPoint.x, m_StartPoint.y, m_EndPoint.x, m_EndPoint.y);
} |
Code:
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 CMyProjectView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_EndPoint = point;
CDC* pDC = GetDC();
HDC hDC = GetDC()->m_hDC;
//** Changement de style de crayon (plein et épais)
SelectObject(hDC,m_hpOld);
DeleteObject(m_hpNew);
m_hpNew = CreatePen(PS_SOLID, 2, RGB(0,255,0));
m_hpOld = (HPEN)SelectObject(hDC,m_hpNew);
OnDraw(pDC);
//** On se débarasse visuellement du rectangle en cliquant sans déplacer
if(m_EndPoint==m_StartPoint)
{
//SelectObject(hDC,m_m_hbrOld);
//DeleteObject(m_hbrNew);
SelectObject(hDC,m_hpOld);
DeleteObject(m_hpNew);
m_bDrawRect = false;
}
CView::OnLButtonUp(nFlags, point);
} |