2011-04-30 70 views
1

我在C#for Winforms中編寫我自己的文本框控件。如何繪製位置標記?

有一件事我想不通:如何繪製在各種尺寸的文本位置標誌?

Text position sign

+3

爲什麼你寫你自己的TextBox控件 – 2011-04-30 16:27:13

+0

@Matti:.NET所有者繪製控件的樂趣! – 2011-04-30 16:27:55

+1

*非常*很難讓所有者繪製的文本框正常工作。一旦你開始像這樣重新發明輪子,你會注意到你錯過了很多在Windows實現中被認爲是理所當然的基本東西。您的控件不支持從右向左的語言(並非世界上的每個人都喜歡閱讀英文),您不會獲得IME支持等等。所以,重要的是,重新考慮你是否真的想要推出自己的文本框。如果這不是用於個人學習目的,答案是**否**。 – 2011-04-30 16:34:00

回答

0

試試這個。

我創建這是指從哪個控制你在繪製油漆處理程序調用的方法。爲了簡單起見,我剛纔在我的窗體本身。你可能有一個面板或其他控制。

該方法接受的圖形對象時,光標的規模和從哪裏開始抽出上部/左位置。規模只是高度,但所有數學都是相對於高度進行的。你可以用你想要的方式調整這些數字。

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     DrawCaret(e.Graphics, 30, new Point(20, 20)); 
     DrawCaret(e.Graphics, 50, new Point(100, 100)); 
    } 

    private static void DrawCaret(Graphics g, int scale, Point loc) 
    { 
     g.SmoothingMode = SmoothingMode.HighQuality; 

     int height = scale; 
     int width = scale/10; 
     int rectBase = scale/5; 

     g.FillRectangle(Brushes.Black, loc.X, loc.Y, width, height); 

     var path = new GraphicsPath(); 
     path.AddPolygon(new[] 
          { 
           new Point(loc.X+width, loc.Y), 
           new Point(loc.X+width+rectBase/2, loc.Y+rectBase/2), 
           new Point(loc.X+width, loc.Y+rectBase), 
          }); 
     g.FillPath(Brushes.Black, path); 
    } 

此示例產生以下輸出:

sample

+1

'遊標'是你用鼠標移動的箭頭。他正在談論插入符號,文本框中的垂直條。 – 2011-04-30 16:42:39

+0

是的,我在閱讀你的答案後纔回想起來。相應地重構代碼示例。 – 2011-04-30 16:44:36

+0

謝謝。這種方法唯一的問題是它不支持ClearType。 – DxCK 2011-04-30 19:00:46

2

這就是所謂的 '^符號'。 winapi函數沒有被winforms包裝,你必須拼湊它們。開始reading here。你會在我的回答here中找到代碼。

相關問題