Cannot resize window with this code *SOLVED*

Started by
6 comments, last by zyrolasting 15 years, 5 months ago
I enumerated some simple constants of expected resolutions to resize my window to. After looking around online, I tried writing this function. The window simply will not resize. I made the entire function tree for it return values to determine success, and apparently, they were successful! I cannot figure out what's wrong with it yet, so can someone help me determine where I flopped? Rather than post all 3 functions responsible, here's the one I believe is the problem code. I base this on the fact this is the only one that contains code I do not fully understand. This is in scope of my Engine, and any member access or anything arbitrary should have self explanatory names.

bool CIsoDev_Engine::D3D_TweakPresentationParams(int ScreenWidth, int ScreenHeight)
{
	RECT newRect = {0, 0, ScreenWidth, ScreenHeight};
	if (!AdjustWindowRectEx(&newRect, GetWindowStyle(WindowHandle), GetMenu(WindowHandle) != NULL, GetWindowExStyle(WindowHandle)))
	{
		char Err[256];
		sprintf(Err,"QE - (ERROR)(WIN) - Could not resize window. Attempted to make resolution: %ix%i", ScreenWidth, ScreenHeight);
		REPORT(Err); // OutputDebugString Macro
		return false;
	}
	D3DVIEWPORT9 viewport;

	viewport.X      = 0;
	viewport.Y      = 0;
	viewport.Width  = newRect.right;
	viewport.Height = newRect.bottom;
	viewport.MinZ   = 0.0f;
	viewport.MaxZ   = 1.0f;

	D3D_Param.BackBufferWidth = newRect.right;
	D3D_Param.BackBufferHeight = newRect.bottom;
	D3D_Param.BackBufferFormat = D3DFMT_UNKNOWN; // Use current color depth
	D3D_Device->SetViewport(&viewport);
	return true;
}



[Edited by - zyrolasting on November 19, 2008 12:46:09 AM]
Advertisement
AdjustWindowRect(Ex) does not resize the window. It merely calculates a client size from a complete window (screen) size depending on the windows properties (or vice versa).

To actually resize a window you use SetWindowPos or MoveWindow.

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

Noted and fixed, thanks!

I have another window related question before I close this up if that's alright...
I have a child window that displays a splash screen for a couple of seconds before the app begins. I want both this screen, and the main app to center themselves on my screen when they start.

How would I do this and have the app determine the resolution of my monitor at the time?
to get the resolution

int ScreenWidth = GetDeviceCaps(HORZRES);
int ScreenHeight = GetDeviceCaps(VERTRES);

then you have to get the width and height of the window you want to center,

you could use GetWindowRect(), which takes a rect, and fills it with the size in screen coords

RECT WindowRect;
GetWindowRect(hHandleToSplashWindow,&WindowRect);

WindowWidth = WindowRect.right - WindowRect.left;
WindowHeight = WindowRect.bottom - WindowRect.top;


then the X of the window would be: (ScreenWidth - WindowWidth) /2

the Y would be: (ScreenHeight - WindowHeight)/2

usually i wouldn't give so much code, but since i was programming, i'm kinda in the mood
--------------------------------------Not All Martyrs See Divinity, But At Least You Tried
Well, thanks so much for the help guys! Added it to my engine.
You can get the desktop window with
GetDesktopWindow();
http://msdn.microsoft.com/en-us/library/ms633504.aspx

This returns the handle of the desktop then you can get the client rectangle of the desktop.
HWND desktop;
desktop = GetDesktopWindow();
Rect rc;
GetClientRect(desktop,&rc);

Then you have to center your windows to this client rectangle.

MoveWindow(yourWindow,(rc.right-yourWindowWidth)/2,( rc.bottom-yourWindowHeight) /2,yourWindowWidth,yourWindowHeight,TRUE);

Something like that should work.
void CenterWindowInRect(HWND Window, long RectX, long RectY, long RectWidth, long RectHeight){    RECT WindowRect = { 0 };    GetWindowRect(Window, &WindowRect);    long WindowWidth = WindowRect.right - WindowRect.left;    long WindowHeight = WindowRect.bottom - WindowRect.top;    long WindowX = ((RectWidth / 2) - (WindowWidth / 2)) + RectX;    long WindowY = ((RectHeight / 2) - (WindowHeight / 2)) + RectY;    MoveWindow(Window, WindowX, WindowY, WindowWidth, WindowHeight, TRUE);}void CenterWindowInWindow(HWND Container, HWND Window){    RECT WindowRect = { 0 };    GetClientRect(Container, &WindowRect);    CenterWindowInRect(Window, WindowRect.left, WindowRect.top,(WindowRect.right - WindowRect.left), (WindowRect.bottom - WindowRect.top));}void CenterWindowOnScreen(HWND Window){    CenterWindowInWindow(GetDesktopWindow(), Window);}


This is the code from my old engine that did my window centering (so it's tested.)
HTH!
I already got it, but thank you! My only issue was ignorance to a few functions, so all I needed to do was implement them.

I'm good now, but thanks for the input!

This topic is closed to new replies.

Advertisement