D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: 白手起家Win32SDK应用程序6 显示你创建的窗口

yidabu 2007-5-6 06:39

白手起家Win32SDK应用程序6 显示你创建的窗口

白手起家Win32SDK应用程序6 显示你创建的窗口知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070506点击下面网址查看原文:http://www.d-programming-language-china.org        by:        白云小飞        D语言论坛 http://www.d-programming-language-china.org 增加D语言实例教程        哈!到了显示窗口的时候啦!        看,下面这个函数就是用来显示窗口的:        QUOTE:                                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程序吧!        具体代码如下(注意粗体字部分):( 本文出处: http://www.d-programming-language-china.org )        QUOTE:                                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;    //这里设置一个断点,调试看看                }                D语言论坛 http://www.d-programming-language-china.org 按:        对应的D语言写法是这样:        [Copy to clipboard] [ - ]CODE:                                extern (Windows):                int WinMain(HINSTANCE hinstance,                             HINSTANCE hprevinstance,                             LPSTR lpcmdline,                             int ncmdshow)                {                    HWND hWnd;                    MSG msg;                    WNDCLASSEX wndclass;                    //……    这里省略了前面所述的注册窗口类的过程                    //                    hWnd=CreateWindowEx(NULL,std.string.toStringz(WND_CLS_NAME),                            std.windows.charset.toMBSz("D语言论坛 http://www.d-programming-language-china.org"),                            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程序的一个重要机制——消息处理机制。嘿嘿,到了关键一击的时候了!我请你务必带着这两个问题看下篇吧!( lastupdate:20070506 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: 白手起家Win32SDK应用程序6 显示你创建的窗口