VC.NET制作Windows游戏窗口
因为最早做的一个游戏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,把栏目都删了;(来源www.iocblog.net)
然后是鼠标,游戏应该带有自己的鼠标图片而把系统鼠标屏蔽掉,如果没有自己的鼠标就不用改了。在switch(message)里面加入这个case:wm_ncmousemove,这表示鼠标在非客户区移动,这时候让系统鼠标显示,因为玩家可能需要点住这里拖动窗口,而在wm_mousemove的时候再让系统鼠标隐藏。具体代码如下:
Tag: createwindow ,setwindowpos
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。