На главную Наши проекты:
Журнал   ·   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
  
> Как программно изменить размер окна?
    Доброе время суток!

    Не подскажете, как изменить программно размер окна в 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 Кбайт, скачиваний: 288)
                      Цитата IEZ @
                      Но Russel, не упомянул для какого окно ему нужно изменить размер (родительское, дочернее).

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

                        Ну и что. Это только одна строка кода добавляется. И в конце концов выбор вариантов за Russel.
                        Вот тот же пример, но окно стоит как вкопаное, изменяя свои размеры.
                        Прикреплённый файлПрикреплённый файлMoveWindow.rar (94.9 Кбайт, скачиваний: 217)
                          Я уточнил в каком окне - это 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;
                                  Я уже давно догадался, что меня имеет это VC++6

                                  но теперь он не знает что такое CMyApp класс... ААААА
                                    Цитата Russel @
                                    но теперь он не знает что такое CMyApp класс... ААААА
                                    - блин.. при чем здесь студия?
                                    CMyApp - это класс твоего приложения, наследованый от:
                                    ExpandedWrap disabled
                                      class CMyApp : public CWinApp
                                    ;)

                                    Добавлено
                                    класс приложения у тебя есть однозначно ;) глянь как ты его там обозвал, или мастер нагенерил..
                                      РАБОТАЕТ УРА
                                        Russel, И что сделал?
                                          Russel, - партизан :) ни за что не признаеться..
                                            Привожу полный код:
                                            Приложение WinMine
                                            Rows & Columns - размеры поля программы САПЕР... вот и все

                                            ExpandedWrap disabled
                                              void CWinMineDoc::ChangeWindow(int Rows, int Columns)
                                              {
                                                  CWinMineApp* pApp = (CWinMineApp*)AfxGetApp();
                                                  CMainFrame *pMainFrm = NULL;
                                                  pMainFrm = (CMainFrame*)pApp->m_pMainWnd;
                                                  if(pMainFrm != NULL)
                                                      ::SetWindowPos(pMainFrm->m_hWnd, NULL, 0, 0, Columns*16+10, Rows*16+10+::GetSystemMetrics(SM_CYMENU)+::GetSystemMetrics(SM_CYCAPTION), SWP_NOMOVE | SWP_NOZORDER);
                                              }


                                            Всем спасибо за обсуждение
                                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                            0 пользователей:


                                            Рейтинг@Mail.ru
                                            [ Script execution time: 0,0487 ]   [ 15 queries used ]   [ Generated: 11.11.25, 18:53 GMT ]