作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图在窗口周围绘制一个矩形(在窗口内部,而不是在窗口外部),但绘图有污迹,在某些情况下不会重绘。
我将 HWND WndProc 子类化(代码当然在 HWND 进程中运行):
class SubClasser : NativeWindow
{
...
protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case 0x85: // WM_CPAINT
case 0xf: // WM_PAINT
{
base.WndProc(ref m);
Rectangle r = GetWndRect(this.Handle);
g.DrawRectangle(p, r);
Trace.WriteLine("WM_PAINT: "+r.ToString());
}
break;
default:
Trace.WriteLine("0x" + m.Msg.ToString("X"));
base.WndProc(ref m);
break;
}
}
...
}
private Rectangle RECTtoRectangle(RECT r)
{
return new Rectangle(r.Left, r.Top, r.Right, r.Bottom);
}
private Rectangle GetWndRect(IntPtr hwnd)
{
RECT r = new RECT();
GetClientRect(hwnd, out r);
return RECTtoRectangle(r);
}
正如您在代码中看到的,我正在 WM_PAINT 和 WM_CPAINT 上重新绘制“矩形”,但这还不够:
我应该指出,我确实收到了绘画消息,而且子类化似乎有效。
我真的卡住了:-(
编辑:
哦,我也试过放置:
base.WndProc(ref m);
只是在WndProc结束时,得到了相同的结果。
最佳答案
我不确定,因为我无法测试它,也不知道成员变量 g
的背景,但我认为这是裁剪矩形的问题。因此,您可以在 WndProc
函数中尝试这样的操作,以确保重绘整个窗口:
case 0x05: // WM_SIZE
InvalidateRect(this.Handle, GetWndRect(this.Handle), TRUE);
break;
关于c# - 在窗口内绘图不会重绘和涂抹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26375294/
我是一名优秀的程序员,十分优秀!