指定したクライアント領域でウィンドウを作成する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者ゲームプログラマ

指定したクライアント領域でウィンドウを作成する

#1

投稿記事 by 初心者ゲームプログラマ » 2週間前

タイトル通りなのですが、指定したクライアント領域でウィンドウを作成しているのですが、
意図した結果にならないため、質問させていただきました。

環境 windows10 Microsoft Visual Studio 2015

指定したクライアント領域のサイズ
x = 0
y = 0
width = 1280
height = 720

CreateWindowsでウィンドウを作成した後、GetClientRectでクライアント領域を
x =0
y = 0
width = 1280
height = 740
となります。

高さだけが指定したクライアント領域とずれて作成されており、これを意図した通り(height=720)になるように実装するのが目的になります。

コード:


	WNDCLASS wc;
	wc.style			= CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;
	wc.lpfnWndProc	= WndProc;
	wc.cbClsExtra		= 0;
	wc.cbWndExtra		= 0;
	wc.hInstance		= m_hInstance;
	wc.hIcon			= LoadIcon(m_hInstance, IDI_APPLICATION);
	wc.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground	= (HBRUSH)GetStockObject(BACKUP_SPARSE_BLOCK);
	wc.lpszMenuName	= NULL;
	wc.lpszClassName	= m_pAppName;

	if (!RegisterClass(&wc)){
		MessageBox(NULL, "RegisterClass() failed", "Error", MB_OK);
		return false;
	}

	int style = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;

	RECT rect;
	SetRect(&rect, x, y, width, height);
	AdjustWindowRect(&rect, style, TRUE);
	rect.right -= rect.left;
	rect.bottom -= rect.top;

	//	windowを作成する
	m_hWnd = CreateWindow(
		m_pAppName, 
		m_pAppName,
		style,
		x,
		y, 
		rect.right,
		rect.bottom,
		NULL, 
		NULL, 
		m_hInstance,
		NULL);

	if (m_hWnd == NULL){
		MessageBox(NULL, "CreateWindowEx() failed", "Error", MB_OK);
		PostQuitMessage(0);
		return false;
	}
	

	RECT test;
	GetClientRect(m_hWnd,&test);

かずま

Re: 指定したクライアント領域でウィンドウを作成する

#2

投稿記事 by かずま » 2週間前

AdjustWindowRect の第3引数を TRUE にしているから、
メニューの高さ 20 が加えられているのではありませんか?

初心者ゲームプログラマ

Re: 指定したクライアント領域でウィンドウを作成する

#3

投稿記事 by 初心者ゲームプログラマ » 2週間前

おぉ!できました!
ありがとうございます!

メニューがあるときに使用することはわかっていたのですが、なんでサイズがずれるんだろうと思っていました。
正確にいいますと、TRUEを入れるのはあっていたのですがGetClientRectを行うタイミングが間違っていました。
(ソースを全部張っていればすぐに分かったかもしれません。。。)

GetClientRectでサイズを取得した後に、AppendMenuでメニューを作成していたため、自分が意図したものと違っていたたけでした。(正確にはSetMenuでメニューを設定)
AppendMenuでメニューが追加されたあとにGetClientRectでクライアント領域を取得してみたら、意図した値になっていました!

返信

“C言語何でも質問掲示板” へ戻る