请问一下各位大侠们,怎么实现向腾讯QQ那样的抖动窗口以及换皮肤操作,还有控制双击好友头像时如果已出来一个聊天窗体就不能再出来相同窗体?

解决方案 »

  1.   

    抖动就起一个线程,每隔N毫秒就修改一下窗体的位置。
    第二个可以判断一下窗口== null || 窗口.isdisposed(),后在构造窗口,否则就show一下。
      

  2.   

    窗口抖动就是该变窗口的位置,应该是线程操作的
    换肤的话,图片应该保存的服务器上在,我在本地没有找到,他只是把图片地址保存到数据库,以便下次好提取
    不能打开相同窗体应该是判断每个用户所对应的窗口是否激活        /// <summary>
            /// 判断子窗体打开状态
            /// </summary>
            /// <param name="formname">子窗体对象</param>
            private void CheckOpenChildForm(Form formname)
            {
                Form[] children = this.MdiChildren;
                bool _IsOpen = false;
                foreach (Form form in children)
                {
                    if (form.Name == formname.Name)//已经打开,则激活该窗体
                    {
                        form.Activate();
                        _IsOpen = true;
                        break;
                    }
                }
                if (!_IsOpen)
                {
                    formname.MdiParent = this;
                    formname.Show();
                }        }
      

  3.   

    抖动,好像不要用到线程吧,昨天有位同学用for循环弄出来哦了!
    至于那个换肤搞得我好郁闷,完全不知道怎么弄!

    换肤的话,图片应该保存的服务器上在,我在本地没有找到,他只是把图片地址保存到数据库,以便下次好提取不能打开相同窗体应该是判断每个用户所对应的窗口是否激活

    是把图片放到数据库的啊,那怎么放呢?     非常感谢各位,希望以后共同学习进步!
      

  4.   

    抖动可以不用线程啊,直接不断改变窗体位置,每次位置改变的时候加个延迟thread.sleep(1000)或者用个 timer空间,开始抖动的时候启动,每几毫秒改变一次位置,一定时间后 timer停止
    换肤的话可以用第三方皮肤控件 IrisSkin2.dll 在工具箱上右击选择“选择项”,慢慢等...
    在弹出的“选择工具箱项”选项卡中,点击“浏览”,找到IrisSkin2.dll存放的位置,双击,
    你会发现多了个“SkinEngine”,确定。
    将公共控件里的“SkinEngine”,拖到窗体上,将皮肤文件*.ssk在“解决方案资源管理器”中
    添加到bin文件夹下的Debug文件夹下。(先复制皮肤文件*.ssk,在Debug文件夹上右击“粘贴”)
    在初始化时加上一句:
     public Form1()
               {
                   InitializeComponent();
                this.skinEngine1.SkinFile = "*.ssk";//这里是你的皮肤文件
               }
    打开相同窗体 的话像4楼那样就可以了
      

  5.   


     //震动
            int index = 0;
            private void timer2_Tick(object sender, EventArgs e)
            {
                if (index == 0||index==5||index==10)
                {
                    this.Location = new Point(this.Location.X + 10, this.Location.Y);
                    index++;
                }
                else if (index == 1||index==6||index==11)
                {
                    this.Location = new Point(this.Location.X-10, this.Location.Y+10);
                    index++;
                }
                else if (index == 2||index==7||index==12)
                {
                    this.Location = new Point(this.Location.X-10, this.Location.Y-10);
                    index++;
                }
                else if (index == 3 || index == 8||index==13)
                {
                    this.Location = new Point(this.Location.X +10, this.Location.Y-10);
                    index++;
                }
                else if(index==4||index==9||index==14)
                {
                    this.Location = new Point(this.Location.X,this.Location.Y+10);
                    index++;
                }
                else 
                {
                    timer2.Enabled = false;
                    index = 0;
                }
            }这个是我原来做仿QQ的窗体震动代码,用的是一个timer实现的,也可以用线程啊什么的
    至于换皮肤的,很简单,网上有皮肤控件,http://download.csdn.net/source/1793193
    下载一个就可以用
      

  6.   

    怎么没加点注释呢?有些地方还是不懂,抖动已经出来了。
     [align=center]   private void dou() //震动
    {
    this.TopMost = true; //窗体前端显示
    bool lab = true;
    for (int i = 0; i < 100; i++) //循环
    {
    if (lab)
    {
    this.Top += 5;
    this.Left += 5;
    lab = false;
    }
    else
    {
    this.Top -= 5;
    this.Left -= 5;
    lab = true;
    }
    }
    this.TopMost = false; //取消最前
    }[/align]
      

  7.   

    qq的皮肤是存到本地的,不过他们重新生成了一个叫RDB的文件,网上有文件导出工具,能导出来真实的图片,
    抖动简单,改变位置而已,
    第二个问题:他的换肤和换色功能现在好像是用的是类似于DirectUI
    第三个好像根据句柄就可以实现吧