none
如何判定滑鼠右鍵所在的區域 RRS feed

  • 問題

  • 請教各位

    我使用Visual Studio 2008,語言是VB,然後用MS Chart 這個元件來做各式的圖
    例如:我做出一個折線圖,就如同Excel 中的一樣,而圖內有多條資料數列、XY座標軸、還有繪圖區

    但是,因為它是用MS Chart元件一整個畫出來的,所以變成說它就像是一張圖片那樣,整個就是一個區域
    現在我想將它做成各個區域都有各自的右鍵選單,
    例如:滑鼠移動到XY座標軸按下右鍵時,會出現屬於座標軸的選項;滑鼠移動到折線圖上按右鍵,會出現屬於資料數烈的選項,就像是Excel 上的圖表那樣

    可是現在的問題出在,因為MS Chart畫出的圖,原本就沒分區,我該如何做才能讓滑鼠依照各分區的不同,而出現其對應的右鍵選單呢???
    • 已移動 璉璉 2009年7月19日 下午 05:00 (從:Visual Studio一般討論區(General))
    2009年7月2日 上午 07:20

解答

所有回覆

  • Hi,


    您可以參考WinForm的sample code:
    http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年7月3日 上午 03:29
  • Hi,


    您可以參考WinForm的sample code:
    http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/

    您好

    您提供的WinSamples,我之前已經有先找過了,裡面似乎沒提供讓滑鼠能判別依照各分區的不同,而出現其對應的右鍵選單。
    不過還是很感謝您的熱情幫忙,真的非常感謝。
    2009年7月3日 下午 12:19
  • 我自己是用 OWC ,OWC 有事件可用...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 Fly Away 2009年7月12日 下午 03:51
    2009年7月4日 上午 03:49
  • 我自己是用 OWC ,OWC 有事件可用...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務

    好的,非常感謝您提供這個另外的製作方式。
    2009年7月12日 下午 03:51
  • MSChart 3.5 我不知道有沒有內建的方法,因為這套目前綁 .Net 3.5 ,太過龐大。

    一般自己畫圖的標準做法是在視窗上點的位置建立 Region ,然後用 Region.IsVisible 測試,詳見線上手冊:
    HOW TO:使用區域的使用點擊測試

    面:所以有面積的都這樣做
    點:就是用一個小圈圈來做 Region ,所以等同面。
    線:有兩種做法,一種建立稍大包含線的多邊形,當作面來處理,另一種是呼叫 API LineDDA 來測試。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年7月12日 下午 05:21
  • 移文到:
    Windows Forms General
    T.L. Cheng
    2009年7月19日 下午 05:00
  •         internal struct POINTAPI
            {
                internal int x;
                internal int y;
            }



            [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetCursorPos")]
            internal extern static int GetCursorPos(ref   POINTAPI lpPoint);


             POINTAPI lppoint = new POINTAPI();
             GetCursorPos(ref   lppoint);


        --->    ContextMenuStrip

    [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {

        switch (m.Msg)
        {

            case MM:
                {
                    if (m.WParam.ToInt32() == NN)
                    {
                            <............>
                    }
                    break;
                }

        }

        base.WndProc(ref m);

    }


          

    2009年9月28日 下午 05:09