首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Winform 窗体美化有关问题

2012-11-07 
Winform 窗体美化问题由于项目需求,要对窗体进行美化。不用第三方控件。将窗体设置成无边框,目前的问题是:窗

Winform 窗体美化问题
由于项目需求,要对窗体进行美化。不用第三方控件。
将窗体设置成无边框,目前的问题是:窗体在移动与左放大、右放大没有闪烁,但是左缩小与右缩小会闪烁,请教有没有什么好的解决的办法?

[解决办法]
用双缓存,


[解决办法]
http://www.cnblogs.com/yellowyu/archive/2009/03/30/1425499.html
[解决办法]
你可以自己画个皮肤的

[解决办法]

探讨

http://www.cnblogs.com/yellowyu/archive/2009/03/30/1425499.html

[解决办法]
C# code
            //减少闪烁            //SetStyle(ControlStyles.SupportsTransparentBackColor , true);            //SetStyle(ControlStyles.AllPaintingInWmPaint , true);            //SetStyle(ControlStyles.UserPaint , true);            //双缓冲            SetStyle(ControlStyles.DoubleBuffer, true);            SetStyle(ControlStyles.ResizeRedraw, true);            //this.Refresh();
[解决办法]
两个方法:
1、使用双缓冲内存位图直接操作;
2、使用wpf做个界面给程序调用.
[解决办法]
第三方控件不好吗
[解决办法]
C# code
#region 窗体缩放        const int WM_NCHITTEST = 0x0084;        const int HTLEFT = 10;//左边界        const int HTRIGHT = 11;//右边界        const int HTTOP = 12;//上边界        const int HTTOPLEFT = 13;//左上角        const int HTTOPRIGHT = 14;//右上角        const int HTBOTTOM = 15;//下边界        const int HTBOTTOMLEFT = 0x10;//左下角        const int HTBOTTOMRIGHT = 17;//右下角        protected override void WndProc(ref Message m)        {            base.WndProc(ref m);            switch (m.Msg)            {                case WM_NCHITTEST:                    {                        Point vPoint = new Point((int)m.LParam & 0xFFFF,                            (int)m.LParam >> 16 & 0xFFFF);                        vPoint = PointToClient(vPoint);                        //判断:仅当当前窗体状态不是最大化时,相关鼠标事件生效                        if (this.WindowState != FormWindowState.Maximized)                        {                            if (vPoint.X <= 5)                            {                                if (vPoint.Y <= 5)                                {                                    m.Result = (IntPtr)HTTOPLEFT;                                }                                else if (vPoint.Y >= ClientSize.Height - 5)                                {                                    m.Result = (IntPtr)HTBOTTOMLEFT;                                }                                else                                {                                    m.Result = (IntPtr)HTLEFT;                                }                            }                            else if (vPoint.X >= ClientSize.Width - 5)                            {                                if (vPoint.Y <= 5)                                {                                    m.Result = (IntPtr)HTTOPRIGHT;                                }                                else if (vPoint.Y >= ClientSize.Height - 5)                                {                                    m.Result = (IntPtr)HTBOTTOMRIGHT;                                }                                else                                {                                    m.Result = (IntPtr)HTRIGHT;                                }                            }                            else if (vPoint.Y <= 5)                            {                                m.Result = (IntPtr)HTTOP;                            }                            else if (vPoint.Y >= ClientSize.Height - 5)                            {                                m.Result = (IntPtr)HTBOTTOM;                            }                        }                        break;                    }            }        }        #endregion 


[解决办法]
把Program下面的 Application.EnableVisualStyles();注释了

此方法是启动可视化效果。
[解决办法]
缩放移动的时候,挂起逻辑布局试试,完成后恢复
SuspendLayout()
ResumeLayout()

热点排行