I have a form that has Width & Height (1000,1000).

Now if the users screen has for example this sizes (800,800).
Then I want to adjust the Forms Width & Height to 800,800 so it fits the screen.

So my question should be if it is possible to detect a monitors size in Width and Height ?

Thank you!

Edited by Jennifer84: n/a

6 Years
Discussion Span
Last Post by ShadowScripter

I use this for getting the window size in Windows. No idea how you get it on other operating systems.

	HWND hDesktopWnd;
	HDC hDesktopDC;
	hDesktopWnd = GetDesktopWindow();
	hDesktopDC = GetDC(hDesktopWnd);

	WINDOW_WIDTH = GetDeviceCaps(hDesktopDC, HORZRES);
	WINDOW_HEIGHT = GetDeviceCaps(hDesktopDC, VERTRES);

	ReleaseDC( hDesktopWnd, hDesktopDC );

Yes, I use Win Forms.

Thank you for the links. I have managed to use this code wich seems to be correct.

So I set the width and height of the form to the same as the monitors width and height.
But when this code is running the Form is not centered, to Fill up the screen. Big parts of the Form is "outside" the screen view.

How is it possible to center the Form so it fills up the screen?

Screen^ screen = Screen::PrimaryScreen;
				int S_width = screen->Bounds.Width;
				int S_height = screen->Bounds.Height;	

				Form1::Width = S_width;
				Form1::Height = S_height;
				Form1::StartPosition = FormStartPosition::CenterScreen;

Not sure. Probably setting the Location to {0,0} (or as close to it if it needs room for the border).


I think this will do it, that if the users screen is less in size than the form, then maximizing the Form will work I think.
Thank you for help.

//If the Form is bigger than the users screen, then maximize the window:
			 Screen^ screen = Screen::PrimaryScreen;
			 int S_width = screen->Bounds.Width;
			 int S_height = screen->Bounds.Height;	

			 if( S_width > Form2::Width || S_height > Form2::Height )
				 Form2::WindowState = FormWindowState::Maximized;

Hmm.. The most common way to detect the monitors size in windows is

INT32 width = GetSystemMetrics(SM_CXSCREEN);
INT32 height = GetSystemMetrics(SM_CYSCREEN);

MyForm->Width = 1000;
MyForm->Height = 1000;

if(MyForm->Width > width)
     MyForm->Width = width;
if(MyForm->Height > Height)
     MyForm->Height = height;

MyForm->Top = 0;
MyForm->Left = 0;
MyForm->StartPosition = FormStartPosition::Manual;

Edited by ShadowScripter: n/a


Thank you ShadowScripter.. Perheps that is a more portable way to detect it.
I will perheps use that instead.

Edited by Jennifer84: n/a


Thanks.. I tried to only execute this code as a start but it does not

So I wonder what could be missing?

             INT32 width = GetSystemMetrics(SM_CXSCREEN);

Edited by mike_2000_17: Fixed formatting


Well, it isn't a working script. It was just an example of how you could do it.

Here is a working script if you'd like to see it in action.

#include <windows.h>

#using <System.DLL>
#using <System.Windows.Forms.DLL>

using namespace System;
using namespace System::Windows::Forms;

namespace MyForm
	ref class MyForm : public Form

			INT32 width = GetSystemMetrics(SM_CXSCREEN);
			INT32 height = GetSystemMetrics(SM_CYSCREEN);
			BOOL big = FALSE;

			this->Width = 1000;
			this->Height = 1000;

			if(this->Width > width || this->Height > Height)
				this->Width = width;
				this->Height = height;
				this->WindowState = FormWindowState::Maximized;
				big = TRUE;

			this->Top = 0;
			this->Left = 0;
			this->StartPosition = FormStartPosition::Manual;
			MessageBox::Show((big ? "Your screen is too small to display this window. Resizing and Maximizing." : "Your screen fits this window.")+"\n"+"Width: "+width.ToString()+"px\n Height:"+height.ToString()+"px");

int main()
	Application::Run(gcnew MyForm::MyForm());
	return 0;

Edited by ShadowScripter: n/a

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.