C# прозрачный фон с GTK#

Я сделал это очень простое приложение с.Net примерно за 2 минуты, но мне нужно портировать его с помощью Gtk# для правильной работы в Linux.

Я искал, как сделать фон прозрачным, но мне не повезло; Я также искал, как изменить цвет фона в надежде найти эквивалент TransparenceKey, но опять не повезло.

Самое главное это: как сделать фон прозрачным?

Вот код моего приложения; написано с использованием Visual Studio 2010 и.Net Framework 4 Client Profile

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;

namespace Calendario {
    public partial class Calendar : Form {
        private Timer temporizador;
        private Label lblHora, lblDia, lblFecha;
        public Calendar () {
            InitializeComponent ();

            this.BackColor = System.Drawing.Color.Lime;
            this.ClientSize = new System.Drawing.Size ( 1600, 900 );
            this.DoubleBuffered = true;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.TransparencyKey = System.Drawing.Color.Lime;

            temporizador = new Timer();
            temporizador.Tick += new System.EventHandler ( this.temporizador_Tick );
            temporizador.Interval = 1;
            temporizador.Enabled = true;

            lblHora = new Label();
            lblHora.AutoSize = true;
            lblHora.Font = new System.Drawing.Font ( "GE Inspira", 64F, System.Drawing.FontStyle.Regular,
                                                    System.Drawing.GraphicsUnit.Point, ( ( byte ) ( 0 ) ) );
            lblHora.Location = new Point(1240, 12);
            lblHora.TextAlign = ContentAlignment.MiddleRight;
            lblHora.ForeColor = Color.FromArgb(255, 255, 32, 32);
            this.Controls.Add(lblHora);

            lblDia = new Label();
            lblDia.AutoSize = true;
            lblDia.Font = new System.Drawing.Font ( "GE Inspira", 36F, System.Drawing.FontStyle.Regular,
                                                    System.Drawing.GraphicsUnit.Point, ( ( byte ) ( 0 ) ) );
            lblDia.Location = new Point(1430, 117);
            lblDia.TextAlign = ContentAlignment.MiddleRight;
            lblDia.ForeColor = Color.FromArgb(255, 255, 8, 8);
            this.Controls.Add(lblDia);

            lblFecha = new Label();
            lblFecha.AutoSize = true;
            lblFecha.Font = new System.Drawing.Font ( "GE Inspira", 28F, System.Drawing.FontStyle.Regular,
                                                    System.Drawing.GraphicsUnit.Point, ( ( byte ) ( 0 ) ) );
            lblFecha.Location = new Point(1375, 186);
            lblFecha.TextAlign = ContentAlignment.MiddleRight;
            lblFecha.ForeColor = Color.FromArgb(255, 255, 0, 0);
            this.Controls.Add(lblFecha);
        }

        private void temporizador_Tick ( object sender, EventArgs e ) {
            lblHora.Text = DateTime.Now.ToString("HH:mm:ss");
            lblDia.Text = DiaDeLaSemana(DateTime.Now.DayOfWeek.ToString());
            lblFecha.Text = DateTime.Now.Date.ToShortDateString();
        }

        private string DiaDeLaSemana(string DayOfWeek) {
            switch (DayOfWeek) {
                case "Monday":
                    return "lunes";
                case "Tuesday":
                    return "martes";
                case "Wednesday":
                    return "miércoles";
                case "Thursday":
                    return "jueves";
                case "Friday":
                    return "viernes";
                case "Saturday":
                    return "sábado";
                default:
                    return "domingo";
            }
        }
    }
}

Заранее спасибо за помощь!

2 ответа

Решение

Compiz не имеет прозрачности окна по умолчанию. http://www.jameswigley.com/2012/04/27/making-ubuntu-unity-look-beautiful-by-enabling-transparency/

Чтобы включить прозрачность на рабочем столе Windows, выполните следующие действия.

1) Install Compiz Config Settings Manager (if you haven’t already)
sudo apt-get install compizconfig-settings-manager compiz-plugins
2) Alt + F2, type ‘ccsm’ and press Enter to launch CCSM.
3) Click on the ‘Opacity Brightness & Saturation’ Plugin / ‘Opacity’ tab.
4) Click ‘New’. Click ‘+’ and a new window will appear. Click ‘Grab’ and then select the desktop window on which you want to enable transparency. The name will then be filled into the Value field. Click ‘add’. Range 0 (transparent) – 100 (opaque).
5) Transparency can the be changed via the Window Values slider .
Some common window classes are ‘Ccsm’,'Nautilus’,'Dialog’,'Normal’,'Empathy’,'Gedit’,'Gnome-Terminal’

Я искал больше информации о GTK, и он не имеет 100% -ного эквивалента TransparenceKey из.Net, я провел несколько тестов с полупрозрачным фоном. Но это не так, как я хочу. WinForms и GTK работают ОЧЕНЬ ОЧЕНЬ РАЗНЫМИ СПОСОБАМИ (я знаю, что это очевидно), поэтому я закрою вопрос.

Извините, если я потратил ваше время...

Другие вопросы по тегам