在windows10 winform(win32windowsApi上)繪制圖形其實是比較簡單的。要想進行圖形繪制,關鍵是找到設備上下文。就我目前所知道的,獲得設備上下文主要有這么幾種方式:
一、根據BeginPaint獲得設備上下文,這主要在WM_PAINT使用;
二、根據GetDC獲得設備上下文,這主要用在非WM_PAINT消息中;
三、CreateDC獲得設備上下文,這個主要用在屏幕的截取;
四、根據CreateCompatibleDC獲得設備上下文,然后通過BitBlt進行繪制,這個一般用在圖形界面較多的繪制場景。今天,我們就討論前面兩種,后面兩種等遇到了再說。
WM_PAINT下用BeginPaint獲得設備上下文是比較常用的方式,比如下面一段代碼,
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
EndPaint(hdc, &ps);
break;
同樣一段代碼,如果是在鼠標響應的時候調用,應該怎么修改呢?
case WM_RBUTTONUP:
hdc = GetDC(hWnd);
// TODO: Add any drawing code here...
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
ReleaseDC(hWnd, hdc);
break;
大家發現沒有,其實繪制的內容都是一樣,只是hdc獲取的方式發生了改變而已。
其次,這里主要使用了這幾個函數,
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
這其中MoveToEx和LineTo搭檔畫直線,Rectangle畫矩形,Ellipse畫橢圓形。
---------------------
嘗試過的其它可選的方式:
MFC性能不錯,但太陳舊!
CLI( .net的winform)太新,據說坑特別多!
QT?太華麗?
OpenCV值得嘗試……
簡單質樸為王……
尤其是傾向計算的項目……