Witam!
Mam następujący problem i proszę o pomoc.
Tworzę okno dialogowe ?Ustawienia? mające umożliwiać konfigurację ustawień wyświetlania i wczytywania plików w aplikacji MDI.
Ponieważ opcji jest sporo i dodatkowo są one podzielone na kategorie postanowiłem użyć kontrolkę CTabCtrl. Mój sposób wykorzystania CTabCtrl miał polegać na stworzeniu kilku okien dialogowych typu child i wyświetlanie ich na odpowiednich zakładkach. W tym celu stworzyłem prostą klasę dziedziczącą publicznie po CTabCtrl i dorzuciłem jej metodę obsługującą wyświetlanie odpowiednich dialogów w obszarze CTabCtrl. Wszystko jest pięknie i ładnie do momentu, gdy nie nacisnę przycisku Enter w czasie edycji ustawień na oknie dialogowych wrzuconym do CTabCtrl, w tym momencie okno to znika (okno główne ?Ustawienia? jak i kontrolka CTabCtrl są dalej widoczne ? brak tylko wyświetlanego wcześniej w danej zakładce okna typu child) .
Nie mogę dojść dla czego tak się dzieje i gdzie jest błąd.
Proszę wiec o pomoc i z góry dziękuję za zainteresowanie.
P.S. - Piszę w VSC++ 2005 (z wykorzystaniem MFC)
Oto kod klasy dziedziczącej po CTabCtrl
CSettingTab::CSettingTab()
{
m_nLastIndex =0;
m_pTabDlg[0] = NULL;
}
CSettingTab::~CSettingTab()
{
for(int i = 0; i < TABSETTINGCOUNT; i++)
{
delete m_pTabDlg[i];
m_pTabDlg[i] = NULL;
}
}
BEGIN_MESSAGE_MAP(CSettingTab, CTabCtrl)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
// CSettingTab message handlers
BOOL CSettingTab::Initial()
{
BOOL bResult = true;
m_pTabDlg[0] = new CSettingTab1();
for(int i = 0; i < TABSETTINGCOUNT && bResult; i++)
{
if((bResult = m_pTabDlg[i]->Create(IDD_SETTINGTAB1,this)))
{
m_pTabDlg[i]->SetParent(this);
}
}
if(!bResult)
return bResult;
//Ukrywa wszystkie okna poza pierwszym
m_pTabDlg[0]->ShowWindow(SW_SHOW);
for(int i =1; i < TABSETTINGCOUNT; i++)
m_pTabDlg[i]->ShowWindow(SW_HIDE);
this->SetCurSel(0);
if(bResult)
SetRectangle();
return bResult;
}
void CSettingTab::SetRectangle()
{
CRect tabRect, itemRect;
int nX, nY, nXc, nYc;
GetClientRect(&tabRect);
GetItemRect(0,&itemRect);
nX = itemRect.left + 3;
nY = itemRect.bottom + 5;
nXc = tabRect.right - itemRect.left -4;
nYc = tabRect.bottom - nY - 1;
//Ustalenie pozycji okien
m_pTabDlg[0]->SetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_SHOWWINDOW);
for(int i = 0; i < TABSETTINGCOUNT; i++)
m_pTabDlg[i]->SetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_HIDEWINDOW);
m_pTabDlg[0]->ShowWindow(SW_SHOW);
}
void CSettingTab::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTabCtrl::OnLButtonDown(nFlags, point);
//sprawdzam które zakładka została naciśnięta
int nIndex = GetCurFocus();
if(nIndex != m_nLastIndex)
{
m_pTabDlg[m_nLastIndex]->ShowWindow(SW_HIDE);
m_pTabDlg[nIndex]->ShowWindow(SW_SHOW);
m_nLastIndex = nIndex;
}
CTabCtrl::OnLButtonDown(nFlags, point);
}
P.S.2
W tej chwili jest tylko jedna zakładka.
Nie dodawałem ich na razie więcej nie mogąc poradzić sobie z problemem znikania okna.