我们有一个VB.net CF2.0应用程序到目前为止已经在Windows移动平台上从2003年到6.0运行,没有任何重大问题。我们当前的团队使用运行winodws 6.0的HP iPAQ设备,一切运行正常。为什么我们使用这些设备有一个很好的硬件相关的共鸣。
我们希望将硬件更新为运行Windows Mobile 6.5.3的motorola硬件,这就是问题所在。应用程序窗口底部有一个工具栏。此工具栏由多个图像工具栏按钮组成,这些按钮根据当前屏幕的功能显示和隐藏。在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下运行。有没有人想出一个合适的解决方案呢?最好不要重写工具栏代码。
感谢期待
答案 0 :(得分: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事件中调用此方法。 我不认为这是解决这个问题的最佳方法,但至少它对我有用。