木曜日, 7月 28, 2011

C#: ComboBox をカスタマイズする

ComboBox リスト項目の描画をカスタマイズし、チェックマークなど描く方法を説明します。

ComboBox のリスト項目は、単なる Object クラスです。つまり、リスト項目クラスを継承などしてデータを追加することはできません。適宜、ComboBox クラスにリストなどデータ構造を用意してデータを保存します。

データの準備ができたら、ComboBox のプロパティで DrawMode を OwnerDrawVariable に変更してやります。ここを変更すると、リスト項目の描画イベントをオーバーライドすることができます。DrawItem イベントに、イベントハンドラを追加し、描画手順を記述します。

具体的にはこのように描画をすべて記述することになります。

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();

            if (e.Index < comboBox1.Items.Count)
            {
                e.Graphics.DrawString((string)comboBox1.Items[e.Index], e.Font, Brushes.Black, e.Bounds);

                if (e.Index < modifiedMessages.Count() && modifiedMessages[e.Index])
                {
                    Bitmap bmp = new Bitmap(Properties.Resources.checkMark);
                    int iconWidth = 16;
                    int iconHeight = 16;
                    e.Graphics.DrawImage(bmp, e.Bounds.Right - iconWidth, e.Bounds.Bottom - iconHeight, iconWidth, iconHeight);
                }
            }

            e.DrawFocusRectangle();
        }

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...