我需要为需要更新的Windows Mobile应用程序(C#2.0)创建一个状态对话框,因此MessageBox已经用完了。我试图创建一个新的Form类,更改大小并调用ShowDialog,但它总是全屏显示(当然减去标题栏)。我能弄清楚如何显示它的唯一方法是将FormBorderStyle设置为None,但它确实没有边框或标题栏!
我希望它仍然看起来像一个消息框(带标题栏和边框)但是,我需要实际使用一个表单,以便我可以更新它。
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
这里的挑战是WinMo shell本身。不明显的是表单上的标题(在屏幕顶部)实际上不是您看到的表单的标题 - 它是一个完全不同的应用程序。因此,要使表单“浮动”,需要破坏shell处理表单显示的方式。一种快速而肮脏的方法是将Form BorderStyle设置为none,但是丢失了标题栏。然后,一个选项是使用OnPaint中的FillRect和DrawString手动绘制它。不太困难,不需要任何P / Invoke恶作剧,但它确实需要在布局控件时考虑新的标题。
另一种选择是使用P / Invoke并自己操作Form的样式位。这很好用,但请注意在代码中的正确位置执行此操作,因为必须在Window创建时设置一些位。还要注意shell,因为它可能想要改变你的位 - 所以这个机制需要更多的测试和对细节的关注。 IMO这是一条更好的路线,我blogged about it in more detail here。该博客条目并非专门针对浮动表单,但它涵盖了样式操作。有关非全屏表单的更多信息,请参阅my other blog entry here。
答案 1 :(得分:2)
此博客文章应该有所帮助:'Creating non full screen forms and custom MessageBoxes'。