自定义 winforms 框架的最佳方式?

Best way to customize winforms frame?

我想在 window 框架上绘制一些简单的矩形和文本,使其看起来像 Visual Studio。可以做到还是我应该做一个无边界的 window 并自己处理移动和调整大小?

编辑: 我写了这个。但是我现在要怎么画呢?

protected override void WndProc(ref Message m)
{
    if (m.Msg == WndProcMsg.WM_PAINT) //0x000f
    {

    }
    base.WndProc(ref m);
}

您应该改为处理 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 对象,您可以执行所需的所有绘图操作。 据我所知,当所有者绘制 window 时,您可能会遇到一些闪烁,在这种情况下,您应该考虑处理 WM_ERASEBACKGROUND 和 return false.

https://docs.microsoft.com/en-us/windows/desktop/dwm/customframe 效果很好。 @Chris Taylor. You can download the project from his OneDrive

将其翻译成 C#

只需将 case Win32Messages.WM_NCHITTEST 修正为:

int ht = NCHitText(m);
if (callDWP) 
{ 
   callDWP = (ht == Win32Constants.HTNOWHERE);
    result = new IntPtr(ht);
}