Страница 1 из 1

MFC изменнить рамеры главно окна

Добавлено: 08 янв 2010, 18:01
nick1988
Не могу ни как изменить программно размеры главного окна, пробовал вот так:

Код: Выделить всё

LPRECT str;
str->left = 10;
str->top = 10;
str->right = 300;
str->bottom = 300;
AfxGetMainWnd()->MoveWindow(str);
Выдает ошибку выполнения:

Run-Time Check Failure #3 - The variable 'str' is being used without being initialized.

Нужен рабочий пример или ссылку по теме

Re: MFC изменнить рамеры главно окна

Добавлено: 08 янв 2010, 18:42
Newbie
можно менять на прямую

CWnd* m_hWnd = AfxGetApp()->GetMainWnd();
m_hWnd->MoveWindow(0,0,100,100);

через структуру можно сделать так:
CWnd* m_hWnd = AfxGetMainWnd();
RECT rect;
rect.left = 10;
rect.top = 10;
rect.right = 300;
rect.bottom = 300;
LPRECT r = ▭
m_hWnd->MoveWindow(r);


В примере ошибка в том, что LPRECT это указатель на структуру, а не сама структура.

Re: MFC изменнить рамеры главно окна

Добавлено: 08 янв 2010, 19:40
nick1988
Newbie писал(а):можно менять на прямую

CWnd* m_hWnd = AfxGetApp()->GetMainWnd();
m_hWnd->MoveWindow(0,0,100,100);

через структуру можно сделать так:
CWnd* m_hWnd = AfxGetMainWnd();
RECT rect;
rect.left = 10;
rect.top = 10;
rect.right = 300;
rect.bottom = 300;
LPRECT r = ▭
m_hWnd->MoveWindow(r);


В примере ошибка в том, что LPRECT это указатель на структуру, а не сама структура.

Спасибо все работает, только как узнать начальное положение окна? чтобы не менять положение окна а только его размеры?

Re: MFC изменнить рамеры главно окна

Добавлено: 08 янв 2010, 20:20
Newbie
извратно канешна, но можно так
CWnd* m_hWnd = AfxGetMainWnd();
WINDOWINFO pwi;
m_hWnd->GetWindowInfo(&pwi);
RECT r = pwi.rcWindow;
r.bottom += 100;
r.right += 100;
m_hWnd->MoveWindow(&r);

Re: MFC изменнить рамеры главно окна

Добавлено: 08 янв 2010, 21:20
Albor
nick1988 писал(а):

Код: Выделить всё

LPRECT str;
str->left = 10;
str->top = 10;
str->right = 300;
str->bottom = 300;
AfxGetMainWnd()->MoveWindow(str);

Выдает ошибку выполнения:

Run-Time Check Failure #3 - The variable 'str' is being used without being initialized.
Внимательнее относись к типам: LPRECT - это указатель на структуру RECT, а не объект. Поскольку он ни куда не указывает (не инициализирован), возникает ошибка при выполнении программы (строка str->left = 10; пытается записать значение по недопустимому адресу). Правильнее было бы так:

Код: Выделить всё

RECT str;
str->left = 10;
str->top = 10;
str->right = 300;
str->bottom = 300;
AfxGetMainWnd()->MoveWindow(&str);

Re: MFC изменнить рамеры главно окна

Добавлено: 09 янв 2010, 15:13
nick1988
Всем спасибо за помощь в итоге получилось во что:

Код: Выделить всё

	//Установить размеры окна
	RECT rect;
	LPRECT prect = ▭

	CWnd* m_hWnd = AfxGetApp()->GetMainWnd();

	m_hWnd->GetWindowRect(prect);

	(*prect).right = (*prect).left + 300;
	(*prect).bottom = (*prect).top + 300;

	m_hWnd->MoveWindow(prect);
Вот еще какой вопрос. При данном способе меняется размер окна в целом, как изменить размер клиентской области окна?

Re: MFC изменнить рамеры главно окна

Добавлено: 11 янв 2010, 22:39
Romeo
Обработать сообщение WM_NCCALCSIZE. Вообще почитай в MSDN описание сообщений WM_NC*, все они предназначены для работы с Non Client (отсюда сокращение) частью окна.