Страница 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 (отсюда сокращение) частью окна.