在MFC主窗口中操作TAB控件的两个子页里面的控件可以通过以下步骤实现:

  1. 在MFC主窗口的类中添加成员变量,分别表示TAB控件和两个子页。
CTabCtrl m_TabCtrl;
CDialogEx m_Page1;
CDialogEx m_Page2;
  1. 在主窗口的OnInitDialog()函数中,分别创建TAB控件和两个子页。
m_TabCtrl.Create(TCS_TABS | WS_CHILD | WS_VISIBLE, CRect(0, 0, 300, 200), this, 1);
m_TabCtrl.InsertItem(0, _T("Page 1"));
m_TabCtrl.InsertItem(1, _T("Page 2"));

m_Page1.Create(IDD_DIALOG_PAGE1, &m_TabCtrl);
m_Page1.SetParent(&m_TabCtrl);
m_Page1.ShowWindow(SW_SHOW);

m_Page2.Create(IDD_DIALOG_PAGE2, &m_TabCtrl);
m_Page2.SetParent(&m_TabCtrl);
m_Page2.ShowWindow(SW_HIDE);
  1. 在TAB控件的OnSelChange()函数中,根据当前选择的子页,显示或隐藏对应的子页。
void CMyDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
    int nSel = m_TabCtrl.GetCurSel();
    switch (nSel)
    {
    case 0:
        m_Page1.ShowWindow(SW_SHOW);
        m_Page2.ShowWindow(SW_HIDE);
        break;
    case 1:
        m_Page1.ShowWindow(SW_HIDE);
        m_Page2.ShowWindow(SW_SHOW);
        break;
    }
    *pResult = 0;
}
  1. 在子页类中添加控件的成员变量,并通过DoDataExchange()函数关联控件和变量。
class CPage1 : public CDialogEx
{
public:
    CPage1(CWnd* pParent = nullptr);

#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DIALOG_PAGE1 };
#endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()

public:
    CEdit m_Edit;
};

void CPage1::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT, m_Edit);
}
  1. 在子页类中添加控件的消息处理函数,对控件进行操作。
void CPage1::OnBnClickedButton()
{
    CString str;
    m_Edit.GetWindowText(str);
    str.MakeUpper();
    m_Edit.SetWindowText(str);
}

通过以上步骤,就可以在MFC主窗口中操作TAB控件的两个子页里面的控件了。在TAB控件的OnSelChange()函数中,根据当前选择的子页,显示或隐藏对应的子页,在子页类中添加控件的成员变量,并通过DoDataExchange()函数关联控件和变量,在子页类中添加控件的消息处理函数,对控件进行操作

MFC的主窗口里面的一个控件如何操作TAB控件两个子页里面的控件

原文地址: https://www.cveoy.top/t/topic/gonP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录