一个清爽便利的Windows游戏窗口

原创 2006年05月19日 00:20:00

因为最早做的一个游戏DEMO是全屏加上鼠标独占,而且不能全屏/窗口切换,加上自己做的游戏又粗糙,感觉极为不爽。现在想想,其实当我玩游戏的时候,我是喜欢窗口化的,可以随便拖动,这样玩游戏的时候也可以兼做其他事情,而且鼠标一定不能独占,最好是要放进去是个性化鼠标,移出来又是系统鼠标。如果要做这样一个窗口,可以把以下这几个地方改一下。

先让VC.NET去生成一个Win32 Project,然后Application type就让它是默认的Windows application. 如果愿意让它是空项目然后自己写那几个主要函数也是可以的。

第一个要改动的是窗口位置,我希望它刚出来就在屏幕的中央,是800*600的窗口。
在InitInstance()函数里的CreateWindow()函数之后加这么一句话:
SetWindowPos(hWnd, HWND_TOP, 70, 70, 800, 600, SWP_SHOWWINDOW|SWP_NOCOPYBITS);
第一个参数是它本身的句柄,第二个当然是让它刚出来就在最顶端,
第三到第六个分别是左上角的x,y值和窗口本身的宽高,注意这时候的客户区可不是800*600

以下这句话就是生成时候的样子:
        hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

其中WS_OVERLAPPEDWINDOW表示很多东西;
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED     | /
                             WS_CAPTION        | /
                             WS_SYSMENU        | /
                             WS_THICKFRAME     | /
                             WS_MINIMIZEBOX    | /
                             WS_MAXIMIZEBOX)

我会把它改成这四个:
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,

WS_CAPTION|WS_SYSMENU如果没了就没了图标和最右上角的关闭,最大化最小化之类的,所以要留,WS_THICKFRAME和WS_MAXIMIZEBOX去掉的原因是不能让用户随意改动窗口大小,如果是玩家喜欢全屏玩的话可以在游戏里给个按键,WS_MINIMIZEBOX是一定要留下的,做游戏的如果不提供BOSS键就觉得对不起玩家了,何况这个最小化框呢?!

接下来改什么呢?要把默认带的菜单去掉,我们不需要文件,关闭和ABOUT框。。。我的做法是打开Resource里的Menu,把栏目都删了;

然后是鼠标,游戏应该带有自己的鼠标图片而把系统鼠标屏蔽掉,如果没有自己的鼠标就不用改了。在switch(message)里面加入这个case:WM_NCMOUSEMOVE,这表示鼠标在非客户区移动,这时候让系统鼠标显示,因为玩家可能需要点住这里拖动窗口,而在WM_MOUSEMOVE的时候再让系统鼠标隐藏。具体代码如下:

// 加个静态变量记录鼠标显示状态
static BOOL cursorState = TRUE;
switch (message)
{
        case WM_NCMOUSEMOVE:
        {
                if(cursorState == FALSE)
                {
                        cursorState = TRUE;
                        ShowCursor(TRUE);
                }
        }
        break;
        case WM_MOUSEMOVE:
        {
                if(cursorState == TRUE)
                {
                        cursorState = FALSE;
                        ShowCursor(FALSE);
                }
                // 然后做别的事情
        }
        break;
        // 其他的case项目就不用变了
}

最后是图标,总不能用它自带的图标很难看的。如果愿意自己画几笔,就改一下Resource里面的icon吧,但是这样可能更难看, hehe。如果从别的地方考了个.icon文件过来的化,可以这样添加:

先把这个ICON加到资源文件里,然后看看在resource.h中它叫什么名字,如果叫IDI_ICON1的话,在注册窗口类的时候改这两句话

//如果窗口类名叫winclass
winclass.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ICON1));
winclass.hIconSm  = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ICON1));

差不多了。我最喜欢的游戏窗口就是这样的。

相关文章推荐

Windows游戏开发感想&&一个完整的Windows窗口程序

现在的互联网行业从事Windows游戏开发的人实在是太少了。一是因为门槛较高,游戏行业本来就是互联网行业最尖端的领域,要想从事游戏开发,不仅要掌握一门过硬的语言,尤其是对C++的精通,还要对算法非常精...

Android干净架构详解:为你的应用打造一个清爽的架构!

Android干净架构详解:为你的应用打造一个清爽的架构! 2016-03-05 Dario Miličić 移动开发前线 版权声明 作者:Dario Miličić 译者:张天雷 ...

windows窗口贪吃蛇游戏

  • 2012年12月10日 01:11
  • 630KB
  • 下载

clr小游戏windows窗口编程

  • 2014年12月08日 21:21
  • 10.5MB
  • 下载

在Windows下让游戏窗口全屏

原文地址:http://www.eoeandroid.com/thread-250863-1-1.html 參考了一下NeHe 的教程, 在 cocos2d-x 2.0 上可以做點小手腳在 ...
  • azymq
  • azymq
  • 2013年03月28日 11:09
  • 518

javascript城市选择器,jQuery.citypicker之后又一个清爽简洁的城市选择器插件,js城市选择器,js中国城市选择,城市选择js插件

2010年7月份,那时候我正在学习jQuery,那时候我也是在上大学,学习之余,我开发了一个叫"jQuery.citypicker"的城市选择器插件。时隔这么久,当我重新回到javascript编程时...

一个清爽的button样式

.clear { /* generic container (i.e. div) for floating buttons */ overflow: hidden; ...

[译] Android 干净架构详解:为你的应用打造一个清爽的架构!

转载地址:https://toutiao.io/posts/gyfc4t/preview 编者的话:随着应用体积和代码数量的膨胀,Android应用的架构越来越复杂,遗留代码越来越多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个清爽便利的Windows游戏窗口
举报原因:
原因补充:

(最多只允许输入30个字)