アプリ版:「スタンプのみでお礼する」機能のリリースについて

ワケあって、「ゲーム」について研究してます。

「処理を速くする」などを目的として、
全画面表示&解像度変更をするゲームってありますよね?

アレはどうやってるんでしょうか?

Win32 API?

DirectX?
もしそうなら、DirectX以外でやることは出来ますか?

ちゃちなアクションゲームを作った事がありますが、全画面表示とか、頭回らなかった(^^;

また、何もかも独学で頑張ってるので、カンジンな知識が抜けてたり、引数(インスウ)って未だに読んでたりします(笑)
こんな僕でも分かるようにかみ砕いて、誰か教えてください。
また、ソレが分かるサイトとかもあったら教えてください。

基本的なやり方は同じだと思うのですが、もし具体的に教えて頂けるなら、言語はVBか、Cでお願いしますです。

「本買え」ってのは、言わないでくださいね(^^;
スグに日本語の本が安く手に入る環境じゃないんです。

よろしくお願いします。

A 回答 (6件)

あと、右クリックメニューが左クリックしてからじゃないの呼び出せないみたいです。


なぜ・・・。

ひょっとして、うちの環境だけ?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事遅れてすみません。
最近、教えて!gooは、混んでますね(^^;

どうも、何度もご丁寧にありがとうございます。
バッチリ分かりました。
うまくいきそうです。
ありがとうございました。

お礼日時:2002/11/15 12:19

DirectX8SDKをダウンロードしてみては?


VB用、VC++用のサンプルコードがついています。

解像度変更はAPIでも可能ですが
基本的に市販のゲームはDirectXを使用しています。

参考URL:http://www.microsoft.com/japan/msdn/directx/down …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そうですね。知ってます。
でも、DirectXには触れないでやるのが、「目標」だったんです。
特に市販のゲームのクオリティを目的に勉強してるってワケでは、ないので・・・。

アドバイスありがとうございました。

お礼日時:2002/11/15 12:26

ちなみに、先に



SetWindowLong( hWnd, GWL_STYLE, WS_DISABLED | WS_CHILD );

と言ってましたが、WS_POPUP の方がいいみたいです。

SetWindowLong( hWnd, GWL_STYLE, WS_POPUP );
    • good
    • 0

typedef struct {


int height;
int width;
} DISPLAYSIZE;

static DISPLAYSIZE ds;

/*******************************************************************/
/* ウィンドウプロシージャ      */
/*******************************************************************/

LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ){
switch( nMsg ){
case WM_CREATE:
getDisplaySize();
DisplayModeFull();
SetWindowLong( hWnd, GWL_STYLE, WS_POPUP );
SetWindowPos( hWnd, HWND_TOP, 0, 0, 640, 480, SWP_SHOWWINDOW );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ){
case IDC_QUIT:
DisplayModeNormal();
SendMessage( hWnd, WM_CLOSE, 0L, 0L );
break;
}
break;
case WM_RBUTTONDOWN:
createPopupMenu( hWnd, lParam );
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, nMsg, wParam, lParam );
}

return 0L;
}

/*******************************************************************/
/* ポップアップメニュー      */
/*******************************************************************/

static int createPopupMenu( HWND hWnd, LPARAM lParam ){
HINSTANCE hInst;
HMENU hMenu;
HMENU hSubMenu;
POINT pt;

pt.x = LOWORD( lParam );
pt.y = HIWORD( lParam );

hInst = ( HINSTANCE )GetWindowLong( hWnd, GWL_HINSTANCE );
hMenu = LoadMenu( hInst, MAKEINTRESOURCE( IDM_MAINMENU ) );
hSubMenu = GetSubMenu( hMenu, 0 );
ClientToScreen( hWnd, &pt );
TrackPopupMenu( hSubMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL );
DestroyMenu( hMenu );

return TRUE;
}

/*******************************************************************/
/* 画面のサイズを記憶しておく   */
/*******************************************************************/

static int getDisplaySize(void){
HWND hDisplayWnd;
RECT DisplayRect;

hDisplayWnd = GetDesktopWindow();
GetWindowRect( hDisplayWnd, (LPRECT)&DisplayRect );

ds.width = DisplayRect.right;
ds.height = DisplayRect.bottom;

return TRUE;
}

/*******************************************************************/
/* フルスクリーンモード      */
/*******************************************************************/

static bool DisplayModeFull(void){
DEVMODE screen_mode;

memset( &screen_mode, 0, sizeof( DEVMODE ) );

screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;

if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}

return false;
}

/*******************************************************************/
/* 終了時にもとの画面に戻す    */
/*******************************************************************/

static bool DisplayModeNormal(void){
DEVMODE screen_mode;

memset( &screen_mode, 0, sizeof( DEVMODE ) );

screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = ds.width;
screen_mode.dmPelsHeight = ds.height;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;

if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}

return false;
}
    • good
    • 0

あと、書き忘れていたんですが、、、


ウィンドウを改造するなら SetWindowLong を使ってください。

SetWindowLong( hWnd, GWL_STYLE, WS_DISABLED | WS_CHILD );

↑こうするとタイトルウィンドウの無いウィンドウになります。ただ、気をつけなければいけないのは処理とかが終わったら、

SetWindowLong( hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW );

とかのように、もとのスタイルに戻してやるか、右クリックでポップアップメニューを出すとか、マウスポインタがウィンドウ上部に来たらメニューをロードしてやるだとか。とにかく終了してやれる方法を考えておいてください。でないと強制終了しかないようなアプリになります。

また、ウィンドウのサイズと画面のサイズを合わせてやれば全画面になります。たぶん・・・。
    • good
    • 0

僕が以前書いたソースで良ければ。


スマートじゃないかもしれませんが・・・。

この関数を好きなところで呼び出せば変更できたと思います。僕はメニューで呼び出しました。

screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;

で画面の解像度を変更できます。

*************************************************

/*------ フルスクリーンモード ------*/

bool DisplayModeFull(void){
DEVMODE screen_mode;

memset( &screen_mode, 0, sizeof( DEVMODE ) );

screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;

if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}

return false;
}

*************************************************
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!