2

我们有一个 VB.net CF2.0 应用程序,到目前为止,它已经在 2003 年到 6.0 的 Windows 移动平台上运行,没有任何重大问题。我们目前的团队使用运行 winodws 6.0 的 HP iPAQ 设备,一切运行良好。我们使用这些设备有一个很好的、与硬件相关的原因。

我们正在寻求将硬件更新为运行 windows mobile 6.5.3 的摩托罗拉硬件,这就是问题所在。应用程序窗口底部有一个工具栏。此工具栏由几个图像工具栏按钮组成,这些按钮根据当前屏幕的功能显示和隐藏。在 Windows 6.0 以上的设备上一切都很好,但在 Windows 6.5.3 上一切都出错了。工具栏图像的大小与往常一样,但按钮的可点击区域突然变得比将某些按钮推离屏幕右边缘的图像大得多。当您单击按钮时,您可以清楚地看到一个比 40x40 图像大得多的白色大矩形。这个矩形显示控件现在比它应该的大得多。没有任何方法可以轻松地调整它的大小。

我在网上发现了其他一些人报告的相同问题,但我找不到合适的解决方案。当然这应该很简单?

工具栏是一个用户控件,它继承自 System.Windows.Forms.ToolBar 并实现了我们的几个接口(它们非常简单,不会影响大小),工具栏按钮直接创建为 New System.Windows.Forms.ToolBarButton并使用 .Buttons.Add(...) 添加到工具栏。图像存储在 System.Windows.Forms.ImageList 类型中。尺寸适用于与屏幕分辨率成比例的图像。

在 6.5.3 下运行之前,上述所有操作都可以正常工作。有没有人想出一个合适的解决方案?最好不重写工具栏代码。

期待中的感谢

4

1 回答 1

1

我通过在创建工具栏后调整工具栏大小来解决这个问题。

NativeMethods.SendMessage(toolBar1.Handle, NativeMethods.TB_SETBUTTONSIZE, 0, NativeMethods.MakeLParam(toolBar1.ImageList.ImageSize.Width, toolBar1.ImageList.ImageSize.Height));

   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);


    }

有时工具栏会再次自动调整大小,所以我必须在 Form Activated 事件中调用此方法。我不认为这是解决这个问题的最佳方法,但至少它对我有用。

于 2011-07-16T09:22:23.200 回答