проблема с отображением закладок в CTabCtrl
От: AleP Россия  
Дата: 08.01.03 05:40
Оценка:
имеется TabControl с четырьмя закладками, в качестве закладок
диалоги, переключение между ними осуществляется с помощью
void CDocumentDlg::OnSelchangeTabsections(NMHDR* pNMHDR, LRESULT* pResult)
{
int iTab = m_pTabSections->GetCurSel();
TC_ITEM TabItem;
TabItem.mask = TCIF_PARAM;
m_pTabSections->GetItem(iTab, &TabItem);
CWnd* pWnd = (CWnd *)TabItem.lParam;
pWnd->ShowWindow(SW_SHOW);

*pResult = 0;
}
и
void CDocumentDlg::OnSelchangingTabsections(NMHDR* pNMHDR, LRESULT* pResult)
{
int iTab = m_pTabSections->GetCurSel();
TC_ITEM TabItem;
TabItem.mask = TCIF_PARAM;
m_pTabSections->GetItem(iTab, &TabItem);
CWnd* pWnd = (CWnd *)TabItem.lParam;
pWnd->ShowWindow(SW_HIDE);
*pResult = 0;
}
все работает.

по пункту меню должны меняться наименования закладок,
void CDocumentDlg::OnViewChanged(WPARAM wParam, LPARAM lParam)
{
USES_CONVERSION;
TC_ITEM TabItem;
for(int i=0; i<m_pTabSections->GetItemCount(); i++)
{
TabItem.mask = TCIF_PARAM;
m_pTabSections->GetItem(i, &TabItem);
CSection* pWnd = (CSection *)TabItem.lParam;
(pWnd->GetMLGrid())->ChangeView();

TabItem.mask = TCIF_TEXT;
m_pTabSections->GetItem(i, &TabItem);

TabItem.mask = TCIF_TEXT;
if(View == LOGICAL_VIEW)
TabItem.pszText = W2A(pWnd->GetSectionName());
else
TabItem.pszText = W2A(pWnd->GetSectionId());

m_pTabSections->SetItem(i, &TabItem);
}
}
названия меняются, а исчезает диалог текущей закладки, после переключения между закладками диалог появляется.
Re: проблема с отображением закладок в CTabCtrl
От: is  
Дата: 08.01.03 17:51
Оценка:
Здравствуйте, AleP, Вы писали:

AP>названия меняются, а исчезает диалог текущей закладки, после переключения между закладками диалог появляется.


Да, есть такая фишка.
Попробуй

SetActivePage(GetActivePage());


... << RSDN@Home 1.0 beta 4 >> Motion Picture Soundtrack — Sycamore Trees
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein
Re[2]: проблема с отображением закладок в CTabCtrl
От: AleP Россия  
Дата: 09.01.03 05:08
Оценка:
Здравствуйте, is, Вы писали:

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


AP>>названия меняются, а исчезает диалог текущей закладки, после переключения между закладками диалог появляется.


is>Да, есть такая фишка.

is>Попробуй

is>
is>SetActivePage(GetActivePage());
is>


is>



Это невозможно сделать пооскольку у меня используется не CPropertySheet, а CTabCtrl
Даже же если я после изменения названий закладок, делаю текущую закладку снова активной и отображаю диалог, он появляется и тут же исчезает.
void CDocumentDlg::OnViewChanged(WPARAM wParam, LPARAM lParam)
{
USES_CONVERSION;
int SelTab = m_pTabSections->GetCurSel();
if(SelTab == -1)
SelTab = 0;

TC_ITEM TabItem;

for(int i=0; i<m_pTabSections->GetItemCount(); i++)
{
TabItem.mask = TCIF_PARAM;
m_pTabSections->GetItem(i, &TabItem);
CMLSection* pWnd = (CMLSection *)TabItem.lParam;

TabItem.mask = TCIF_TEXT;
m_pTabSections->GetItem(i, &TabItem);

TabItem.mask = TCIF_TEXT;
if(View == LOGICAL_VIEW)
TabItem.pszText = W2A(pWnd->GetSectionName());
else
TabItem.pszText = W2A(pWnd->GetSectionId());

m_pTabSections->SetItem(i, &TabItem);
}

m_pTabSections->SetCurSel(SelTab);
TabItem.mask = TCIF_PARAM;
m_pTabSections->GetItem(SelTab, &TabItem);
CWnd* pWnd = (CWnd *)TabItem.lParam;
pWnd->ShowWindow(SW_SHOW);
}
Re[3]: проблема с отображением закладок в CTabCtrl
От: SlaG  
Дата: 10.01.03 08:52
Оценка:
Может быть проблема в иерархии:
1.Диалоги(pages) должны иметь стиль WS_CHILD
2.Parent window для них должен быть tab control
Re[3]: проблема с отображением закладок в CTabCtrl
От: is  
Дата: 10.01.03 09:42
Оценка:
Здравствуйте, AleP, Вы писали:

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


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


AP>>>названия меняются, а исчезает диалог текущей закладки, после переключения между закладками диалог появляется.


is>>Да, есть такая фишка.

is>>Попробуй

is>>
is>>SetActivePage(GetActivePage());
is>>


is>>


AP>

AP>Это невозможно сделать пооскольку у меня используется не CPropertySheet, а CTabCtrl

Да, это для CPropertySheet, но никто не мешает тебе повторить это и для CTabCtrl
Например, посылкой сообщений TCM_GETCURSEL и TCM_SETCURSEL, либо макросов (будет работать не только для MFC , либо вызовом соответсвующих членов CTabCtrl.


AP>Даже же если я после изменения названий закладок, делаю текущую закладку снова активной и отображаю диалог, он появляется и тут же исчезает.


Попробуй убрать то, что закоментировано.

void CDocumentDlg::OnViewChanged(WPARAM wParam, LPARAM lParam)
{
    USES_CONVERSION;
    int SelTab = m_pTabSections->GetCurSel();
    if(SelTab == -1)
        SelTab = 0;

    TC_ITEM TabItem;

    for(int i=0; i<m_pTabSections->GetItemCount(); i++)
    {
        TabItem.mask = TCIF_PARAM;
        m_pTabSections->GetItem(i, &TabItem);
        CMLSection* pWnd = (CMLSection *)TabItem.lParam;

        TabItem.mask = TCIF_TEXT;
        m_pTabSections->GetItem(i, &TabItem);

        TabItem.mask = TCIF_TEXT;
        if(View == LOGICAL_VIEW)
            TabItem.pszText = W2A(pWnd->GetSectionName()); 
        else
            TabItem.pszText = W2A(pWnd->GetSectionId());
        
        m_pTabSections->SetItem(i, &TabItem);
    }
    
    m_pTabSections->SetCurSel(SelTab);
    TabItem.mask = TCIF_PARAM;
    m_pTabSections->GetItem(SelTab, &TabItem);
    // А это зачем?
    //CWnd* pWnd = (CWnd *)TabItem.lParam;
    //pWnd->ShowWindow(SW_SHOW); 
}
... Enigma — The Screen Behind The Mirror
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein
Re[4]: проблема с отображением закладок в CTabCtrl
От: AleP Россия  
Дата: 14.01.03 06:56
Оценка:
Здравствуйте, SlaG, Вы писали:

SG>Может быть проблема в иерархии:

SG>1.Диалоги(pages) должны иметь стиль WS_CHILD
SG>2.Parent window для них должен быть tab control

с этим вроде все в порядке
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.