正文

《Win32SDK应用程序》第六篇 显示你所创建的窗口2005-11-08 17:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/whyhappy/6701.html

分享到:

第六篇 显示你所创建的窗口

白云小飞


    哈!到了显示窗口的时候啦!
    看,下面这个函数就是用来显示窗口的:
BOOL ShowWindow( HWND hWnd, int nCmdShow);

一 ShowWindow函数的参数及返回值
    hWnd就是你要显示的窗口的句柄:
    nCmdShow是窗口的显示方式,其可能的值如下:

SW_HIDE             隐藏应用程序窗口
SW_SHOWNORMAL    激活并显示窗口,如果窗口被最大化或最不化,系统恢复窗口到原始大小和位置(与SW_RESTORE)
SW_RESTORE    同SW_SHOWNORMAL
SW_NORMAL    
SW_SHOWMINIMIZED    激活并最小化窗口
SW_SHOWMAXIMIZED    激活并最大化窗口
SW_SHOW    激活窗口,并按其当前大小和位置显示
SW_MAXINIZE    最大化应用程序窗口
SW_MINIMIZE    最不化应用程序窗口
SW_SHOWNOACTIVATE    按最近大小和位置显示窗口,但不改变激活特性
SW_SHOWMINNOACTIVE    最小化窗口,但不改变其激活特性
SW_SHOWNA       按当前大小各位置显示窗口,但不改变其激活特性
返回值:成功则返回TRUE,不成功则返回FALSE。

二 先来两个例子
    例一:现假设已经创建了一个窗口,并且该窗口句柄已保存在hWnd变量中。我希望将窗口最大化并使该窗口为当前窗口(即激活该窗口)。请写出ShowWindow函数的具体实现代码。(注:可不必处理它的返回值)
    解:ShowWindow(hWnd, SW_SHOWMAXIMIZED);
    例二:我希望隐藏一个原来是显示着的窗口。该窗口的句柄在hWnd变量中。应如何写ShowWindow函数呢?
    解:ShowWindow(hWnd, SW_HIDE);

三 本系列程序中的实现
    (快一点喽,我想马上动手啦!)
    好,我们现在继续完善我们的这个Win32SDK程序吧!
    具体代码如下(注意粗体字部分):
int WINAPI WinMain(HINSTANCE hinstance,
                 HINSTANCE hprevinstance,
                 LPSTR lpcmdline,
                 int ncmdshow)
{
       HWND hWnd;
    MSG msg;
    WNDCLASSEX wndclass;  
   //……  这里省略了前面所述的注册窗口类的过程
   //
    hWnd=CreateWindowEx(NULL,WND_CLS_NAME,
                "这是我的第一个窗口",
                WS_OVERLAPPEDWINDOW|WS_VISIBLE ,
                CW_USEDEFAULT, 0,
                400,400,
                NULL,
                NULL,
                hinstance,
                NULL );
    if (!hWnd)
        return 0;
    ShowWindow(hWnd, ncmdshow);   //本篇只添加这一句
  return 0;    //这里设置一个断点,调试看看
}
    一点说明:这里的ncmdshow就是WinMain主函数中的传入参数ncmdshow。当我们通过双击*.exe文件来执行程序时,ncmdshow里的值就会是SW_SHOWNORMAL。

四 调试看看
    太棒啦!我终于可以亲眼所见我的窗口了!
    好,让我们来调试一下吧!看看程序运行后会发生什么。(如果不这样调试而只是运行它,那么还来不及等你看清窗口,程序就会马上结束的。这不用我说明原因吧!)
    请在最后一个return 0处设置一个断点(光标放在return 0处,按F9)。然后F5运行程序。
    程序暂停在最后一个return 0处。
    然后最小化桌面上所有其它无关窗口(包括VC6窗口)(这样才能看到这个程序的窗口噢!)。
    认真研究,我发现目前的代码有以下几个问题:
    1. 窗口虽然显示,但窗口不能自动被激活(即成为当前窗口)。只有最小化桌面上其它应用程序的窗口后,才能看到我们的这个窗口。(注意:在ShowWindow(hWnd, ncmdshow);函数中ncmdshow值我说过是SW_SHOWNORMAL值,应该会将窗口激活才对啊!这可是个大问题。)
    2. 窗口无法进行调整大小,移动位置等的操作。

    不过我并不想在这里解决这个问题(为什么?),那是因为这是一个大问题,它将引出Window程序的一个重要机制——消息处理机制。嘿嘿,到了关键一击的时候了!我请你务必带着这两个问题看下篇吧!

阅读(3877) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册