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;
}
Cannot resize window with this code *SOLVED*
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.
[Edited by - zyrolasting on November 19, 2008 12:46:09 AM]
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.
To actually resize a window you use SetWindowPos or MoveWindow.
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?
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
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
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.
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!
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement