winform之手繪矩形及游標字串與游標關聯顯示
class keytest:Form
{
private Label lbl1;
//在窗體畫多個矩形,每個矩形填充游標的不同形狀
//游標移動到指定的代表游標不同形狀的矩形時,顯示對應的游標形狀
//分析:要繪畫多個矩形,且這些矩形之間有關係,什麼關係
// 多少個游標狀態就對應多少個矩形
// 繪畫是個動態的過程,我想涉及到滑鼠移動事件,此事件要記錄,目前在哪個矩形中
// 即然要繪製矩形與對應的游標形狀,用到二者對應的陣列吧,一是游標形狀物件陣列,二是游標形狀的名稱陣列;這個我想用於判斷了
// 你想啊,判斷什麼,因為是動態的,你當時在移動滑鼠時,落在哪個游標矩形,要顯示對應的游標形狀
// 這些矩形要畫多少個解決了,但他們怎麼畫,我的意思是矩形之間如何排列,這個的邏輯關係?沒太理清,要何確認
//此處為了弄明邏輯即可,就不寫所有的游標物件形狀了,僅列4個
private Cursor[] cursorcollection ={ Cursors.AppStarting,Cursors.Arrow,Cursors.Cross,Cursors.Default};
private string[] cursorstr ={ "AppStarting", "Arrow", "Cross", "Default" };
public keytest()
{
Graphics gp = CreateGraphics();
Text = "手繪矩形與游標物件";
}
static void Main()
{
Application.Run(new keytest());
}
//onmouseenter僅是一個瞬間的動作,馬上結束
protected override void OnMouseEnter(EventArgs e)
{
}
//滑鼠停留事件
protected override void OnMouseHover(EventArgs e)
{
// Cursor.Current = Cursors.Cross;
}
//滑鼠稱動時,確認當前在哪個矩形中,作實際工作
// 矩形圖例,為了圖示確認矩形座標,我想這是個動態的過程,4個游標物件故有4個矩形吧,且我想固化到整個窗體工作區,也即每個矩形為1/4大小的工作區
// ----------
// | | |
// __________
// | | |
// __________
//畫出以上矩形後,畫矩形的工作就在初始建構函式進行吧,顯示對應游標在滑鼠移動中實現吧
//rectangle.fromltrb(左上角x座標,左上角y座標,右下角x座標,右下角y座標;進一步分析如下:
//在此我們是4個矩形,故每個矩形的寬度高度皆是clientsize/2,對吧;
//所以首個矩形座標 (0, 0, 0+clientsize.x/2, 0+clientsize.y/2)
// 第二個矩形座標(0+clientsize.x/2, 0, 0+client.x, 0+client.y/2)
// 第三個 (0, 0+clientsize.y/2, clientsize.x/2, clientsize.y)
// 第四個 (clientsize.x/2, clientsize.y/2, clientsize.x, clientsize.y)
//繼續分析:以上座標是我圖化判斷出來的,要找到座標的規則,要用迴圈,在此我們是2行2列,故如下程式碼
// for(int i=0;i<2;i++)
// for(int i=0;j<2;j++) //程式碼是先處理內迴圈,然後再處理完大迴圈,故先是第一行的兩個矩形,而後第二行的兩個矩形
// Rectangle.FromLTRB(i*(client.x)/2,j*(clientsize.y)/2,(i+1)*client.x/2,(j+1)*(clientsize.y)/2);
protected override void OnMouseMove(MouseEventArgs e)
{
int x = Math.Max(0, Math.Min(1,e.X/(ClientSize.Width/2)));
int y = Math.Max(0, Math.Min(1, e.Y / (ClientSize.Height/ 2)));
Cursor.Current=cursorcollection[4*x+y];
}
protected override void OnPaint(PaintEventArgs e)
{
StringFormat sf=new StringFormat();
sf.Alignment=StringAlignment.Center;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++) //程式碼是先處理內迴圈,然後再處理完大迴圈,故先是第一行的兩個矩形,而後第二行的兩個矩形
{
Rectangle rect = Rectangle.FromLTRB(i * (ClientSize.Width) / 2, j * (ClientSize.Height) / 2, (i + 1) * (ClientSize.Height) / 2, (j + 1) * ClientSize.Width / 2);
e.Graphics.DrawRectangle(new Pen(Color.Yellow), rect);
e.Graphics.DrawString(cursorstr[i+j],Font,new SolidBrush(ForeColor),rect,sf);//游標文字,共四個,這還要與上述的雙for迴圈建立聯絡,不能就i,應是i與j的組合,結果是0,1,2,3 與(0,0),(0,1) (1,0) (1,1)
}
}
}
小結:自己的邏輯能力不足,要補習下.不然程式設計難以提升.
最其碼達到溫飽的水平
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-735602/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- input 獲取游標位置與設定游標位置
- 游標美化
- Vim游標移動
- app直播原始碼,Android EditText的游標的顯示和隱藏APP原始碼Android
- css 滑鼠游標設定CSS
- 【Swing】JTextField設定游標
- (12)mysql 中的游標MySql
- 阻止游標預設事件事件
- cad游標大小怎麼調 cad游標中心正方形大小設定
- win10游標怎麼縮放_win10游標縮放方法Win10
- 【CSS: cursor】滑鼠游標指標樣式大全CSS指標
- Oracle - 共享遊標、父子游標、硬軟解析Oracle
- win10如何換滑鼠游標 win10更換滑鼠游標怎麼操作Win10
- Mac滑鼠游標消失怎麼辦?蘋果電腦滑鼠指標不顯示的解決方法Mac蘋果指標
- [20180813]重新整理共享池與父子游標.txt
- win10 更改游標顏色方法 win10 滑鼠游標顏色怎麼改Win10
- AUTOCAD——調整十字游標
- Android 滑鼠游標的圖形合成Android
- Web 中的“選區”和“游標”Web
- [20180819]關於父子游標問題(11g).txt
- 【譯】使用“強制執行到游標”
- 鍵盤控制游標移動作業
- 如何更改 Mac 上的游標顏色Mac
- pixi.js 自定義游標樣式JS
- CSS 設定文字框游標顏色CSS
- [20180724]Flashback query和子游標共享.txt
- PL/SQL第三章--游標SQL
- cad十字游標怎麼設定大小 CAD如何讓十字游標中間變大
- [20180822]session_cached_cursors與子游標堆0.txtSession
- .NET 隱藏/自定義windows系統游標Windows
- 學點bash,裝B - 快速移動游標
- Hookshot for Mac移動游標視窗捕捉工具HookMac
- Mac電腦游標顏色怎麼更改Mac
- [20180613]子游標不共享BIND_EQUIV_FAILUREUIAI
- win10觸控板沒有游標怎麼辦 win10觸控板沒有游標的方法Win10
- win10筆記本滑鼠游標不見了怎麼辦 win10滑鼠游標恢復的方法Win10筆記
- Win11中.cur結尾游標檔案不顯示預覽圖的解決辦法
- [20200129]子游標不共享BIND_EQUIV_FAILURE.txtUIAI
- 移動游標視窗捕捉工具Rectangle Pro for MacMac