Изменение размера окна MFC

#c #mfc

Вопрос:

У меня есть приложение MFC, над которым я работаю уже несколько недель, я хочу вручную задать размеры основного фрейма при его загрузке, может ли кто-нибудь помочь мне с этим, в частности, куда также поместить код?

Спасибо!

Ответ №1:

Вы также можете задать размер (с SetWindowPos() ) изнутри CMainFrame::OnCreate() или в CWinApp производном классе» InitInstance . Найдите строку с надписью pMainFrame->ShowWindow() и позвоните pMainFrame->SetWindowPos() до этой строки. Вот где я всегда это делаю.

Ответ №2:

Найдите свой размер экрана с помощью ..

 CRect rect;
SystemParametersInfo(SPI_GETWORKAREA,0,amp;rect,0);
screen_x_size=rect.Width();  
screen_y_size=rect.Height();
 

затем используйте эти значения для вычисления размера X и Y вашего окна ..

 ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,main_x_size,main_y_size,SWP_NOZORDER); 
 

Где main_x_size и main_y_size каковы ваши размеры.

Комментарии:

1. SPI_GETWORKAREA получает только размер основного mnonitor. Для всего виртуального рабочего стола используйте следующее: int desktopW = GetSystemMetrics(SM_CXVIRTUALSCREEN); int desktopH = GetSystemMetrics(SM_CYVIRTUALSCREEN);

Ответ №3:

Я думаю, что вы ищете предварительное окно и что ваше приложение не основано на диалоге.

Это виртуальная функция-член класса CWnd, и она вызывается платформой непосредственно перед созданием окна. Так что это подходящее место для размещения ваших изменений.

Вы должны написать что-то вроде этого:

 BOOL CMyWindow::PreCreateWindow(CREATESTRUCTamp; cs)
{
   cs.cy = 640; // width
   cs.cx = 480; // height
   cs.y = 0; // top position
   cs.x = 0; // left position
   // don't forget to call base class version, suppose you derived you window from CWnd
   return CWnd::PreCreateWindow(cs);
} 

Комментарии:

1. Это работает, но вы должны редактировать PreCreateWindow в MainFrm.cpp , а не в своем классе просмотра.

Ответ №4:

вы можете использовать это:

 CRect rect;
SystemParametersInfo(SPI_GETWORKAREA, 0, amp;rect, 0);
left = -3, right = 3;
rect.top = 100;
rect.bottom = 500;
rect.left = 100;
rect.right = 800;
//or use
CRect cr;
cr.SetRect(POINT{ 100,100 }, POINT{ 500,800 });
MoveWindow(rect);
 

Комментарии:

1. Вы не ответили на полный вопрос и не объяснили, как работает ваш код. Пожалуйста, помогите спрашивающему, предоставив небольшой контекст вокруг вашего ответа.