我需要为需要更新的 Windows Mobile 应用程序 (C# 2.0) 创建一个状态对话框,因此 MessageBox 不可用。我试图创建一个新的 Form 类,更改大小并调用 ShowDialog,但它总是全屏显示(当然减去标题栏)。我可以弄清楚如何将其显示为小的唯一方法是将 FormBorderStyle 设置为 None,但它确实没有边框或标题栏!
我希望它仍然看起来像一个消息框(带有标题栏和边框),但是我需要实际使用一个表单以便我可以更新它。
关于如何做到这一点的任何想法?
我需要为需要更新的 Windows Mobile 应用程序 (C# 2.0) 创建一个状态对话框,因此 MessageBox 不可用。我试图创建一个新的 Form 类,更改大小并调用 ShowDialog,但它总是全屏显示(当然减去标题栏)。我可以弄清楚如何将其显示为小的唯一方法是将 FormBorderStyle 设置为 None,但它确实没有边框或标题栏!
我希望它仍然看起来像一个消息框(带有标题栏和边框),但是我需要实际使用一个表单以便我可以更新它。
关于如何做到这一点的任何想法?
这里的挑战是 WinMo shell 本身。不明显的是表单上的标题(在屏幕顶部)实际上不是您看到的表单的标题 - 它是一个完全不同的应用程序。因此,要让您的表单“浮动”,需要颠覆 shell 处理表单显示的方式。一种快速而肮脏的方法是将 Form BorderStyle 设置为 none,但随后您会丢失标题栏。然后一个选项是在 OnPaint 中使用 FillRect 和 DrawString 手动绘制它。不太难,也不需要任何 P/Invoke 恶作剧,但它确实要求您在布局控件时考虑新的标题。
另一种选择是使用 P/Invoke 并自己操作表单的样式位。这很好用,但请注意在代码中的正确位置执行此操作,因为必须在创建窗口时设置一些位。还要当心外壳,因为它可能想将这些位更改回您身上——因此这种机制需要更多的测试和对细节的关注。IMO 这是一条更好的路线,我在这里更详细地介绍了它。该博客条目并不是专门关于浮动表单的,但它很好地涵盖了样式操作。有关非全屏表单的更具体信息,请参阅我的其他博客条目。