C#-锁图
基本上,我已经设置了一个类来处理发送WM_SETREDRAW消息,如下所示:C#-锁图,c#,drawing,sendmessage,C#,Drawing,Sendmessage,基本上,我已经设置了一个类来处理发送WM_SETREDRAW消息,如下所示: public static class DrawingLocker { [DllImport("user32", CharSet = CharSet.Auto)] private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); private cons
public static class DrawingLocker
{
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static IntPtr SendMessage(IntPtr hWnd,
int msg, int wParam, IntPtr lParam);
private const int WM_SETREDRAW = 11; //0xB
public static void LockDrawing(IntPtr Handle)
{
SendMessage(Handle, WM_SETREDRAW, 0, IntPtr.Zero);
}
public static void UnlockDrawing(IntPtr Handle)
{
SendMessage(Handle, WM_SETREDRAW, 1, IntPtr.Zero);
}
}
然后在自定义用户控件中有一个重画方法:
public void Redraw()
{
try
{
DrawingLocker.LockDrawing(Handle);
using (Graphics graphics = Graphics.FromHwnd(Handle))
{
//Draw Stuff
}
}
finally { DrawingLocker.UnlockDrawing(Handle); }
}
我的问题是,我在“draw Stuff”注释的地方画的东西都没有被画出来。我做错了什么?
(当影响绘图的值发生更改时,会调用Redraw,包括调整大小)我并不真正在Windows之类的环境中,但从MSDN对该标志的描述来看,它并没有达到您认为的效果。它用于在更改控件内容时禁用重画控件(如列表视图)。在redraw函数中禁用它可能不会起任何作用
看看你是否能找到与“双缓冲”相关的东西,因为这是一种用来避免闪烁的技术。我并不真正在Windows之类的系统中,但从MSDN对该标志的描述来看,它并不像你想象的那样。它用于在更改控件内容时禁用重画控件(如列表视图)。在redraw函数中禁用它可能不会起任何作用
看看你是否能找到与“双缓冲”相关的东西,因为这是一种用来避免闪烁的技术。…你为什么要首先使用该标志?在绘图时停止闪烁,如果我错过了一个更好的方式,请随意发布它作为答案…你为什么要首先使用该标志?画图时停止闪烁,如果我错过了一个更好的方式,请随意发布它作为答案。哦,好吧,我将使用双缓冲,我假设是画图来表示图像,然后在控件上绘制图像,但这次我会用谷歌搜索它,以确保我不会再犯愚蠢的错误。一旦它允许我,我会设置为accepted,记住总是用谷歌搜索:好吧,我会使用双缓冲,我假设是画图来表示图像,然后在控件上画图,但这次我会用谷歌搜索,以确保我不会再犯愚蠢的错误。一旦它允许,我将设置为accepted,并记住始终使用google:D