C# 自定义winforms框架的最佳方法?

C# 自定义winforms框架的最佳方法?,c#,winforms,nonclient-area,C#,Winforms,Nonclient Area,我想在窗口框架上画一些简单的矩形和文本,这样看起来像VisualStudio。这是可以做到的,还是我应该做一个无边界的窗口来处理移动和调整自己 编辑: 这是我写的。但是我现在怎么画画呢 protected override void WndProc(ref Message m) { if (m.Msg == WndProcMsg.WM_PAINT) //0x000f { } base.WndProc(ref m); } 您应该处理WM_NCPAINT: if

我想在窗口框架上画一些简单的矩形和文本,这样看起来像VisualStudio。这是可以做到的,还是我应该做一个无边界的窗口来处理移动和调整自己

编辑: 这是我写的。但是我现在怎么画画呢

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); 
                } 

            } 
使用图形对象,您可以执行所需的所有绘图操作。 就我所记得的,当所有者绘制窗口时,你可能会经历一些闪烁,在这种情况下,你应该考虑处理WMyEraseLead并返回false。

工作得很好。 这件事被安排到C#by。你可以从他的网站下载这个项目

只需使用以下内容修复案例Win32Messages.WM\n chittest:

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

当我在谷歌上搜索你的标题时,有很多结果。你能用你已经尝试过的方法更新你的问题吗?。VisualStudio是一个WPF应用程序(带有一些WinForms部件)。Vista的标准方法是用DWM(主要是DWMUpReDFrimeTimeCiC++区域)从C MS/WiFrms中的测试,从MSDN样本:(DeDTFAX也可以使用,但更复杂…)@ CasoRixLink到采样/代码?我将MS++代码转换为C/C++代码: