Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > CFrameWnd & CSplitterWnd


Автор: patt 23.4.2005, 21:43
Мажно ли из диалогового приложения по нажатию кнопки вызвать окно CFrameWnd, разделённое CSplitter'ом, если да, то почему не работает?:

void CServDlg::OnBnClickedButton3()
{
frm.Create(NULL,"MY");
frm.ShowWindow(SW_SHOW);
}
------------------------------------------------------
void Frame::OnShowWindow(BOOL bShow, UINT nStatus)
{
CFrameWnd::OnShowWindow(bShow, nStatus);
CCreateContext *pContext;
if(!spliter.CreateStatic(this, 1, 2))
return;
if(!spliter.CreateView(0, 0, RUNTIME_CLASS(CFrameWnd), CSize(200, 300), pContext) || !spliter.CreateView(0, 1, RUNTIME_CLASS(CFrameWnd), CSize(100,100), pContext))
return;

}

smile

Автор: Step 25.4.2005, 09:23

Цитата(patt @ 23.4.2005, 21:43)
void Frame::OnShowWindow(BOOL bShow, UINT nStatus)
{

уже поздно
в прекреате, или хотябы в онкреате
Цитата(patt @ 23.4.2005, 21:43)
CCreateContext *pContext;

в месте где вы используете pContext-нулевой его надо проинициализровать указать куда присобачить и т.д. посмотрите поля

надо хотя бы вот так
Код

CCreateContext CreateCont;
        CreateCont.m_pCurrentDoc=NULL;//если есть документ то присобачить
        CreateCont.m_pCurrentFrame=this; //какому фрейму пренадлежит
        CreateCont.m_pLastView=NULL;
        CreateCont.m_pNewDocTemplate=NULL;    //если есть документ то присобачить
        CreateCont.m_pNewViewClass=// а сюда в твоем случае наверное нужно 0, точно не помню

Автор: patt 25.4.2005, 21:01
Cо сплитером похоже разобрался, теперь фрейм появляется, но при закрытии выдаёт ошибку - видимо потому что пытается выгрузить всё приложение (если сначала закрыть диалоговое окно то работает) код тот же :

void CServDlg::OnBnClickedButton3()
{
frm.Create(NULL,"MY");
frm.ShowWindow(SW_SHOW);
}

Автор: Step 26.4.2005, 09:06
patt,
Цитата(patt @ 23.4.2005, 21:43)
f(!spliter.CreateView(0, 0, RUNTIME_CLASS(CFrameWnd), CSize(200, 300), pContext) || !spliter.CreateView(0, 1, RUNTIME_CLASS(CFrameWnd), CSize(100,100), pContext))

Создаеться два обинаковых экземпляра фрейма и вида - одинаковых


При выходе пытается удалить первый который и удаляет его вместе со вторым а потом пытаеться удалить второй, которого уже нету

Автор: patt 26.4.2005, 17:30
Step,

Похоже здесь дело не в этом: ошибка появляется если создаётся фреймовое окно, даже если убрать сплитер и всё остальное:


frm - экземпляр класса CFrameWnd или наследника от CFrameWnd (пробовал и так и так), обьявлен в хэдере;

frm.Create(NULL,"MY");
frm.ShowWindow(SW_SHOW); smile

Автор: Step 26.4.2005, 17:35
у меня была такая проблема, вот когда я сделал два класа фрейма, и создовал виды на их основе и в одном фрейме переопределял вид как написанно в моей статье то все стало как положено

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)