none
求助VC#透明窗体的问题 RRS feed

  • 问题

  • 本人使用VC#2008,新建一个FORM,然后将FormBorderStyle设为None,也在Load里this.Transparencykey=this.BackColor,并拖了个Button控件,事件为this.WindowState=FormWindowState.Minimized,运行后点击按钮后最小化到任务栏,再从任务栏恢复窗体的时候会闪烁标题栏很影响效果,求助有何解决办法???

    另:本人在OnPaint里写了this.Region = new Region(new RectangleF(0, HMH, width, height + i_killCaptionmenu));,可以解决掉这个效果,但感觉治标不治本,因为这样又影响了我用GDI+在FORM上绘图的坐标精确度。
    2009年11月17日 2:49

全部回复

  • 对于闪烁 可以使用双缓冲 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.setstyle(VS.80).aspx

    http://msdn.microsoft.com/zh-cn/library/b367a457(VS.80).aspx
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年11月17日 3:05
    版主
  • 设双缓冲没用,一样要闪烁标题栏,我将Form进行Region后能解决掉那闪烁的标题栏,但是绘图的时候坐标又不对了,指定GDI坐标往下都不行,不知道要怎么样才算是标本兼治-_-#

    2009年11月17日 3:07
  • 你好!
         尝试在窗体的构造函数中添加如下代码,看能否解决这个问题:
    this.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.OptimizedDoubleBuffer,true);
    周雪峰
    2009年11月17日 3:09
    版主
  • 不行,还是照样闪烁标题栏
    2009年11月17日 3:14
  • 闪烁标题栏的原因是因为这句this.Transparencykey=this.BackColor,不知道是不是BUG
    2009年11月17日 3:17
  • 我测试了一下,并没有重现你遇到的问题:
            public Form1()
            {
                InitializeComponent();
                this.TransparencyKey = this.BackColor;
            }
    周雪峰
    2009年11月17日 3:32
    版主
  • 加了this.TransparencyKey = this.BackColor;并且设置FormBorderStyle设为None,拖一个按钮加个this.WindowState=FormWindowState.Minimized,编译后你最小化,然后用空格键点击按钮,鼠标点任务栏,多点几次,不一定是哪一次会闪烁标题栏。我这边十多个人运行都出同样问题
    2009年11月17日 3:36
  • 有什么办法不让标题栏重绘吗???API禁用标题栏也不行

    2009年11月17日 3:57
  • 加了this.TransparencyKey = this.BackColor;并且设置FormBorderStyle设为None,拖一个按钮加个this.WindowState=FormWindowState.Minimized,编译后你最小化,然后用空格键点击按钮,鼠标点任务栏,多点几次,不一定是哪一次会闪烁标题栏。我这边十多个人运行都出同样问题
    你把FormBorderStyle设为None就没有标题栏了,请问我如何重现你的问题呢?
    周雪峰
    2009年11月17日 4:31
    版主
  • 汗。。。
    就因为设了FormBorderStyle为None,原本以为不会有标题栏了,结果最小化恢复窗体就会闪烁标题栏,否则就不用发贴了-_-#

    this.TransparencyKey = this.BackColor;并且设置FormBorderStyle设为None,拖一个按钮加个this.WindowState=FormWindowState.Minimized,编译后你最小化,然后用空格键点击按钮,鼠标点任务栏,多点几次,不一定是哪一次会闪烁标题栏。

    2009年11月17日 4:36
  • 哦!终于明白你的意思了!
    这个是最小化的时候操作系统提供的动画,一般很难修改!
    周雪峰
    2009年11月17日 4:55
    版主
  • 我分析,理论上应该可以改吧。 方案一:能禁止标题栏重绘吗???或方案二:如果用了this.Region=.....(目的是不要标题栏)后看到的第X 0和Y 0用GDI将图片绘上去也在Region后看到的X 0 Y 0也可以解决。或方案三:除了使用TransparencyKey,还有什么办法设置FORM全透明吗??? 解释:方案一和方案三如果能实现就应该能达到效果,避开闪烁的标题栏。方案二的话,每次GDI绘图的时候得控制坐标还是什么那也无所谓了。
    • 已编辑 阳光路上 2009年11月17日 5:06 少了个句号分隔
    2009年11月17日 5:05
  • 怎么用API或WndProc建立一个完全透明的FORM(或设置FORM上的某种颜色透明)?????

    2009年11月17日 5:27
  • 自己顶一下,谁会用API或WndProc方式将一个Form弄透明啊?不是Opacity属性方式的,想要将Form的颜色直接变成透明的,其他控件非透明
    2009年11月17日 6:05
  • 谁有办法能解决一下???
    2009年11月18日 9:42
  • 怎么贴子被转地方了-_-#
    2009年11月18日 14:06
  • 你去搜索一下 wpf绘画窗体透明apl例子看看 wpf本身也不支持透明窗体 用了api支持 你可以尝试winfrom调用那个api看看
    2009年11月18日 14:45
  • wpf不用API本身就可以支持透明窗体的啊,但我这个不能用wpf做
    2009年11月18日 15:34
  • wpf不用API本身就可以支持透明窗体的啊,但我这个不能用wpf做

    我是学wpf的 wpf本身不支持完全透明窗体 要调用api支持的 网上看的wpf半透明边效果那都是vista本身支持半透明 你这个普通winfrom在vista也一样的半透明效果 
    2009年11月18日 15:53
  • -_-#我这个任务不能用WPF,这东西我用VC#自带的this.Transparencykey=this.BackColor或API实现透明都会出现这BUG,已经反馈给微软,不知道何年何月才会关注到。不知道各位有什么更好的高招避开吗???除了WPF

    2009年11月18日 17:16
  • 实在是烦啊,谁有办法避开这个BUG????等得花儿都谢了
    2009年11月19日 3:53