在GDI里面,你要想開始自己的繪圖工作,必須先獲取一個device context handle,然后把這個handle作為繪圖復方法的一個參數,才能完成任務。同時,device context handle是同一定的繪圖屬性綁定在一起的,諸如畫筆、話刷等等,你必須在畫線之前創建自己的畫筆,然后使用selectObject方法把這個畫筆同已經獲取的device context handle綁定,才能使用LineTo等方法開始畫線。不然,你畫出來的線使用的是默認的屬性:寬度(1),顏色(黑色)。
但是,在GDI+里面,畫線方法DrawLine把畫筆Pen直接作為一個參數,這樣,一定的畫筆就不需要同device context handle 直接綁定了。
下面是GDI和GDI+兩者畫線代碼的演示:
GDI:
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
HPEN hPenOld;
hdc = BeginPaint(hWnd, &ps);
hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
hPenOld = (HPEN)SelectObject(hdc, hPen);
MoveToEx(hdc, 20, 10, NULL);
LineTo(hdc, 200, 100);
SelectObject(hdc, hPenOld);
DeleteObject(hPen);
EndPaint(hWnd, &ps);
GDI+:
HDC hdc;
PAINTSTRUCT ps;
Pen* myPen;
Graphics* myGraphics;
hdc = BeginPaint(hWnd, &ps);
myPen = new Pen(Color(255, 255, 0, 0), 3);
myGraphics = new Graphics(hdc);
myGraphics->DrawLine(myPen, 20, 10, 200, 100);
delete myGraphics;
delete myPen;
EndPaint(hWnd, &ps);