電子書籍の厳選無料作品が豊富!

あるサンプルプログラムを改造しようとしているのですが、g_hWnd=CreateWindow(
_T(__FILE__),_T("シューティングゲーム"),WINDOW_STYLE,
CW_USEDEFAULT,CW_USEDEFAULT,rc.right-rc.left,rc.bottom-rc.top,
NULL,NULL,hInst,NULL);のところのWINDOW_STYLEをWS_OVERLAPPEDWINDOWに変えたらウィンドウが表示されません。どうしたら表示されるのでしょうか。わかる方いらいしたらご教授お願いします。多分ここだろうなというところのコードを載せます。
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_F1: ChangeDisplayMode(); return 0;
case VK_ESCAPE: PostMessage(hWnd,WM_CLOSE,0,0); return 0;
}
return 0;
case WM_DISPLAYCHANGE:// IDirect3DDevice9::Reset メソッドから Send される
DisplayChange();
return 0;
case WM_SIZE:
if(g_bWndMode==false || wParam==SIZE_MINIMIZED) return 0;
g_D3DPP.BackBufferWidth = LOWORD(lParam);
g_D3DPP.BackBufferHeight = HIWORD(lParam);
if(wParam==SIZE_MAXIMIZED || wParam==SIZE_RESTORED) ChangeWindowSize();
return 0;
case WM_ACTIVATE:
g_bActive=(LOWORD(wParam)!=WA_INACTIVE);
return 0;
case WM_DESTROY:
CleanupD3DObject();
CleanupDXGraphics();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}

A 回答 (4件)

 こんばんは。

確かにオカシイですねえ・・・。
 以下URLに書かれていましたが、其の現象は普通ではない様です。
 http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?p …

 hWnd = CreateWindow(szWindowClass, _T(""),WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,NULL, NULL,hInstance, NULL);

 hWnd = CreateWindow(szWindowClass, _T(""),WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, hInstance, NULL);

 で表示出来ました。
    • good
    • 0
この回答へのお礼

出来ました。ありがとうございます。それでもう1つ質問なのですが、
RECT rc={0,0,640,480};
AdjustWindowRect(&rc,WS_OVERLAPPEDWINDOW ,FALSE);
// ウィンドウ作成
hWnd = CreateWindow(szWindowClass, _T(""),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,CW_USEDEFAULT,rc.right-rc.left,rc.bottom-rc.top,
NULL, NULL, hInstance, NULL);

>表示状態で位置の初期化などをすると、移動中のチラつきが見えてしまったりと、見苦しい事もあります。
初期化と同時に表示位置の設定をしているのになぜチラつきがみえてしますのでしょうか?

お礼日時:2009/04/17 15:37

 失礼。



×表示状態で位置の初期化などをすると、移動中のチラつきが見えてしまったりと、見苦しい事もあります。
○表示状態で位置の移動をすると、移動中のチラつきが見えてしまったりと、見苦しい事もあります。

 と言う事です。
    • good
    • 0
この回答へのお礼

そうだったのですか。わかりました。回答ありがとうございました。

お礼日時:2009/04/17 19:25

 こんばんは。

御礼頂きました。

 WS_VISIBLEを省略した場合、ウィンドウは非表示で作成されるからです。
 ウィンドウは、表示状態で位置の初期化などをすると、移動中のチラつきが見えてしまったりと、見苦しい事もあります。

 ユーザーの目に見えない状態で作成され、位置の初期化などが終わった段階で、初めて表示された方が良いケースも珍しくはありません。

 WS_VISIBLEを無くして非表示で作成した後、
 ShowWindow(hWnd, SW_SHOW)
 を呼び出す事で、遅延表示したりとタイミングの調整を行ったりする事も出来ます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。別のプログラムでWS_VISIBLEをやったら表示できませんでした。
これはなぜでしょうか?
int APIENTRY
_tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;

HRESULT hr;
LPCTSTR lpszFilename = _T("colorbar.png");
WNDCLASSEX wcex;
LPCTSTR szWindowClass = _T("{45320057-ECD4-4c79-BE64-009DCBD6AEF6}");

// ウィンドウクラス登録

::ZeroMemory(&wcex, sizeof(WNDCLASSEX));
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor (NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszClassName = szWindowClass;
if (!RegisterClassEx(&wcex))
return FALSE;

// ウィンドウ作成
hWnd = CreateWindow(szWindowClass, _T(""),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
if (!hWnd)
return FALSE;

// パラメータのセット
//省略
hr=InitDXGraphics(lpszFilename);
if(FAILED(hr))
{
DestroyWindow(hWnd);
}
else
{
//省略
}

if(g_bWndMode==false)// フルスクリーンモードで起動
{
g_bWndMode=true;
ChangeDisplayMode();
}



// 一回再描画してウィンドウ表示
Draw();

AppIdle();
// メイン メッセージ ループ:
timeBeginPeriod(1);// 最小分解能を1[ms]に設定する

while(true)
{
//メッセージループ
}
}
timeEndPeriod(1);

// 後処理

return (int) msg.wParam;
}

質問ばかりで申し訳ありません。

お礼日時:2009/04/16 22:14

 こんばんは。



 WS_OVERLAPPEDWINDOW | WS_VISIBLE

 とするか、

 g_hWnd=CreateWindow()の下の行に

 ::ShowWindow(g_hWnd, SW_SHOW);

 と入れて見ても駄目でしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。いつもお世話になってます。WS_OVERLAPPEDWINDOW | WS_VISIBLEでできました。でもなんで WS_VISIBLEを入れないといけないのでしょうか?

お礼日時:2009/04/16 20:43

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