Изменение или скрытие всплывающей подсказки формы - PullRequest
2 голосов
/ 19 июня 2009

У нас есть форма MDI, которая содержит некоторое количество дочерних форм с разными заголовками, показывающими имя файла загруженного в данный момент документа. Когда дочерние формы развернуты до максимума, их текст заголовка помещается в строку заголовка родительского окна, что часто приводит к тому, что текст слишком длинный, чтобы поместиться в строке, и Windows достаточно хороша для добавления эллипсов и усечения текста.

Однако, когда вы наводите курсор на строку заголовка главного окна, она показывает всплывающую подсказку с тем, что должно быть всей строкой, но вместо этого подсказка часто содержит небольшую часть строки. Например, если основной текст формы был:

Program1 - Filename:[Really_long_filename_that_doesnt_fit.file]

В подсказке это выглядит следующим образом:

Program1 - Filename:[Really_long_filename_t

Редактировать: он всегда усекает всплывающую подсказку с точностью до 100 символов, что заставляет меня поверить, что где-то указан верхний предел.

Есть ли способ изменить это, чтобы он отображал всю строку, или, если нет, вообще отключить всплывающую подсказку?

Любой язык приемлем, хотя мы делаем это на C #.

Ответы [ 2 ]

4 голосов
/ 19 июня 2009

Используется ручная подсказка и таймер, чтобы показать / скрыть заголовок, когда мышь перемещается над строкой заголовка.

public partial class Form1 : Form
{
    private ToolTip toolTip = new ToolTip();
    private Timer toolTipTimer = new Timer();
    private bool canShowToolTip = true;

    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case 0x2A0: // WM_NCMOUSEHOVER
                return;
            case (int)0x00A0: // WM_NCMOUSEMOVE
                if (m.WParam == new IntPtr(0x0002)) // HT_CAPTION
                {
                    if (canShowToolTip)
                    {
                        canShowToolTip = false;
                        toolTip.Show(this.Text, this, this.PointToClient(Cursor.Position), toolTip.AutoPopDelay);
                        toolTipTimer.Start();
                    }
                }
                return;
        }
        base.WndProc(ref m);
    }

    public Form1()
    {
        InitializeComponent();
        Form child = new Form();
        child.Text = "Program1 - Filename:[Really_long_filename_that_doesnt_fit.file] AAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
        child.MdiParent = this;
        child.Show();
        toolTip.AutoPopDelay = 5000;
        toolTipTimer.Interval = toolTip.AutoPopDelay;
        toolTipTimer.Tick += delegate(object sender, EventArgs e)
        {
            canShowToolTip = true;
        };
    }
}
0 голосов
/ 19 июня 2009

Хотелось бы, чтобы у меня было что-то более полезное для вас, но, к сожалению, я не думаю, что есть способ обойти это. Вы можете сократить ваши имена файлов или иметь дело с этим: (

...