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为大家提供一个学习交流各种知识的平台