我想要在WinForms文本框中的80個字符處繪製邊緣線。下面是我嘗試過,在我的文本框的子類:如何在TextBox中自定義繪製邊距?
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_PAINT = 0x00F;
if (m.Msg == WM_PAINT) {
DrawMargin();
}
}
void DrawMargin()
{
using (Pen pen = new Pen(Color.Gray, 1)) {
using (Graphics graphics = CreateGraphics()) {
float charWidth = graphics.MeasureString("M", Font).Width;
graphics.DrawLine(pen, charWidth * 80, 0, charWidth * 80, Height);
}
}
}
至少有三個問題是:
- 當用戶輸入一些文字,該行的一部分被削除(變白)。
- 當用戶用鼠標選擇一些文本時,上述情況再次發生。
- 當TextBox滾動時,線條閃爍。
我注意到TED記事本(使用Win32 EDIT控件)能夠畫出一個沒有任何問題的邊距,所以看起來有可能做我想做的事情。任何人都可以告訴我如何?
很大的把戲。編輯繪製時不使用WM_PAINT,Windows 2必須在386SUX處理器上運行時犯下的犯罪。在這個過程中擦掉你的線。你必須問Ted他是如何做到的。 –
謝謝,我會試着問他/她。 – Tom