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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
HDC hdc = GetDC(NULL) ;
HDC hdcMem = CreateCompatibleDC(NULL) ;
HBITMAP hOldMemBmp = (HBITMAP) SelectObject(hdcMem, m_hBitmap);
RECT rcClip; GetClipBox(hdc, &rcClip);
m_SecondPoint.x = (short) LOWORD(lParam);
m_SecondPoint.y = (short) HIWORD(lParam);
GetClipBox(hdcMem, &rcClip);
ClientToPixel(m_SecondPoint); // Surtout ne pas oublier de convertir en coordonné du dessin
if((GetCapture() == m_hWnd)&&(wParam & MK_LBUTTON))// Si le bouton gauche est enfoncé
{
if(m_pTempElement) //Si un élément temporaire est défini en vue de sa création
{
if(CURVE == this->GetElementType()) // Is it a curve?
{ SetROP2(hdcMem,R2_COPYPEN);
(static_cast<ECurve*>(m_pTempElement))->DrawSegment(hdcMem,m_SecondPoint); // We are drawing a curve
(static_cast<ECurve*>(m_pTempElement))->AddSegment(m_SecondPoint); // so add a segment to the existing curve
goto LibèreDC;
}
m_pTempElement->Draw(hdcMem); // Redraw the old element so it disappears from the view
delete m_pTempElement; // Delete the old element
m_pTempElement = 0; // Reset the pointer to 0
}
m_pTempElement = CreateElement(); // Créer un element mais temporaire tant que l'utilisateur ne lache pas le button pour figer l'élément
m_pTempElement->Draw(hdcMem); // Draw the element
goto LibèreDC;
}
else // Si nous ne dessinons pas alors mise en surbrillance sous le pointeur d'un élément existant
{
VElement* pCurrentSelection = SelectElement(m_SecondPoint);// Existe-t-il un élément sous le pointeur?
if(pCurrentSelection!=m_pSelected) // Si l'élément sous le pointeur est différent que l'ancien élément?(soit l'ancien ou un nouveau)
{ if(m_pSelected) // Si existance de l'ancien élément, est (toujours) de la couleur "surbrillance"
{ m_pSelected->Draw(hdcMem,m_pSelected); // En le dessinant de la couleur surbrillance, Nous effaçons ses pixels (NOTXORPEN)
m_pSelected->Draw(hdcMem); // L'élément est dessiné de sa plume, son épaisseur et sa couleur d'origine
}
m_pSelected = pCurrentSelection; // Save elem under cursor
if(m_pSelected) // Is there one?
{
m_pSelected->Draw(hdcMem);
m_pSelected->Draw(hdcMem,m_pSelected);// Yes, so get it redrawn
SetWindowText(m_hWnd/*this->m_pMainFrame->GetHSelf()*/,tst);
}
goto LibèreDC;
}
}
}
return;
LibèreDC:
Counter++;
if(Counter>20)
Counter=0;
SelectObject(hdcMem, hOldMemBmp);
DeleteDC(hdcMem);
ReleaseDC(m_hWnd,hdc);
/**/HDC hDC = GetDC(m_hWnd);
HDC hDCSrc = CreateCompatibleDC(hDC);
hdcMem = CreateCompatibleDC(hDC);
// Bitmap couleur (hDCMem si monochrome)
HBITMAP hBitmap = CreateCompatibleBitmap(hDC,GetDocSize().cx, GetDocSize().cy/* 100, 100*/);
HBITMAP hOldBmpSrc = (HBITMAP)SelectObject(hDCSrc,m_hBitmap);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hdcMem, hBitmap);
BitBlt(hDCSrc,0,0, GetDocSize().cx, GetDocSize().cy, hdcMem,0, 0,/* GetDocSize().cx, GetDocSize().cy,/**/SRCCOPY);
BitBlt(hDC, 0,0, GetDocSize().cx, GetDocSize().cy, hDCSrc,0, 0,/* GetDocSize().cx, GetDocSize().cy,/**/SRCCOPY);
SelectObject(hDCSrc, hOldBmpSrc); // Release
SelectObject(hdcMem, hBitmapOld);
DeleteDC(hdcMem);
DeleteDC(hDCSrc);
ReleaseDC(m_hWnd, hDC); |
Partager