网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

VC.NET实现清爽便利的Windows游戏窗口

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/02/28

网学网为需要ASP.net的朋友们搜集整理了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,把栏目都删了;

  然后是鼠标,游戏应该带有自己的鼠标图片而把系统鼠标屏蔽掉,如果没有自己的鼠标就不用改了。在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));

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

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号