做的第一个winform,现在出现了个问题无法解决。
主窗口有设置透明度项,点击弹出设置透明度的窗口。
我用trackBar控件控制透明度,传到xml里,再在主窗口中读取xml。
我这样做碰到两个问题。
1,无法实现像QQ皮肤那样的自定义透明度的实时预览。
2,必须把程序关了再启动才能看到上次设置的透明度。
头疼,个有哪位大哥能帮帮我?谢谢了!!

解决方案 »

  1.   

    谢谢lsd这位好心的哥哥!!
    我等代码!!
      

  2.   

    trackBar 改变时,窗体透明度改变,刷新
      

  3.   


    [DllImport("user32.dll")]
    public extern static bool SetLayeredWindowAttributes(IntPtr hWnd, Int32 crKey, byte bAlpha, int dwFlags);
    public const int LWA_ALPHA = 0x0002;SetLayeredWindowAttributes(窗口句柄, 0, Convert.ToByte(通明度(0~100)), LWA_ALPHA);
      

  4.   

    5楼同志的方法我还没试,zswang的方法很管用!!哈哈!好开心的解决了这个问题。
      

  5.   

    主窗体代码:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.TranForm = this; // << 将主窗体传递给子窗体控制
            form2.ShowDialog();
            form2.Dispose();
        }    private void Form1_Load(object sender, EventArgs e)
        {
            Text = Opacity.ToString();
        }
    }
    子窗体代码:
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private Form tranForm;
        public Form TranForm 
        { 
            get { return tranForm; } 
            set 
            {
                trackBar1.Minimum = 0;
                trackBar1.Maximum = 100;
                tranForm = value; 
                if (tranForm != null)
                    trackBar1.Value = (int)(tranForm.Opacity * trackBar1.Maximum);
            } 
        }    private void trackBar1_Scroll(object sender, EventArgs e)
        {
            if (tranForm == null) return;
            tranForm.Opacity = (double)((TrackBar)sender).Value / ((TrackBar)sender).Maximum;
        }
    }
      

  6.   

    楼主还挺快的,悟性不错。能不用API就别用API