none
vb2010下如何使用MouseMove等比例拖拉一個外框 RRS feed

  • 問題

  • 請問一下怎讓滑鼠按等比例移動 (如x軸移動1,y軸一定就移動2)

    目前只會做到按滑鼠位置變動,程式碼如下,請大大指導一下

     

      Private Sub OnMouseMove(ByVal e As MouseEventArgs)
    
            Dim dy As Integer = e.y - _lastPoint.Y
    
            Dim dx As Integer = e.x - _lastPoint.X
    
    
    
            Select Case _dragMode
    
                  Case Left
    
                    newArea.X += dx
    
                    newArea.Width -= dx
    
    
    
                  Case BottomRight
    
                    newArea.Width += dx
    
                    newArea.Height += dy
    
    
    
                  Case
    
                            .       
    
                            .       
    
                            .       
    
                            .       
    
                            .       
    
                            .       
    
           End Select
    
       END Sub
    
    
    

     

     

     

    2010年9月7日 下午 01:10

解答

  • 一般是動外框大小 (Height / Width),不動滑鼠游標,我自己也是這樣做。

    你可以操作 PowerPoint 的圖形縮放看看。

    進位誤差這部分沒辦法,因為畫在螢幕上本來就是整數座標。如果進位誤差是你自己程式造成,直接改成 Double 的變數型態就解決了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 rachang 2010年9月9日 下午 01:21
    2010年9月8日 下午 05:02

所有回覆

  • http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%e9%81%b8%e6%93%87%e6%a1%86

    先看一下選擇框的討論,然後將你的滑鼠由左上往右下拖拉改成右下往左上拖拉,然後看看有沒有正常,有正常的話你就可以用指定乘子來縮放固定比例了

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年9月7日 下午 02:01
  • 心冷大大,謝謝指導,我把部份程式碼改為如下,但滑鼠動作不正常,是我的想法不對嗎

                Case DragMode.BottomRight
                    Dim scale As Single = 3 / 2   '設定寛/高 
                    Dim dx As Integer = x - _lastPoint.X
                    Dim dy As Integer = CInt(dx / scale)
                    newArea.Width += dx
                    newArea.Height += dy
                    SetCursor(x, dy + _lastPoint.Y)

    2010年9月8日 上午 02:20
  • 當你 MouseDown 應該將目前點紀錄,做為參考點,不要只在 MousePress 中算差量,全部都要對原參考點算,因為 Window Message 不見得會連續,而且會因為你的程式碼或其他佔資源程式導致訊息遺漏。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年9月8日 下午 12:56
  • 不好意思,我表達能力不是很好,沒加上指定乘子前運作都正常,加上後就亂了

    _lastPoint就是MouseDown時的原參考點,剛試了一下猜想會造成錯誤的原因

    1)         scale=1.5  ->  當dx移動1 dy因運算式關係變成0.67-->1       當一格一格動時的累計誤差就變很大

    2)          SetCursor(x, dy + _lastPoint.Y) 造成訊息不連續

    請問大大可以再指導個方向嗎?

    2010年9月8日 下午 04:24
  • 一般是動外框大小 (Height / Width),不動滑鼠游標,我自己也是這樣做。

    你可以操作 PowerPoint 的圖形縮放看看。

    進位誤差這部分沒辦法,因為畫在螢幕上本來就是整數座標。如果進位誤差是你自己程式造成,直接改成 Double 的變數型態就解決了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 rachang 2010年9月9日 下午 01:21
    2010年9月8日 下午 05:02
  • 謝謝心冷大大,問題解決了,自己想了好幾天都沒什麼進展,終究是來這邊有高人指引才找的到方向
    2010年9月9日 下午 01:21