Размеры кнопок панели инструментов в Windows Mobile 6.5.3 - PullRequest
2 голосов
/ 13 июля 2011

У нас есть приложение VB.net CF2.0, которое до сих пор работало на платформах Windows Mobile с 2003 по 6.0 без каких-либо серьезных проблем. Наша текущая команда использует устройства HP iPAQ под управлением Winodws 6.0, и все работает нормально. Есть хороший аппаратный резонанс, почему мы используем эти устройства.

Мы собираемся обновить аппаратное обеспечение до оборудования Motorola под управлением Windows Mobile 6.5.3, и здесь кроется проблема. В нижней части окна приложения есть панель инструментов. Эта панель инструментов состоит из нескольких кнопок панели изображений, которые отображаются и скрываются в зависимости от функциональности текущего экрана. На устройствах до Windows 6.0 все хорошо, но на Windows 6.5.3 все идет не так. Изображения панели инструментов имеют одинаковый размер, как всегда, но область нажатия кнопки внезапно стала намного больше, чем изображение, отталкивающее некоторые кнопки от правого края экрана. Когда вы нажимаете на кнопку, вы можете отчетливо видеть большой белый прямоугольник, намного больший, чем изображение 40x40. этот прямоугольник показывает, что элемент управления теперь намного больше, чем должен быть. Там нет никакого способа изменить это легко. Этот же эффект происходит при использовании эмулятора Windows 6.5 VGA.

Я обнаружил ту же проблему, о которой сообщили некоторые другие онлайн, но не смог найти подходящего решения. Конечно, это должно быть просто?

панель инструментов - это пользовательский элемент управления, который наследуется от System.Windows.Forms.ToolBar и реализует несколько наших интерфейсов (они очень просты и не влияют на размеры), а кнопки панели инструментов создаются непосредственно как New System.Windows. Forms.ToolBarButton и добавлен на панель инструментов с помощью .Buttons.Add (...). Изображения хранятся в типе System.Windows.Forms.ImageList. Размеры применяются к изображениям, пропорциональным разрешению экрана.

Все вышеперечисленное работает нормально, пока не будет запущено под 6.5.3. Кто-нибудь придумал подходящее решение для этого? Желательно без переписывания кода панели инструментов.

спасибо в ожидании

1 Ответ

1 голос
/ 16 июля 2011

Я решил эту проблему, изменив размер панели инструментов после ее создания.

NativeMethods.SendMessage (toolBar1.Handle, NativeMethods.TB_SETBUTTONSIZE, 0, NativeMethods.MakeLParam (toolBar1.ImageList.ImageSL.I.IbSize.Width,.Высота));

   public static class NativeMethods
    {
        public const int TB_GETBUTTONSIZE = 0x43a;
        public const int TB_SETBUTTONSIZE = 0x41f;
        public const int TB_AUTOSIZE = 0x421;
        public const int TB_SETBITMAPSIZE = 0x420;
        public const int TB_SETBUTTONWIDTH = 0x43b;

        public static int MakeLParam(int LoWord, int HiWord)
        {
            return (int)((HiWord << 16) | (LoWord & 0xffff));
        }

        [DllImport("coredll.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);


    }

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

...