как создать подобное окно?...
От: anonymous Россия http://denis.ibaev.name/
Дата: 20.07.05 11:23
Оценка:
как создать такое окно:
+-----------------------------+
| Menu                        |
+-----------------------------+
| Dialog Bar                  |
+--------------+--------------+
| Tree View    | Form View    |
|              |              |
|              |              |
|              |              |
+--------------+--------------+

причём Form View должен быть фиксированной ширины...
Re: как создать подобное окно?...
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 20.07.05 12:08
Оценка:
Здравствуйте, anonymous, Вы писали:

A>как создать такое окно:


М-м-м... нужен список "ключевых слов" или более-менее связный набросок кода?
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[2]: как создать подобное окно?...
От: anonymous Россия http://denis.ibaev.name/
Дата: 20.07.05 12:28
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

A>>как создать такое окно:

SDB>М-м-м... нужен список "ключевых слов" или более-менее связный набросок кода?

как это ни нагло, но второе... )
просто с MFC до этого не сталкивался, а с исходником будет проще разбираться...
Re[3]: как создать подобное окно?...
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 20.07.05 12:43
Оценка:
Здравствуйте, anonymous, Вы писали:

A>как это ни нагло, но второе... )


Если у меня вечером будет время и никто до той поры не отзовется — постараюсь набросать, там ничего сложного, в принципе, нет.

A>просто с MFC до этого не сталкивался, а с исходником будет проще разбираться...


Ой, не факт (ИМХО).
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[4]: как создать подобное окно?...
От: anonymous Россия http://denis.ibaev.name/
Дата: 20.07.05 13:33
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

A>>как это ни нагло, но второе... )

SDB>Если у меня вечером будет время и никто до той поры не отзовется — постараюсь набросать, там ничего сложного, в принципе, нет.

спасибо... буду ждать...

A>>просто с MFC до этого не сталкивался, а с исходником будет проще разбираться...

SDB>Ой, не факт (ИМХО).

ну это скорее всего личное... мне зачастую проще изучать предмет на основе исходников...
Re: как создать подобное окно?...
От: kmn Украина  
Дата: 20.07.05 14:25
Оценка: 18 (1)
Здравствуйте, anonymous, Вы писали:

A>как создать такое окно:

A>
A>+-----------------------------+
A>| Menu                        |
A>+-----------------------------+
A>| Dialog Bar                  |
A>+--------------+--------------+
A>| Tree View    | Form View    |
A>|              |              |
A>|              |              |
A>|              |              |
A>+--------------+--------------+
A>

A>причём Form View должен быть фиксированной ширины...

Где-то так:
Все самое интересное выделено жирным

// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Test.h"

#include "MainFrm.h"
#include "LeftView.h"
#include "TestView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
        // NOTE - the ClassWizard will add and remove mapping macros here.
        //    DO NOT EDIT what you see in these blocks of generated code !
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
    ID_SEPARATOR,           // status line indicator
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
    // TODO: add member initialization code here
    
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create
    }

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Failed to create status bar\n");
        return -1;      // fail to create
    }
    // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);


    //    Создаем диалог-бар
    if (!m_wndDialog.Create(this, IDD_DIALOGBAR, 
        WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER, AFX_IDW_DIALOGBAR))
    {
        TRACE0("Failed to create dialog bar\n");
        return FALSE;
    }

    //    Эти две строчки для того, чтобы он докился
    m_wndDialog.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
    DockControlBar(&m_wndDialog);


    return 0;
}


BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
    //    Сознательно создаем виды с идентификаторами отличными от AFX_IDW_PANE_FIRST
    //    т.к. MFC автоматом растягивает его на всю клиентскую часть фрейма не занятую барами.

    //    Создаем левый  вид (ДЕРЕВО)
    pContext->m_pNewViewClass = RUNTIME_CLASS(CTreeView);
    if (!CreateView(pContext, AFX_IDW_PANE_FIRST + 1))
        return FALSE;

    //    Создаем правый вид (ФОРМУ)
    pContext->m_pNewViewClass = RUNTIME_CLASS(CTestView);
    CWnd * pRightWnd = CreateView(pContext, AFX_IDW_PANE_FIRST + 2);
    if (pRightWnd == NULL)
        return FALSE;

    //    Вычисляем и запоминаем размер формы с учетом всевозможных бордюров и прочих рюшечек
    CRect rect(0, 0, 0, 0);
    m_iFormWidth = STATIC_DOWNCAST(CScrollView, pRightWnd)->GetTotalSize().cx;
    ::AdjustWindowRectEx(&rect, pRightWnd->GetStyle(), FALSE, pRightWnd->GetExStyle());
    m_iFormWidth += rect.Width();

    return TRUE;
}


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;

    cs.style |= WS_CLIPCHILDREN;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
    CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
    CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers



void CMainFrame::RecalcLayout(BOOL bNotify) 
{
    // TODO: Add your specialized code here and/or call the base class
    CFrameWnd::RecalcLayout(bNotify);

    HWND hLeftWnd = ::GetDlgItem(m_hWnd, AFX_IDW_PANE_FIRST+1);
    HWND hRightWnd = ::GetDlgItem(m_hWnd, AFX_IDW_PANE_FIRST+2);
    if (hLeftWnd && hRightWnd)
    {
        //    Запрашиваем прямоугольник не занятый всевозможными барами
        CRect rect(0, 0, 0, 0);
        RepositionBars(0, 0xffff, 0xffff, reposQuery, &rect);

        //    Сами позиционируем наши виды
        ::SetWindowPos
            (
            hRightWnd,
            NULL,
            rect.right - m_iFormWidth,
            rect.top,
            m_iFormWidth,
            rect.Height(),
            SWP_NOZORDER
            );

        ::SetWindowPos
            (
            hLeftWnd,
            NULL,
            rect.left,
            rect.top,
            max(rect.right - m_iFormWidth - rect.left, 0),
            rect.Height(),
            SWP_NOZORDER
            );
    }
}
Re[2]: как создать подобное окно?...
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.07.05 08:14
Оценка:
Здравствуйте, kmn, Вы писали:

у меня в функции pContext равен нулю, соответственно ничего не выходит...
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CreateContext* pContext)
{
    pContext->m_pNewViewClass = RUNTIME_CLASS(CTreeView);
    if (!CreateView(pContext, AFX_IDW_PANE_FIRST + 1))
        return FALSE;
Re[3]: как создать подобное окно?...
От: kmn Украина  
Дата: 21.07.05 08:35
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, kmn, Вы писали:


A>у меня в функции pContext равен нулю, соответственно ничего не выходит...

A>
A>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CreateContext* pContext)
A>{
A>    pContext->m_pNewViewClass = RUNTIME_CLASS(CTreeView);
A>    if (!CreateView(pContext, AFX_IDW_PANE_FIRST + 1))
A>        return FALSE;
A>


Значит у вас не doc/view приложение!
но это и не важно.
Создайте эти окна любым другим способом с указанными идентификаторами.
Re[4]: как создать подобное окно?...
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.07.05 11:04
Оценка:
Здравствуйте, kmn, Вы писали:

kmn>Значит у вас не doc/view приложение!


точно...

kmn>но это и не важно.

kmn>Создайте эти окна любым другим способом с указанными идентификаторами.

не удалось ни как, даже в document/view-приложении... можно взглянуть на весь проект?...
Re[5]: как создать подобное окно?...
От: kmn Украина  
Дата: 21.07.05 11:43
Оценка: 12 (1)
Здравствуйте, anonymous, Вы писали:

A>не удалось ни как, даже в document/view-приложении... можно взглянуть на весь проект?...

здесь
Re[4]: как создать подобное окно?...
От: Socrat Россия  
Дата: 03.08.05 14:00
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, kmn, Вы писали:

kmn>Значит у вас не doc/view приложение!

kmn>но это и не важно.
kmn>Создайте эти окна любым другим способом с указанными идентификаторами.

Можно примерчик без doc/view?
[от модератора]
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 03.08.05 14:14
Оценка:
Убедительная просьба — следить за объемом цитирования.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.