
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.120] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброе время суток!
Не подскажете, как изменить программно размер окна в SDI приложении написанного на MFC? |
Сообщ.
#2
,
|
|
|
SetWindowPos
|
Сообщ.
#3
,
|
|
|
Спасибо, но ведь там Хендл окна надо указывать, а как его получить?
|
Сообщ.
#4
,
|
|
|
Если пытаешь изменить положение окна не из класса окна, то можно вот так:
![]() ![]() CMainFrame *pMainFrm = NULL; pMainFrm = (CMainFrame *)m_pMainWnd; if(pMainFrm != NULL); ::SetWindowPos(pMainFrm->m_hWnd,.... |
Сообщ.
#5
,
|
|
|
MoveWindow можно использовать.
|
Сообщ.
#6
,
|
|
|
Цитата IEZ @ MoveWindow можно использовать. Это приведет к бОльшему геморрою. |
Сообщ.
#7
,
|
|
|
Цитата byte @ Это приведет к бОльшему геморрою. А именно? |
Сообщ.
#8
,
|
|
|
Цитата IEZ @ А именно? У функции SetWindowPos есть последним аргументом флаги, которые как раз и характеризуют действие. То есть чтобы просто установить новый размер окна, надо поставить флаги: SWP_NOMOVE | SWP_NOZORDER которые говорят, что не надо менять положение окна + его Z-порядок. А MoveWindow сразу изменяет положение окна. То есть чтобы окно осталось на том же месте, надо узнать положение окна и передать его параметрами. Лишние движения.. |
Сообщ.
#9
,
|
|
|
byte, Но Russel, не упомянул для какого окно ему нужно изменить размер (родительское, дочернее).
А так вот пример по таймеру окно меняет размеры. Прикреплённый файл ![]() |
Сообщ.
#10
,
|
|
|
Цитата IEZ @ Но Russel, не упомянул для какого окно ему нужно изменить размер (родительское, дочернее). и как это влияет? Чтобы окно не изменило свое положение, надо перед вызовом MoveWindow его знать, а перед вызовом SetWindowPos - нет. |
Сообщ.
#11
,
|
|
|
Цитата byte @ Чтобы окно не изменило свое положение, надо перед вызовом MoveWindow его знать Ну и что. Это только одна строка кода добавляется. И в конце концов выбор вариантов за Russel. Вот тот же пример, но окно стоит как вкопаное, изменяя свои размеры. Прикреплённый файл ![]() |
Сообщ.
#12
,
|
|
|
Я уточнил в каком окне - это SDI приложение то бишь - одно окно
![]() |
Сообщ.
#13
,
|
|
|
Всем большое спасибо за помощь и советы - искренне благодарен
|
Сообщ.
#14
,
|
|
|
Цитата Kezya @ Если пытаешь изменить положение окна не из класса окна, то можно вот так: ![]() ![]() CMainFrame *pMainFrm = NULL; pMainFrm = (CMainFrame *)m_pMainWnd; if(pMainFrm != NULL); ::SetWindowPos(pMainFrm->m_hWnd,.... Компилятор ругается на m_pMainWnd - не знает что такое... Я все делаю в классе документ |
![]() |
Сообщ.
#15
,
|
|
![]() ![]() CMyApp* pApp = (CMyApp*)AfxGetApp(); pMainFrm = (CMainFrame*)pApp->m_pMainWnd; |