用VC.NET實現清爽便利的Windows遊戲視窗

來源:互聯網
上載者:User
因為最早做的一個遊戲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));

  差不多了。我最喜歡的遊戲視窗就是這樣的。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.