#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. Вы не ответили на полный вопрос и не объяснили, как работает ваш код. Пожалуйста, помогите спрашивающему, предоставив небольшой контекст вокруг вашего ответа.