[語法] Win 32 API

看板C_and_CPP (C/C++)作者 (難道我只是新八嗎)時間16年前 (2009/02/06 22:44), 編輯推噓2(2013)
留言15則, 6人參與, 最新討論串1/1
各位大大好 小弟又來問問題啦 小弟現在研究到了滑鼠的部份 有一些地方我看不太懂 以下是原程式碼 http://rafb.net/p/wNg1US35.html 其中的這一段 case WM_LBUTTONDOWN : x = LOWORD (lParam) / cxBlock ; y = HIWORD (lParam) / cyBlock ; if (x < DIVISIONS && y < DIVISIONS) { fState [x][y] ^= 1 ; rect.left = x * cxBlock ; rect.top = y * cyBlock ; rect.right = (x + 1) * cxBlock ; rect.bottom = (y + 1) * cyBlock ; InvalidateRect (hwnd, &rect, FALSE) ; } else MessageBeep (0) ; return 0 ; 我的問題有2個 1.rect這個東西到底是作什麼用的 看msdn跟書上好像是說要建什麼長方形 看不太懂XD 2. ^=這個符號是什麼意思 又要麻煩各位大大解答 真不好意思Orz PS 前面幾篇大大回答的文 都讓我學到很多東西 感謝~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.191.71 ※ 編輯: yu00928 來自: 220.133.191.71 (02/06 22:45)

02/06 23:04, , 1F
rect就是用來描述一個長方形,並把他當成參數傳給
02/06 23:04, 1F

02/06 23:04, , 2F
InvalidateRect做區域重繪
02/06 23:04, 2F

02/06 23:05, , 3F
x^=y; 就是 x=x^y; ^ 是bitwise的XOR運算子
02/06 23:05, 3F

02/06 23:07, , 5F
RECT 是一個 struct, 用左上角的點與長寬來描述長方形
02/06 23:07, 5F

02/06 23:10, , 6F
我講錯了 是用左上角與右下角兩個點來描述長方形 orz
02/06 23:10, 6F

02/06 23:14, , 7F
可是在這種地方描述長方形的用意是什麼? 還是不太懂
02/06 23:14, 7F

02/06 23:17, , 8F
你可以查查看InvalidateRect的用途 還有這個長方形是什麼
02/06 23:17, 8F
剛剛查了一下InvalidateRect 後面的參數是FALSE 所以他不會清除背景 只會清除RECT限定的範圍 所以RECT的作用就是 建立一個獨立的範圍 讓他跟背景不同 這樣對嗎? ※ 編輯: yu00928 來自: 220.133.191.71 (02/06 23:25)

02/06 23:46, , 9F
InvalidateRect(NULL)對client rectangle下WM_PAINT
02/06 23:46, 9F

02/06 23:47, , 10F
如有指定rectangle,那就是對指定的rectangle下WM_PAINT
02/06 23:47, 10F

02/06 23:48, , 11F
WM_PAINT要做什麼,就看你怎麼寫這段codes..
02/06 23:48, 11F

02/06 23:57, , 12F
InvalidateRect就是通知某區域已經無效, 需要重繪
02/06 23:57, 12F

02/07 00:16, , 13F
invalidaterect會告知rect範圍內的區域需要重繪
02/07 00:16, 13F

02/07 00:17, , 14F
然後費發出wm_paint更新該範圍
02/07 00:17, 14F

02/07 00:18, , 15F
至於如何更新該區域, 必須要在wm_paint內自行coding
02/07 00:18, 15F
這個部份我大致瞭解了 感謝各位大大解答Orz ※ 編輯: yu00928 來自: 220.133.191.71 (02/07 23:05)
文章代碼(AID): #19Z4pfaB (C_and_CPP)
文章代碼(AID): #19Z4pfaB (C_and_CPP)