標籤:切換 cli span point size begin 背景 etc roc
#define POINT_MAX 1000
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static int cxClient, cyClient;
static POINT pt[POINT_MAX];
static int iCount;
int x, y;
switch (message)
{
case WM_LBUTTONDOWN:
iCount = 0;
InvalidateRect(hwnd, NULL, TRUE);
break;
case WM_MOUSEMOVE://當處理完一個WM_MOUSEMOVE訊息後,才會到系統訊息佇列中去取出下一個,所以,並不是滑鼠一直移動就會一直產生WM_MOUSEMOVE訊息在訊息佇列中,其中還可以產生其他訊息
if (wParam&MK_LBUTTON && iCount<POINT_MAX)
{
pt[iCount].x = GET_X_LPARAM(lParam);//相比於LOWORD(lParam)更加可靠,在多屏顯示時LOWORD(lParam)易出錯
pt[iCount++].y = GET_Y_LPARAM(lParam);
hdc = GetDC(hwnd);
SetPixelV(hdc, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0);
ReleaseDC(hwnd, hdc);
}
break;
case WM_LBUTTONUP:
InvalidateRect(hwnd, NULL, FALSE);//不擦除背景,產生WM_PAINT訊息
break;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
SetCursor(LoadCursor(NULL, IDC_WAIT));
//Windows為滑鼠游標儲存了一個「顯示計數」若是安裝了滑鼠,就會初始為0,否則為-1
//showcursor(true)會增加顯示計數,當其非0 時會顯示滑鼠游標
//ShowCursor(TRUE);//1
for (x = 0; x < iCount;x++)
{
for (y = x+1; y < iCount;y++)
{
MoveToEx(hdc, pt[x].x, pt[x].y, NULL);
LineTo(hdc, pt[y].x, pt[y].y);
}
}
//減少顯示計數
//ShowCursor(FALSE);//0
//使兩個成對出現,才不會影響其他地方對滑鼠的操作
SetCursor(LoadCursor(NULL, IDC_ARROW)); //切換兩個備用指標
//設定後滑鼠就會顯示出樣式,不需要showCursor(true)
//(在不移動滑鼠情況下不會改變,當滑鼠移動時會回複為原來游標圖,是因為當產生WM_MOUSEOVE時,系統會自動將滑鼠改為原來的(註冊時設定的游標)
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
學習windows編程 day6 之處理滑鼠移動