我想在窗口框架上绘制一些简单的矩形和文本,使其看起来像Visual Studio。可以做到吗,还是我应该制作一个无边界的窗口并自己移动和调整大小?
编辑: 我写的但是我现在该如何绘画?
protected override void WndProc(ref Message m)
{
if (m.Msg == WndProcMsg.WM_PAINT) //0x000f
{
}
base.WndProc(ref m);
}
答案 0 :(得分:1)
您应该改为处理WM_NCPAINT:
if (m.Msg == WM_NCPAINT)
{
IntPtr hdc = GetWindowDC(m.HWnd);
if ((int)hdc != 0)
{
Graphics g = Graphics.FromHdc(hdc);
.... work with graphics
ReleaseDC(m.HWnd, hdc);
}
}
使用Graphics对象,您可以执行所需的所有绘制操作。 据我所记得,当所有者绘制窗口时,您可能会遇到一些闪烁,在这种情况下,您应该考虑处理WM_ERASEBACKGROUND并返回false。
答案 1 :(得分:0)
https://docs.microsoft.com/en-us/windows/desktop/dwm/customframe很好用。 @Chris Taylor将其翻译为C#。您可以从他的OneDrive
下载项目只需使用以下方法修复case Win32Messages.WM_NCHITTEST
:
int ht = NCHitText(m);
if (callDWP)
{
callDWP = (ht == Win32Constants.HTNOWHERE);
result = new IntPtr(ht);
}