Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделение окна - CSplitterWnd, на три части слева 2, справа 1 
:(
    Опции темы
The Thing
Дата 26.8.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Привет всем!
задача такая:

Когда задача стоит разделить фрейм на 2е части, то:
Код

    m_wndSplitter.CreateStatic(this, 1, 2);
    
    m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTest01View),
        CSize(200, 200), pContext);
    m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyListView),
        CSize(200, 200), pContext);


а если надо одну из частей разделить еще на 2(или n) частей, то как это делается? так уже глупо..
Код

    m_wndSplitter.CreateStatic(this, 2, 2);
    ...



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Orlan
Дата 26.8.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



При помощи вложенных сплитеров. Делается еще один сплиттер, для той части, которую надо еще раз разделить. В примерах к MFC в МСДН видел такое.
Другой радикальный вариант - использовать менеджеры размещений (layout manager) ( http://codeproject.com )
Мне лично понравился этот, но он для ATL/WTL

Это сообщение отредактировал(а) Orlan - 26.8.2005, 14:38
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
The Thing
Дата 26.8.2005, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Orlan
Большое спасиба...


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
maq
Дата 10.1.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



А вот у меня вопрос полегче:

Нужно просто разделить SDI окно на 2 части, но этот код не работает:

Код

if(!m_Splitter.CreateStatic(this, 2, 1))
    return FALSE;

if(!m_Splitter.CreateView(0, 0, RUNTIME_CLASS(CMy01View), CSize(10,10), pContext))
    return FALSE;
    
if(!m_Splitter.CreateView(1, 0, RUNTIME_CLASS(CMy02Form), CSize(10,10), pContext))
    return FALSE;// возвращает TRUE, но View не создает


Т.е. работает, но не создает View для CMy02Form (который я создал позже!), даже FALSE не возвращает. Создает и показывает только CMy01View (который я создал на стадии AppWizard).

Даже не знаю почему?
В MSDN есть пример. Но он работает!
PM MAIL   Вверх
Бугемот
Дата 10.1.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.12.2005

Репутация: 1
Всего: 1



Попробуйте так:
Код

    if (!m_wndSplitter.CreateStatic(this, 2,1, WS_CHILD | WS_VISIBLE))
    {
        TRACE0("Failed to CreateStaticSplitter\n");
        return FALSE;
    }
    if (!m_wndSplitter.CreateView(0, 0,
        RUNTIME_CLASS(CMy01View), CSize(270, 0), pContext))
    {
        TRACE0("Failed to create first pane\n");
        return FALSE;
    }
    // add the second splitter pane - an output view in column 1
    if (!m_wndSplitter.CreateView(1, 0,
        RUNTIME_CLASS(CMy02Form), CSize(0, 0), pContext))
    {
        TRACE0("Failed to create second pane\n");
        return FALSE;
    }
    SetActiveView((CView*)m_wndSplitter.GetPane(0, 0));        

PM MAIL   Вверх
maq
Дата 10.1.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Не помогло! Все по-прежнему.
PM MAIL   Вверх
maq
Дата 12.1.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Oops! Я нашел-таки в чем дело! Надо было на стадии Wizard установить стиль Split Window.

Но тут другая проблема. У меня уже есть рабочая программа, где на стадии визарда стиль Split Window не был установлен. Как можно задать теперь этот стиль CFrameWnd? Не хочется переделывать всю программу с визарда опять! Смотрел все Window Styles в MSDN - не нашел ничего на split window.

Кто может подсказать как это сделать?
PM MAIL   Вверх
SeregaLBN
Дата 12.1.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Создаёшь первый пустой проект - всё по-умолчанию.
Создаёшь второй пустой проект - со стилем Split Window.
И сравниваешь их. Всё различие в:
Код

// MainFrm.h : interface of the CMainFrame class
...
class CMainFrame : public CFrameWnd
{
...
// Attributes
protected:
    CSplitterWnd m_wndSplitter;
...
// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMainFrame)
    public:
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
    ...
    //}}AFX_VIRTUAL
...
};

Код

// MainFrm.cpp : implementation of the CMainFrame class
...
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
    return m_wndSplitter.Create(this,
        2, 2,               // TODO: adjust the number of rows, columns
        CSize(10, 10),      // TODO: adjust the minimum pane size
        pContext);
}
...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.