起始栏以最大化的形式显示Pocket PC 2003

如何解决起始栏以最大化的形式显示Pocket PC 2003

|| 环境 Windows XP SP3 x32 Visual Studio 2005标准版 Windows Mobile /掌上电脑2003 .NET Compact Framework 1.0 SP3和.NET Framework 1.1 霍尼韦尔海豚9500手持式条形码扫描仪 目标 我有一个三种形式的应用程序和一个外部类(Program.cs),该类具有应用程序入口点
Main()
。首先加载主表单,然后从ѭ1内实例化/显示一种类似于初始屏幕的新表单。我希望将这三种形式都最大化。这三种形式都设置了以下属性
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.ControlBox = false;
问题 “启动画面”表单以全屏显示,没有任何问题。然后处理它并显示主屏幕(首先加载并显示
Application.Run();
的参数。从主屏幕中,一旦检测到列表框SelectedindexChanged事件,就会显示第三种形式(将主形式保留在所述第三种形式之后)。第三个表单在表单顶部显示了任务栏: 关闭此表单后,主表单现在也会覆盖任务栏。 码 朋友粘贴链接。让我知道是否应该将代码发布在这里。 WorkOrderView超过一千行,所以我认为这会更容易。 \“主要\”表单(WorkOrders.cs) \“第三\”表单(WorkOrderView.cs)-上图 不相关的建议 我是一个绿色的程序员,尤其缺乏这种环境的经验。因此,如果您对我的工作方式有任何建议/批评,请随时与我联系。最好只对帖子发表评论,而不是针对这些类型的回复发布答案。 谢谢!     

解决方法

首先,这些天我只运行Windows Mobile 5(WM5)。 (几年前,我不得不从PocketPC 2003升级。大声笑) 我发现,定义窗体的窗口大小在移动设备上不能很好地工作,并且显示/隐藏多个窗体很尴尬,并且永远不会按照您想要的方式运行。 不过,请确保您的主窗体已将“ 6”设置为“最大化”。 如果有帮助,我还将
ControlBox
MinimizeBox
设置为False。 如果您仅使用Panels作为主窗体作为某种MDI容器的窗体(而不是选择单词,但这就是我正在做的),而不是使用多个窗体,它将看起来更好。 在我的Designer视图中,每个面板只是一个装满控件的小盒子。 要使用每个面板,请在Visual Studio设计器中将其选中,然后您将看到一个位置框(上下左右箭头)。 右键单击位置框,然后单击“置于最前”。 现在转到面板控件的“属性”并将“ 9”设置为“填充”。 全屏显示该面板时,请使用适当的名称添加所有按钮,文本框等。与VS默认值default12ѭ和
button2
相比,诸如
pnl1_button1
pnl2_button1
之类的名称在代码中更易于理解。 浏览完此面板的设计视图后,请返回
Dock
属性并将其设置回None。 转到下一个面板控件。 我发现这也有助于维护面板的小图及其名称和控件名称。 在主窗体的
Load
事件中,将每个
Panel
\的
Dock
属性设置为DockStyle.Fill。然后,要显示一种形式,只需调用
Panel1.BringToFront()
而不是
dialog.Show()
。 移动开发并不难,但有所不同。 :) 编辑: 在项目的Program.cs文件中,我保留了以下静态工具,可以用来打开和关闭“开始”菜单(在WM5中效果不佳,但是我仍然可以使用它)我的PocketPC版本中的代码)。 我没有在一年左右的时间内打开这个项目,但是它应该都是有效的。试试看。如果我遗漏了一些东西,请告诉我。 将其粘贴到项目的Program.cs文件中后,只需在程序启动时调用
Program.ShowWindowsMenu(false);
,在程序退出时调用
Program.ShowWindowsMenu(true);
static IntPtr _taskBar;
static IntPtr _sipButton;

public enum Notify_Events {
  NOTIFICATION_EVENT_NONE = 0,NOTIFICATION_EVENT_TIME_CHANGE = 1,NOTIFICATION_EVENT_SYNC_END = 2,NOTIFICATION_EVENT_DEVICE_CHANGE = 7,NOTIFICATION_EVENT_RS232_DETECTED = 9,NOTIFICATION_EVENT_RESTORE_END = 10,NOTIFICATION_EVENT_WAKEUP = 11,NOTIFICATION_EVENT_TZ_CHANGE = 12,NOTIFICATION_EVENT_OFF_AC_POWER,NOTIFICATION_EVENT_ON_AC_POWER
}

public enum WindowPosition {
  SWP_HIDEWINDOW = 0x0080,SWP_SHOWWINDOW = 0x0040
}

[DllImport(\"coredll.dll\",EntryPoint = \"FindWindowW\",SetLastError = true)]
public static extern IntPtr FindWindowCE(string lpClassName,string lpWindowName);

[DllImport(\"coredll.dll\",SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd,IntPtr hWndInsertAfter,int x,int y,int cx,int cy,uint uFlags);

static void ShowWindowsMenu(bool enable) {
  try {
    if (enable) {
      if (_taskBar != IntPtr.Zero) {
        SetWindowPos(_taskBar,IntPtr.Zero,240,26,(int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
      }
    } else {
      _taskBar = FindWindowCE(\"HHTaskBar\",null); // Find the handle to the Start Bar
      if (_taskBar != IntPtr.Zero) { // If the handle is found then hide the start bar
        SetWindowPos(_taskBar,(int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
      }
    }
  } catch (Exception err) {
    ErrorWrapper(enable ? \"Show Start\" : \"Hide Start\",err);
  }
  try {
    if (enable) {
      if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
        SetWindowPos(_sipButton,(int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
      }
    } else {
      _sipButton = FindWindowCE(\"MS_SIPBUTTON\",\"MS_SIPBUTTON\");
      if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
        SetWindowPos(_sipButton,(int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
      }
    }
  } catch (Exception err) {
    ErrorWrapper(enable ? \"Show SIP\" : \"Hide SIP\",err);
  }
}

static void ErrorWrapper(string routine,Exception e) {
  if (!String.IsNullOrEmpty(e.Message)) {
    MessageBox.Show(e.Message,routine,MessageBoxButtons.OKCancel,MessageBoxIcon.None,0);
  }
}
编辑2: 声明一个主窗体的私有静态实例,然后将其包装在try .... catch例程中,该例程位于项目的
Program.cs
文件中,如下所示:
static Form1 ppcForm = null;

static void Main() {
  ShowWindowsMenu(false);
  try {
    ppcForm = new Form1();
    Application.Run(ppcForm );
  } catch (Exception err) {
    if (!String.IsNullOrEmpty(err.Message)) {
      ErrorWrapper(\"Mobile Form (Program)\",err);
    }
  } finally {
    ShowWindowsMenu(true);
  }
}
    ,您所追求的通常称为“信息亭模式”(这可能有助于您的搜索引擎结果)。 潜在的问题是,开始栏不是您的应用程序的一部分-它是Shell应用程序的一部分,并且您正在与它竞争所需的行为。您想要的是平台试图阻止您执行的操作,因此您必须准备好将开发人员启动放在平台的脖子上,以使其正常运行。 这篇博客文章是解决此问题的一个很好的起点,可能会为您提供所需的信息,但是可以随时使用搜索引擎查找更多/更好的建议。网路上实际上有很多资料-比这个答案还要多。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?