學習windows編程 day6 之處理滑鼠移動

來源:互聯網
上載者:User

標籤:切換   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 之處理滑鼠移動

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.