【发布时间】:2011-11-13 00:10:07
【问题描述】:
我想在 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 控件)能够毫无问题地绘制边距,所以似乎可以做我想做的事。谁能告诉我怎么做?
【问题讨论】:
-
相当大的把戏。 EDIT 在不使用 WM_PAINT 的情况下绘制,这是在 Windows 2 必须在 386SUX 处理器上运行时犯下的罪行。在此过程中擦除您的线路。你得问问泰德他是怎么做到的。
-
谢谢,我去问问他/她。