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次)
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
有试过用this.Region(客户区)来切掉窗口标题和边框,可以保留动画效果,但是有个弊端就是最大化时屏幕上方会有一条空白区,是因为标题栏被切掉的缘故.当然,可以调整窗口位置及大小达到看不到这条空白的效果:[top-=标题栏高度,height+=标题栏高度]但是如果在WIN 7下的话就不行了,WIN 7里系统会自动调整窗口的位置使得窗口TOP>=0.至于你说的[用 API 把窗体裁切],估计也是有这种用后遗症,因为.NET其实到最后调用的也是API,不过还是值得试试.
是不是我的问题没描述清楚....以上回复有点看不懂.........简化一下描述:将窗口FormBorderStyle = None后最小化没有动画效果,看起来很不和谐,怎么解决?
或者你可以这样理解,假设我想做一个不规则窗口,然后又想保留窗口最小化最大化等动画,如何做到呢?
(这样就应该就不会再怀疑我有没有必要FormBorderStyle = None了吧)
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次)
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
刚刚试了下面代码:
前提:this.FormBorderStyle = FormBorderStyle.None;
int sStyle = GetWindowLongA(Handle, GWL_STYLE);
sStyle |= CAPTION;
SetWindowLongA(Handle, GWL_STYLE, sStyle);
如意算盘是:在运行期间将有标题栏的样式强加给窗口,以达到欺骗系统说我这个窗口是有标题栏的,快给我来动画效果。结果是:一执行这几句代码,窗体标题栏+边框立马显示出来看来是骗不了系统了汗颜有个疑问,那些不使用系统主题边框,自己做窗体的软件,他们是怎么做到将自己画出来的窗口变成与普通窗口一样特性的呢?还是说自己做的窗口不可能做出这样的效果?
(我没有 Win 7 来试验)
有试过用this.Region(客户区)来切掉窗口标题和边框,可以保留动画效果,但是有个弊端就是最大化时屏幕上方会有一条空白区,是因为标题栏被切掉的缘故.当然,可以调整窗口位置及大小达到看不到这条空白的效果:[top-=标题栏高度,height+=标题栏高度]但是如果在WIN 7下的话就不行了,WIN 7里系统会自动调整窗口的位置使得窗口TOP>=0.至于你说的[用 API 把窗体裁切],估计也是有这种用后遗症,因为.NET其实到最后调用的也是API,不过还是值得试试.
麻烦看清楚问题再说话 呵呵....口气倒是不小, 麻烦写清楚问题再发帖 我做系统一向从不使用有边框的窗体, 在2000, XP, VISTA , WIN7 之下 无边框窗体 不管你要如何透明等特效,动画, 我还没有不能解决的问题, 总之闪人...........
大侠,我问的是:
[将窗口FormBorderStyle = None后最小化没有动画效果,看起来很不和谐,怎么解决?]
您很爽快地COPY了段代码下来,还写明:
[CBM666 の滚动标题栏 无边框的窗体, 不管是否最小化, 都还能给窗体标题, 并在任务栏以动画显示 ]我不是要在任务栏滚动标题啊...
你说我问题没写清楚,那为什么这么多位大侠,怎么就您觉得不清楚呢.
我让您看清楚问题在说,这样就口气大了?
[我做系统一向从不使用有边框的窗体, 在2000, XP, VISTA , WIN7 之下 无边框窗体 不管你要如何透明等特效,动画, 我还没有不能解决的问题...]
嫌我口气大,那您口气也小不到哪去嘛,既然抛出了这么牛的话,却又留不下半句解决问题的话...
两种可能:A,这牛是吹出来的;B,这牛虽然很牛,心胸却甚是狭隘,轻轻一句话就让其爆胎了.
你的意思是,遮蔽透明色,画标题,画标题上几个小按钮,赋予最小化最大化的代码吗?
那原先窗口的标题栏跟边框怎么处理呢,也是用遮蔽透明色的方法遮蔽?
不大可能吧,GdiTransparentBlt需指定某一要透明的颜色,标题和边框大多数情况下都不是单颜色的.
还是说也是先FormBorderStyle = None去掉标题栏和边框呢
如果是FormBorderStyle = None的话,那就回到我一开始的问题了
这样设置之后最小化时没有普通窗口的动画效果.
[注:动画效果为"我的电脑>属性>高级>性能>性能选项>在最大化和最小化时动态显示窗口"]我的问题就是,如何才能既FormBorderStyle = None,又能保留那种效果.请不要怀疑我这样做的必要性,纯粹技术探讨,没所谓的有必要没必要.
[注:QQ,迅雷,飞信,旺旺,千千静听等最小化最大化时都没有这种效果
我就是想了解一下,自己做皮肤的时候,如果要的话,能不能保留效果.]
为表明一下我的智商,我有必要澄清几个问题:
A:我知道即使没有标题栏,也可以有标题;
B:我知道标题在任务栏的滚动跟有没有标题栏一点关系都没有;
C:我知道怎么做不规则窗口;
D:我懂如何遮蔽透明色;
E:我知道没有标题栏的情况下怎么自己画一个,怎么在上班画我想要的按钮图形等;我唯一想问的是:
当没有标题栏的时候,有没有办法使窗口跟普通窗口一样,最大化最小化时有动画效果。
该动画效果必须是系统给的效果,不要自己做的,为了一致性。如果真要自己做效果,我懂怎么做,要渐隐渐现,要从左到右还是从上到下还是百叶窗等、、、我都懂做
别再跟我炫耀你会这些,还100元呢,吐血。