《Windows程式設計》之BLOKOUT1

來源:互聯網
上載者:User
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static BOOL fBlocking,fValidBox;static POINT ptBeg,ptEnd,ptBoxBeg,ptBoxEnd;HDC hdc;PAINTSTRUCT ps;switch(message){case WM_LBUTTONDOWN:ptBeg.x=ptEnd.x=LOWORD(lParam);ptBeg.y=ptEnd.y=HIWORD(lParam);DrawBoxOutline(hwnd,ptBeg,ptEnd);//設定游標為IDC_CROSS,表示正在畫矩形SetCursor(LoadCursor(NULL,IDC_CROSS));//標誌,TRUE表示正在畫fBlocking=TRUE;return 0;case WM_MOUSEMOVE:if(fBlocking){//當滑鼠移動時,設定游標為IDC_CROSSSetCursor(LoadCursor(NULL,IDC_CROSS));//當下面這一行注釋點時,移動滑鼠會出現下面圖片的效果DrawBoxOutline(hwnd,ptBeg,ptEnd);ptEnd.x=LOWORD(lParam);ptEnd.y=HIWORD(lParam);//下面這一行也是會出現下面圖片的效果DrawBoxOutline(hwnd,ptBeg,ptEnd);}return 0;case WM_LBUTTONUP:if(fBlocking){DrawBoxOutline(hwnd,ptBeg,ptEnd);//用來儲存最終的矩形ptBoxBeg=ptBeg;ptBoxEnd.x=LOWORD(lParam);ptBoxEnd.y=HIWORD(lParam);//游標還原SetCursor(LoadCursor(NULL,IDC_ARROW));fBlocking=FALSE;fValidBox=TRUE;//下面後調用WM_PAINTInvalidateRect(hwnd,NULL,TRUE);}return 0;case WM_CHAR://x1b是esc,實現效果,當正在畫時,點一個esc會取消if(fBlocking & (wParam=='\x1B')){DrawBoxOutline(hwnd,ptBeg,ptEnd);SetCursor(LoadCursor(NULL,IDC_ARROW));fBlocking=FALSE;}return 0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);//這個是用來畫滑鼠鬆開時最終的矩形if(fValidBox){SelectObject(hdc,GetStockObject(BLACK_BRUSH));Rectangle(hdc,ptBoxBeg.x,ptBoxBeg.y,ptBoxEnd.x,ptBoxEnd.y);}//這個是實現滑鼠點下左鍵後,移動時候的效果,但是滑鼠移動時沒有調用這個,我認識無用/*if(fBlocking){SetROP2(hdc,R2_NOT);SelectObject(hdc,GetStockObject(NULL_BRUSH));Rectangle(hdc,ptBeg.x,ptBeg.y,ptEnd.x,ptEnd.y);}*/EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}

上面代碼有兩個問題還沒有搞清楚:

25---30行中有兩個DrawBoxOutline,我試著去掉任何一個,但是效果都會變成這樣。

我想應該跟WM_MOUSEMOVE有關,不能做到時時的來相應。

66-----72行的代碼讓我去掉了,我認識沒有用,因為在WM_MOUSEMOVE中沒有調用WM_PAINT,那段代碼應該不會被執行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.