PDA

View Full Version : راهنمایی در مورد CTabCtrl



حسین محمدی
یک شنبه 30 اردیبهشت 1386, 12:07 عصر
با سلام
از کلاس CTabCtrl یک آبجکت در برنامه ایجاد کرده ام ولی در مورد اینکه چگونه کنترلها را در صفحات آن نمایش دهم (هنگامی که کاربر بر روی tab ها کلیک می کند ) مشکل دارم. خواهشمند است راهنمایی کنید.
(آبجکت را توسط متد Create‌ایجاد کرده ام و Message ها را توسط متد OnNotify در کلاس Parent‌ آن دریافت و هندل می کنم)

pumper
شنبه 26 خرداد 1386, 01:45 صبح
باید اول 2 تا dialog ایجاد کنی و اونا رو از نوع child,no border تعریف کنی.
بعد یه متغیر به نام m_tab واسه کنترلت اضافه می کنی.
دو تا متغیر از نوع دیالمگات به کلاس اصلی اضافه کن.
و در تابع OnInitDialog

CRect tabrect;
m_tab.GetWindowRect(&tabrect);
m_tab.ScreenToClient(&tabrect);
m_tab.InsertItem(0,"ÕÝÍå 1");
m_tab.InsertItem(1,"ÕÝÍå 2");
m_p1=new CPage1;
m_p1->Create(IDD_DIALOGPAGE1,&m_tab);
m_p1->MoveWindow(tabrect.left+5,tabrect.top+25,tabrect.W idth()-10,tabrect.Height()-30);
m_p1->ShowWindow(SW_SHOW);
m_p2=new CPage2;
m_p2->Create(IDD_DIALOGPAGE2,&m_tab);
m_p2->MoveWindow(tabrect.left+5,tabrect.top+25,tabrect.W idth()-10,tabrect.Height()-30);
این دو تا تابع رو هم باید اضافه کنی
void CTabDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch(m_tab.GetCurSel())
{
case 0://page1
{
m_p1->ShowWindow(SW_SHOW);
m_p2->ShowWindow(SW_HIDE);
break;
}
case 1://page2
{
m_p2->ShowWindow(SW_SHOW);
m_p1->ShowWindow(SW_HIDE);
break;
}
}
*pResult = 0;
}

void CTabDlg::OnShow()
{
CString text,pagename;
switch(m_tab.GetCurSel())
{
case 0://page1
{
m_p1->UpdateData();
text=m_p1->m_text;
pagename="ÕÝÍå 1";
break;
}
case 1://page2
{
m_p2->UpdateData();
text=m_p2->m_text;
pagename="ÕÝÍå 2";
break;
}
}
MessageBox(text,pagename);
}
موفق باشی

حسین محمدی
چهارشنبه 30 خرداد 1386, 12:28 عصر
CRect tabrect;
m_tab.GetWindowRect(&tabrect);
m_tab.ScreenToClient(&tabrect);
m_tab.InsertItem(0,"ÕÝÍå 1");
m_tab.InsertItem(1,"ÕÝÍå 2");
m_p1=new CPage1;
m_p1->Create(IDD_DIALOGPAGE1,&m_tab);
m_p1->MoveWindow(tabrect.left+5,tabrect.top+25,tabrect. Width()-10,tabrect.Height()-30);
m_p1->ShowWindow(SW_SHOW);
m_p2=new CPage2;
m_p2->Create(IDD_DIALOGPAGE2,&m_tab);
m_p2->MoveWindow(tabrect.left+5,tabrect.top+25,tabrect. Width()-10,tabrect.Height()-30);
این دو تا تابع رو هم باید اضافه کنی
void CTabDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch(m_tab.GetCurSel())
{
case 0://page1
{
m_p1->ShowWindow(SW_SHOW);
m_p2->ShowWindow(SW_HIDE);
break;
}
case 1://page2
{
m_p2->ShowWindow(SW_SHOW);
m_p1->ShowWindow(SW_HIDE);
break;
}
}
*pResult = 0;
}

void CTabDlg::OnShow()
{
CString text,pagename;
switch(m_tab.GetCurSel())
{
case 0://page1
{
m_p1->UpdateData();
text=m_p1->m_text;
pagename="ÕÝÍå 1";
break;
}
case 1://page2
{
m_p2->UpdateData();
text=m_p2->m_text;
pagename="ÕÝÍå 2";
break;
}
}
MessageBox(text,pagename);
}

حسین محمدی
چهارشنبه 30 خرداد 1386, 12:34 عصر
با تشکر از جواب شما

دستور ScreenToClient چه کاری انجام میدهد؟