Я пытаюсь разобраться с цветом текста TextBox в DWM Glass. Я прочитал много материала, но все еще не нашел идеального решения.
Почти идеальный код результатов, который я нашел здесь: http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/316a178e -252b-480d-8cc9-85814c2073d8 / , но в нем много щелчков и операций, связанных с конкретными событиями (например: введите текст и нажмите кнопку «Домой»).
Я пытаюсь решить эти проблемы.
Следующий код является изменением исходного кода, но он не зависит от каких-либо событий, а только от WM_PAINT. Он все еще мигает, а курсор (текстовый курсор) каким-то образом пропал!
Как предотвратить мерцание и как вернуть курсор (текстовый курсор)?
Спасибо.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Diagnostics;
namespace AeroWindowsFormsApplication
{
public class AeroTextBox : TextBox
{
private const int WM_PAINT = 0xf;
private bool _aeroFix;
public AeroTextBox()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}
protected override void WndProc(ref Message m)
{
if (_aeroFix)
{
switch (m.Msg)
{
case WM_PAINT:
RedrawAsBitmap();
m.Result = new IntPtr(1);
break;
default:
base.WndProc(ref m);
break;
}
}
else
{
base.WndProc(ref m);
}
}
private void RedrawAsBitmap()
{
using (Bitmap bm = new Bitmap(this.Width, this.Height))
using (Graphics g = this.CreateGraphics())
{
this.DrawToBitmap(bm, this.ClientRectangle);
g.DrawImageUnscaled(bm, -1, -1);
}
}
public bool AeroFix
{
get { return _aeroFix; }
set
{
if (_aeroFix != value)
{
Invalidate();
}
_aeroFix = value;
}
}
}
}