標尺及游標的實現

2021-10-08 13:35:41 字數 1320 閱讀 5686

先看效果圖

最近在做乙個組態的專案,裡面涉及到在設計模式時容器裡加個標尺及游標,標尺很容易畫,在容器裡重繪即可,但游標把我徹底搞暈了!在網上搜尋了很多,都沒找到好的方法.

1.我實驗了全域性滑鼠鉤子,應用程式滑鼠鉤子,有人或許疑惑直接使用mousemove不就行了嗎?其實你忘了我說的是在組態方式的設計模式裡,滑鼠移動事件控制項是無法響應的,而且會被控制項捕獲!用全域性滑鼠鉤子後,關閉文件最大化最小化會嚴重滯後,使用應用程式鉤子會出現游標顫動並嚴重影響滑鼠移動.

2.使用controlpaint繪製可擦除的線,可當滑鼠拖動控制項或縮放控制項時,繪製出來的遊標線會多一條直接就混亂了!

3.最終實現僅供參考!

程式中定義乙個訊息篩選器

///

/// 截獲滑鼠移動訊息

///

public class globalmousehandler : imessagefilter

return false;}}

在主視窗load事件中加入:

接下來實現hookmanager_mousemove

public void hookmanager_mousemove(point e)

重繪事件,主要是繪製標尺

//重繪事件--繪製標尺

private void 你需要繪製的視窗_paint(object sender, painteventargs e)

;g.fillrectangles(new solidbrush(color.whitesmoke), bc);

//從40畫素開始畫

int ks = 40;

//x軸畫刻度

for (int i = 0; i < this.width - ks; i++)

else}}

//y軸畫刻度

for (int i = 0; i < this.height - ks; i++)

else}}

//畫面id

int id = idebase.project.getframeid(path.getfilename(_xmlfile));

g.drawstring("id:" + id.tostring(), new font("宋體", 10, fontstyle.bold), new solidbrush(color.black), ks, 25);

}這樣繪製出來的效果即不影響滑鼠移動的速度,也不會出現拖動控制項時產生的雙游標,還不會影響關閉最大最小化視窗的速度,如果想繼續完善,可以去想辦法捕獲拖動和縮放控制項時的滑鼠移動!

二十 游標的屬性及帶參游標

declare cursor emp cur is select from emp 宣告游標 emp var emp rowtype 宣告變數 變數emp var是表emp的行型別 begin if emp cur isopen then 判斷游標是否開啟 loop fetch emp cur in...

MS SQL游標的使用及理解

與windows或dos的 游標 不同,ms sql的游標是一種臨時的資料庫物件,既對可用來旋轉儲存在系統永久表中的資料行的副本,也可以指向儲存在系統永久表中的資料行的指標。游標為您提供了在逐行的基礎上而不是一次處理整個結果集為基礎的操作表中資料的方法。1 如何使用游標 1 定義游標語句 decla...

MS SQL游標的使用及理解

與windows或dos的 游標 不同,ms sql的游標是一種臨時的資料庫物件,既對可用來旋轉儲存在系統永久表中的資料行的副本,也可以指向儲存在系統永久表中的資料行的指標。游標為您提供了在逐行的基礎上而不是一次處理整個結果集為基礎的操作表中資料的方法。1 如何使用游標 1 定義游標語句 decla...