滑鼠在視窗中的座標轉換到 canvas 中的座標

2022-03-05 11:24:16 字數 1034 閱讀 6603

由於需要用到ispointinpath函式,所以必須得將滑鼠在視窗中的座標位置轉換到canvas畫布中的座標,今天發現網上這種非常常見的寫法其實是錯誤的!

**如下:

1.

function

windowtocanvas(canvas, x, y) ;

7.}

什麼時候會發生錯誤呢?

看下面的livescript**

1.canvas = document.queryselector \canvas

2.ctx = canvas.getcontext \2d

3.dpr = window.devicepixelratio || 1

4.width = parseint canvas.style.width

5.height = parseint canvas.style.height

6.canvas.width = width * dpr

7.canvas.height = height * dpr

8.ctx.scale dpr, dpr

當用到window.devicepixelratio的時候,會出現滑鼠命明明擊中了path,卻出現ispointinpath卻報false的情況。

真正的window2canvas寫法應該如下:

1.

window2canvas = (e) ->

2. rect = canvas.getboundingclientrect!

3. x = (e.clientx - rect.left) * canvas.width / rect.width

4. y = (e.clienty - rect.top ) * canvas.height / rect.height

5.

在視窗中繪製滑鼠拖曳框

chapter i 在wm mousemove中繪製.有時候要求在乙個視窗中繪製滑鼠的拖曳框,就像是使用者在桌面上拖曳圖示顯示的框一樣.對於這樣的矩形框windows的api提供了乙個函式drawfocusrect,當然這個函式是可以的,不過這個函式有兩個小問題,那就是它的第二個引數是乙個rect引...

視窗滑鼠事件的響應 在滑鼠視窗中繪製矩形的程式

這裡主要是訓練怎麼去響應滑鼠響應事件,那怎麼去定義滑鼠響應函式呢?void cvmousecallback int event 滑鼠響應事件的型別如滑鼠右鍵彈起,右鍵按下,cv event lbuttondown,cv event lbuttondown int x,滑鼠響應是所在的位置,這裡x,y...

C 如何獲取滑鼠相對當前視窗的座標

可以用control.mouseposition獲得當前滑鼠的座標,使用pointtoclient計算滑鼠相對於某個控制項的座標,如下 第一種 滑鼠相對於螢幕左上角的座標 point screenpoint control.mouseposition 第二種 滑鼠相對於窗體左上角的座標 point ...