代码改变世界

在PokectPC上创建非全屏的窗体

2008-01-11 14:53  cppguy  阅读(1523)  评论(9编辑  收藏  举报

     开发PPC界面的时候,在托管代码下,我们自己不能创建一个非全屏的可拖动的窗体,就像MessageBox那样的。当然你可以将窗体的设置为没有边框,然后再创建的时候动态指定它的大小和位置,似乎可以得到,但是没有了上面的标题栏,这样的窗体拖动关闭都要使用代码来实现,这样的窗体就没有什么用处了。

     显示窗体总是全屏的,这个不是由CF限制的,事实上是由PocketPC这个自身设备自己限制的。

     那怎样创建这样一个非全屏的窗体呢?其实这是很有用的,最大的好处是我们在操作这样一个非全屏窗体的时候,还可以看到下层窗体的行为。

      这里推荐一种比较简单的做法,如果你应用OpennetCF的SDF的话只需要下面代码就可以实现这个效果

public FormB()
{
    InitializeComponent();
    IntPtr hWnd = Win32Window.FindWindow(null, this.Text);
    int style = Win32Window.GetWindowLong(hWnd, Win32Window.GetWindowLongParam.GWL_STYLE);
    style |= (int)(
            Win32Window.WindowStyle.WS_BORDER
            | Win32Window.WindowStyle.WS_CAPTION
            & ~Win32Window.WindowStyle.WS_MINIMIZEBOX
            );
    Win32Window.SetWindowLong(hWnd, (int)Win32Window.GetWindowLongParam.GWL_STYLE, style);
    Win32Window.SetWindowPos(hWnd, Win32Window.SetWindowPosZOrder.HWND_TOP, 25, 25, this.Width, this.Height, Win32Window.SetWindowPosFlags.SWP_SHOWWINDOW);
}