在dialog中創建一個tab,怎么得到tab中的數據返回到另一個dialog中?


	CMyOpt mo;
IsUseIE==1?(mo.os0.i_RadioIE=0):(mo.os0.i_RadioIE=1);
b_DoubleClickRight==1?(mo.os0.m_DbRight=1):(mo.os0.m_DbRight=0);
b_UseImg==1?(mo.os0.m_UseImg=1):(mo.os0.m_UseImg=0);
if(mo.DoModal()==IDOK)
{ UpdateData()
                if(mo.os0.r_UseIE()==1)
IsUseIE=0;
else
IsUseIE=1;
if(mo.os0.m_DbRight==1)
b_DoubleClickRight=1;
else  if(mo.os0.m_DbRight==0)
b_DoubleClickRight=0;
if(mo.os0.m_UseImg==1)
b_UseImg=1;
else   if(mo.os0.m_UseImg==0)
b_UseImg=0;
                UpdateData(0);
Invalidate();
}


os0是CMyOpt這個設置對話框的tab里的第一個子窗口,現在我可以設置os0里的數據,
可是卻不能得到os0里的數據,得到的Radio button或check button的值始終為0,這是什么原因??????

9 个解决方案

#1


os0 可以提供一個public函數,這個函數內部 GetCheck,查詢對應的控件的值,然后返回這個值..

#2


上面的方法我試過了,我彈出出錯對話框

#3


出錯對話框是你的代碼操作有問題,os0的對話框對象指針等不對..

#4


int COptSystem::r_UseIE()
{  int   iRadioButton;   
   iRadioButton=GetCheckedRadioButton(IDC_RADIO_IE,IDC_RADIO_BS);   
if(iRadioButton==IDC_RADIO_IE)
return 0;
else
return 1;
//UpdateData();
}

或者是:
int COptSystem::r_UseIE()
{UpdateData();
return i_RadioIE;
}

都會出錯,UpdateData更新數據出錯,如果不updateData數據又是原來那個,沒有改變

#5


DoModal返回后,對話框已經都銷毀了,沒法再取上面的數據,你可以給控件關聯變量,在DoModal返回IDOK后直接取變量的值。對於不能關聯變量的控件,可以定義public成員變量,重載OnOK函數,自己獲取有關數據保存在變量里面。

#6


GetCheckedRadioButton 返回的是什么,是否正確選擇了

#7


那個也是出錯,都是返回0

#8


返回值: 當有被選中的單選框時返回被選中的單選框的ID ,如果所給的組中都沒被選中則返回0

#9


BOOL CMyOpt::OnInitDialog() 
{
CDialog::OnInitDialog();
/* pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON4));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON3));

m_TabOpt.SetImageList(pImageList);
*/
m_TabOpt.InsertItem(0,"系統設置(Opt)         ");
m_TabOpt.InsertItem(1,"搜索引擎(&Engine)     ");
m_TabOpt.InsertItem(2,"關鍵詞KeyWord 網站Site");


os0.Create(IDD_DIALOG_SYSTEM,GetDlgItem(IDC_TAB_OPT));
oe1.Create(IDD_DIALOG_ENGINE,GetDlgItem(IDC_TAB_OPT));
oks2.Create(IDD_DIALOG_KEYSITE,GetDlgItem(IDC_TAB_OPT));
   CRect rs;
    m_TabOpt.GetClientRect(rs);
    rs.top+=20;
    rs.bottom-=4;
    rs.left+=4;
    rs.right-=4;

    os0.MoveWindow(rs);
oe1.MoveWindow(rs);
oks2.MoveWindow(rs);
    m_TabOpt.SetCurSel(GetTabSel());
switch(GetTabSel())
{
case 0:
os0.ShowWindow(1);
break;
case 1:
oe1.ShowWindow(1);
break;
case 2:
oks2.ShowWindow(1);
break;
default:
break;
}
return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMyOpt::OnSelchangeTabOpt(NMHDR* pNMHDR, LRESULT* pResult) 
{
int CurSel;
    CurSel=m_TabOpt.GetCurSel();
    switch(CurSel)
    {
    case 0:
        os0.ShowWindow(TRUE);
        oe1.ShowWindow(FALSE);
        oks2.ShowWindow(FALSE);
        os0.SetFocus();
        break;
    case 1:
        os0.ShowWindow(FALSE);
        oe1.ShowWindow(TRUE);
        oks2.ShowWindow(FALSE);
        oe1.SetFocus();
        break;
    case 2:
        os0.ShowWindow(0);
        oe1.ShowWindow(0);
oks2.ShowWindow(1);
        oks2.SetFocus();
        break;
  default:
break;
    }
*pResult = 0;
}

int CMyOpt::GetTabSel()
{
return  OptTabSel;
}

void CMyOpt::SetTabSel(int num)
{
OptTabSel=num;
}
只好不用Tab,就OK了;如果用Tab,有什么解決辦法沒????

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com