【问题标题】:Toolbar button sizes in windows mobile 6.5.3windows mobile 6.5.3 中的工具栏按钮大小
【发布时间】:2011-07-13 16:24:26
【问题描述】:

我们有一个 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 图像大得多的白色大矩形。这个矩形显示控件现在比它应该的大得多。没有任何方法可以轻松地调整它的大小。使用 windows 6.5 vga 模拟器时也会出现同样的效果。

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

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

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

感谢期待

【问题讨论】:

    标签: button compact-framework .net-2.0 toolbar windows-mobile-6.5


    【解决方案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 事件中调用此方法。 我不认为这是解决这个问题的最佳方法,但至少它对我有用。

    【讨论】:

    • 那我试试看。感谢您花时间回答问题。我希望得到一个更简单的答案,但话虽如此,其他研究表明没有真正简单的解决方案。