mt5软件的mql5,创建了一个Dialog对话框,但是鼠标事件依然会影响到图表层面,请问怎么拦截鼠标事件?

 

我创建了一个Dialog对话框,之后鼠标点击对话框内部区域,发现背景图表也会触发点击事件。

最明显的就是,在对话框内部点击并拖动鼠标时候,背景K线图也会跟着在移动。

请问,怎么样才可以拦截鼠标的拖动事件,让背景图表不会受到影响

 
joshua xin:

我創建了一個Dialog對話框,之後鼠標點擊對話框內部區域,發現背景圖表也會觸發點擊事件。

最明顯的就是,在對話框內部點擊並拖動鼠標時候,背景K線圖也會跟著在移動。

請問,怎麼樣才可以攔截鼠標的拖動事件,讓背景圖表不會受到影響

>>鼠標點擊對話框內部區域,發現背景圖表也會觸發點擊事件。
點擊動作無論是直接觸發 OnMouseDown 還是 OnClick,都是由 OnMouseEvent處理整個流程
想辦法讓點擊觸發的動作在OnMouseEvent的流程觸發return true;直接結束掉你的點擊
true 代表讓這次事件直接消耗掉,就不會再傳送到下一層事件,也就不會點擊到背景圖。

以下我研究的流程是這樣,請自行....想辦法處理..
MT5 發出一個 CHARTEVENT_MOUSE_MOVE 事件,這個事件包含了滑鼠的座標和按鍵狀態。

在 OnMouseEvent 函式中,程式會偵測到滑鼠左鍵「剛剛被按下」。
此時你要寫一個自己發明的函式偵測點擊目標物到是不是你要的「物件」如果就是此物件
呼叫 OnMouseDown() 來處理後續邏輯之讓OnMouseEvent 會回傳 true。

這個 true 的回傳值會沿著呼叫鏈一路返回給OnChartEvent或 OnEvent ,收到 true 後,就代表「事件已被消耗」

因此它會立即停止事件的進一步傳播。如此一來,這個點擊事件就永遠不會傳遞到圖表本身。
如果沒消耗掉這個事件,最後就會傳到MT5圖表(裡面的東西也算是物件),然後就點中圖表本身....



>>在對話框內部點擊並拖動鼠標時候,背景K線圖也會跟著在移動。

拖曳動作:
    先
停用圖表的滾動功能

    ChartSetInteger(m_chart_id, CHART_MOUSE_SCROLL, false);

拖曳結束:

    重新恢復圖表的滾動狀態。
    ChartSetInteger(m_chart_id, CHART_MOUSE_SCROLL,true);
 

QuantWorker #:

在 OnMouseEvent 函式中,程式會偵測到滑鼠左鍵「剛剛被按下」。
此時你要寫一個自己發明的函式偵測點擊目標物到是不是你要的「物件」如果就是此物件
呼叫 OnMouseDown() 來處理後續邏輯之讓OnMouseEvent 會回傳 true。


谢谢你的回复,不过我依然不是很懂,我想把问题简单一下,就是当我点击一个按钮的时候,似乎点击事件穿透到了背景K线图表上。

我没有找到MQL5内置的事件传递阻断的功能函数。你可以给出核心部分的代码吗?非常感谢你的回复