На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как программно изменить размер окна?
    Доброе время суток!

    Не подскажете, как изменить программно размер окна в SDI приложении написанного на MFC?
      SetWindowPos
        Спасибо, но ведь там Хендл окна надо указывать, а как его получить?
        Сообщение отредактировано: Russel -
          Если пытаешь изменить положение окна не из класса окна, то можно вот так:
          ExpandedWrap disabled
                CMainFrame *pMainFrm = NULL;
                pMainFrm = (CMainFrame *)m_pMainWnd;
                if(pMainFrm != NULL);
                  ::SetWindowPos(pMainFrm->m_hWnd,....
            MoveWindow можно использовать.
              Цитата IEZ @
              MoveWindow можно использовать.

              Это приведет к бОльшему геморрою.
                Цитата byte @
                Это приведет к бОльшему геморрою.

                А именно?
                  Цитата IEZ @
                  А именно?

                  У функции SetWindowPos есть последним аргументом флаги, которые как раз и характеризуют действие. То есть чтобы просто установить новый размер окна, надо поставить флаги:
                  SWP_NOMOVE | SWP_NOZORDER
                  которые говорят, что не надо менять положение окна + его Z-порядок.

                  А MoveWindow сразу изменяет положение окна. То есть чтобы окно осталось на том же месте, надо узнать положение окна и передать его параметрами. Лишние движения..
                    byte, Но Russel, не упомянул для какого окно ему нужно изменить размер (родительское, дочернее).
                    А так вот пример по таймеру окно меняет размеры.
                    Прикреплённый файлПрикреплённый файлMoveWindow.rar (94.17 Кбайт, скачиваний: 285)
                      Цитата IEZ @
                      Но Russel, не упомянул для какого окно ему нужно изменить размер (родительское, дочернее).

                      и как это влияет? Чтобы окно не изменило свое положение, надо перед вызовом MoveWindow его знать, а перед вызовом SetWindowPos - нет.
                        Цитата byte @
                        Чтобы окно не изменило свое положение, надо перед вызовом MoveWindow его знать

                        Ну и что. Это только одна строка кода добавляется. И в конце концов выбор вариантов за Russel.
                        Вот тот же пример, но окно стоит как вкопаное, изменяя свои размеры.
                        Прикреплённый файлПрикреплённый файлMoveWindow.rar (94.9 Кбайт, скачиваний: 215)
                          Я уточнил в каком окне - это SDI приложение то бишь - одно окно :D
                            Всем большое спасибо за помощь и советы - искренне благодарен
                              Цитата Kezya @
                              Если пытаешь изменить положение окна не из класса окна, то можно вот так:
                              ExpandedWrap disabled
                                    CMainFrame *pMainFrm = NULL;
                                    pMainFrm = (CMainFrame *)m_pMainWnd;
                                    if(pMainFrm != NULL);
                                      ::SetWindowPos(pMainFrm->m_hWnd,....

                              Компилятор ругается на m_pMainWnd - не знает что такое... Я все делаю в классе документ
                                ExpandedWrap disabled
                                  CMyApp* pApp = (CMyApp*)AfxGetApp();
                                  pMainFrm = (CMainFrame*)pApp->m_pMainWnd;
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0650 ]   [ 16 queries used ]   [ Generated: 8.09.25, 19:42 GMT ]