将窗口FormBorderStyle = None后再添加按钮执行最小化等操作,此时的最小化跟窗体有标题栏时的最小化不一样:
没了系统最小化\最大化等动画效果,看起来有点生硬(windows7中更明显),请问有没有解决之道?测试了一下,发现好像主要看有没有标题栏,有标题栏时有动画效果.
即使FormBorderStyle = Sizable,然后将ControlBox = false 也是没有动画效果...

解决方案 »

  1.   

    是不是你没有装SilverLight,装上试试
      

  2.   


    是不是我的问题没描述清楚....以上回复有点看不懂.........简化一下描述:将窗口FormBorderStyle = None后最小化没有动画效果,看起来很不和谐,怎么解决?
      

  3.   

    “将窗口FormBorderStyle = None后再添加按钮执行最小化等操作,此时的最小化跟窗体有标题栏时的最小化不一样”你的目的是什么?不就是想自定义那几个按钮的外观嘛!你可以弄自己的图贴住那一块地方,覆盖掉那几个按钮,就无需设置FormBorderStyle = None了,也就没有啥动画问题了
      

  4.   



    或者你可以这样理解,假设我想做一个不规则窗口,然后又想保留窗口最小化最大化等动画,如何做到呢?
    (这样就应该就不会再怀疑我有没有必要FormBorderStyle = None了吧)
      

  5.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel; 
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace WindowsFormsApplication12
    {
        public partial class Form1 : Form
        {
            [DllImport("user32")]
            static extern bool DrawAnimatedRects(IntPtr hwnd, int idAni, ref RECT lprcFrom, ref RECT lprcTo);        struct RECT
            {
                public int Left;
                public int Top;
                public int Right;
                public int Bottom;
            }        public Form1()
            {
                InitializeComponent();            this.FormBorderStyle = FormBorderStyle.None;
            }        void button1_Click(object sender, EventArgs e)
            {
                RECT RForm = new RECT();
                RForm.Left = this.Bounds.Left;
                RForm.Top = this.Bounds.Top;
                RForm.Right = this.Bounds.Right;
                RForm.Bottom = this.Bounds.Bottom;            RECT RTo = new RECT();
                RTo.Left = SystemInformation.WorkingArea.Right - this.Width;
                RTo.Top = SystemInformation.WorkingArea.Bottom;
                RTo.Right = SystemInformation.WorkingArea.Right;
                RTo.Bottom = SystemInformation.WorkingArea.Bottom;            int IDANI_CAPTION = 3;            DrawAnimatedRects(this.Handle, IDANI_CAPTION, ref RForm, ref RTo);
                this.WindowState = FormWindowState.Minimized;
            }
        }
    }不过在windows7下的话,就必须关闭性能->视觉效果里的“启用桌面组合”才能看到动画,而且要关闭“在最大化最小化时显示动画”,否则会显示2次效果(很奇怪,要么没动画,一用DrawAnimatedRects动画就来2次)
      

  6.   

    CBM666 の滚动标题栏无边框的窗体, 不管是否最小化, 都还能给窗体标题, 并在任务栏以动画显示Option Explicit
    Dim TmpStr$, i%, TmpLength&
    Const Heading As String = "CBM666 の滚动标题栏"
    Private Sub Form_Load()
       Me.AutoRedraw = True
       Me.BorderStyle = 0: Me.Caption = ""
       Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
       Me.CurrentX = 1300: Me.CurrentY = Me.ScaleHeight \ 2
       Me.Print "左键:退出   右键:最小化"
       Timer1.Interval = 100: Timer1.Enabled = True
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       If Button = 1 Then
          Unload Me
       Else
          Me.WindowState = 1
       End If
    End SubPrivate Sub Timer1_Timer()
       DoEvents
       TmpLength = Int(Me.Width / 110)
       TmpStr = String(TmpLength, " ") & Heading & String(TmpLength, " ")
       i = IIf(i + 1 > Len(TmpStr) - TmpLength, 1, i + 1)
       Me.Caption = Mid(TmpStr, i, TmpLength)
    End Sub
      

  7.   


    刚刚试了下面代码:
       前提:this.FormBorderStyle = FormBorderStyle.None;
       
       int sStyle = GetWindowLongA(Handle, GWL_STYLE);
       sStyle |= CAPTION;
       SetWindowLongA(Handle, GWL_STYLE, sStyle);

    如意算盘是:在运行期间将有标题栏的样式强加给窗口,以达到欺骗系统说我这个窗口是有标题栏的,快给我来动画效果。结果是:一执行这几句代码,窗体标题栏+边框立马显示出来看来是骗不了系统了汗颜有个疑问,那些不使用系统主题边框,自己做窗体的软件,他们是怎么做到将自己画出来的窗口变成与普通窗口一样特性的呢?还是说自己做的窗口不可能做出这样的效果?
      

  8.   

    设计时 FormBorderStyle = Sizable ,在 LoadForm 后,用 API 把窗体裁切。不知行不............
    (我没有 Win 7 来试验)
      

  9.   



    有试过用this.Region(客户区)来切掉窗口标题和边框,可以保留动画效果,但是有个弊端就是最大化时屏幕上方会有一条空白区,是因为标题栏被切掉的缘故.当然,可以调整窗口位置及大小达到看不到这条空白的效果:[top-=标题栏高度,height+=标题栏高度]但是如果在WIN 7下的话就不行了,WIN 7里系统会自动调整窗口的位置使得窗口TOP>=0.至于你说的[用 API 把窗体裁切],估计也是有这种用后遗症,因为.NET其实到最后调用的也是API,不过还是值得试试.
      

  10.   

    恩,你说把窗体做成不规则形状的,这可以用API来实现的。并且我记得这样不规则的窗体照样有标题栏之类的。
      

  11.   

    回 18F
    麻烦看清楚问题再说话 呵呵....口气倒是不小, 麻烦写清楚问题再发帖 我做系统一向从不使用有边框的窗体, 在2000, XP, VISTA , WIN7 之下 无边框窗体 不管你要如何透明等特效,动画, 我还没有不能解决的问题, 总之闪人...........
      

  12.   



    大侠,我问的是:
    [将窗口FormBorderStyle = None后最小化没有动画效果,看起来很不和谐,怎么解决?]
    您很爽快地COPY了段代码下来,还写明:
    [CBM666 の滚动标题栏 无边框的窗体, 不管是否最小化, 都还能给窗体标题, 并在任务栏以动画显示 ]我不是要在任务栏滚动标题啊...
    你说我问题没写清楚,那为什么这么多位大侠,怎么就您觉得不清楚呢.
    我让您看清楚问题在说,这样就口气大了?
    [我做系统一向从不使用有边框的窗体, 在2000, XP, VISTA , WIN7 之下 无边框窗体 不管你要如何透明等特效,动画, 我还没有不能解决的问题...]
    嫌我口气大,那您口气也小不到哪去嘛,既然抛出了这么牛的话,却又留不下半句解决问题的话...
    两种可能:A,这牛是吹出来的;B,这牛虽然很牛,心胸却甚是狭隘,轻轻一句话就让其爆胎了.
      

  13.   

    我的系统是 Win XP/SP1 。试过无边框的窗口,在 最小化、还原 时,好象是有标题条出现的(看不清楚,感觉有个蓝色条,抓屏又始终抓不下来)
      

  14.   

    提示你一点吧使用 GdiTransparentBlt屏蔽透明色 , 再建议你要做窗体特效的话 Set SetScaleMode = 3有没有标题或线上再自动添加控件, 最小最大化切换, 都没问题, 其它的看你自己的造化了....下图就是不规则型无边框的窗体, 使用缩放特效来显示窗体, 或用淡进淡出特效来显示窗体, 不管用什么方法, 透明部份还是透明, 主窗体内含两个动画与FLASH想要我帮你做的话, 付费 100 元, 会不会爆胎 你何不试一下呢 ?窗体特效, 近百种, 有兴趣的话下载看看吧.http://hi.baidu.com/cbm666/blog/item/96e19b50858e436884352454.html
      

  15.   



    你的意思是,遮蔽透明色,画标题,画标题上几个小按钮,赋予最小化最大化的代码吗?
    那原先窗口的标题栏跟边框怎么处理呢,也是用遮蔽透明色的方法遮蔽?
    不大可能吧,GdiTransparentBlt需指定某一要透明的颜色,标题和边框大多数情况下都不是单颜色的.
    还是说也是先FormBorderStyle = None去掉标题栏和边框呢
    如果是FormBorderStyle = None的话,那就回到我一开始的问题了
    这样设置之后最小化时没有普通窗口的动画效果.
    [注:动画效果为"我的电脑>属性>高级>性能>性能选项>在最大化和最小化时动态显示窗口"]我的问题就是,如何才能既FormBorderStyle = None,又能保留那种效果.请不要怀疑我这样做的必要性,纯粹技术探讨,没所谓的有必要没必要.
    [注:QQ,迅雷,飞信,旺旺,千千静听等最小化最大化时都没有这种效果
    我就是想了解一下,自己做皮肤的时候,如果要的话,能不能保留效果.]
      

  16.   

    呵呵...标题你不会在特效显示完后再添加吗 ? 再笨一点你不会加个Label 先骗一下人的视觉吗 ?
      

  17.   


    为表明一下我的智商,我有必要澄清几个问题:
    A:我知道即使没有标题栏,也可以有标题;
    B:我知道标题在任务栏的滚动跟有没有标题栏一点关系都没有;
    C:我知道怎么做不规则窗口;
    D:我懂如何遮蔽透明色;
    E:我知道没有标题栏的情况下怎么自己画一个,怎么在上班画我想要的按钮图形等;我唯一想问的是:
    当没有标题栏的时候,有没有办法使窗口跟普通窗口一样,最大化最小化时有动画效果。
    该动画效果必须是系统给的效果,不要自己做的,为了一致性。如果真要自己做效果,我懂怎么做,要渐隐渐现,要从左到右还是从上到下还是百叶窗等、、、我都懂做
    别再跟我炫耀你会这些,还100元呢,吐血。