Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

CFrameWnd

1 view
Skip to first unread message

Valery

unread,
Jun 18, 2008, 3:51:03 AM6/18/08
to
Есть SDI приложение.
При нажатии элемента меню необходимо чтобы показывалось/пряталось
дочернее окно производное от CFrameWnd.
При созданнии членом класса CMainFrame
CFrameWnd childWnd;
Вылетает ошибка при вызове CFrameWnd::DestroyWindow();
В MSDN нашел что CFrameWnd нужно создавать динамически
(Верно ли это???)
При Код:
CFrameWnd * childWnd; //член класса CMainFrame


в конструкторе CMainFrame
.. Код:
childWnd=newCFrameWnd ;


в
CMainFrame::OnCreate
.. Код:
childWnd->Create(0,_T("output"))


..
при обработке пункта меню
Код:
if(childWnd->IsWindowVisible())
{
childWnd->ModifyStyle(WS_VISIBLE,NULL,0);
}
else
{
childWnd->ModifyStyle(NULL,WS_VISIBLE,0);
}

все нормально
но пользователь может убрать окно нажавши на крестик и все летит
модифицировал код

Код:
HWND hwnd=childWnd->GetSafeHwnd();
if(::IsWindow(hwnd))
{

if(childWnd>IsWindowVisible())
{
childWnd->ModifyStyle(WS_VISIBLE,NULL,0);
}
else
{
childWnd->ModifyStyle(NULL,WS_VISIBLE,0);
}

}
else
{
childWnd=new COutputFrameWnd;// может здесь быть утечка памяти???
childWnd->Create(0,_T("output"));
}

вобщем все работает но есть подозрение что должна быть утечка, хотя VS
ее не показывает
Вопрос как правильно сделать?
Еще один вопрос
Это окно должно вести себя так при таскании по экрану это должен быть
поплавок WS_POPUP ,при попадании в определенную область родительского
окна должно к нему приклеится стать WS_CHILD, а при двойном клике на
заголвке снова WS_POPUP
Кто-нибудь так делал?
С уважением Валерий

0 new messages