在 MFC 中,Tab 控件的每个页面都是一个独立的 Dialog 或者窗口,所以在切换到第二页后,如果想要操作第二页里面的控件,需要先获取第二页的窗口句柄,然后再通过窗口句柄来获取第二页里面的控件。

具体操作步骤如下:

1.获取 Tab 控件的第二页窗口句柄

在 MFC 中,可以使用 CPropertySheet 类和 CPropertyPage 类来创建 Tab 控件和 Tab 页。如果使用 CPropertySheet 类创建了 Tab 控件,则可以通过以下方法获取第二页窗口句柄:

CPropertySheet* pSheet = (CPropertySheet*)GetDlgItem(IDC_TAB_CONTROL);
HWND hWndPage2 = pSheet->GetPage(1)->GetSafeHwnd();

其中,GetDlgItem(IDC_TAB_CONTROL) 获取到 Tab 控件的句柄,GetPage(1) 获取到第二页的 CPropertyPage 对象,GetSafeHwnd() 获取到第二页窗口的句柄。

如果使用 CPropertyPage 类创建 Tab 页,则可以通过以下方法获取第二页窗口句柄:

CPropertyPage* pPage2 = GetDlgItem(IDD_PAGE2);
HWND hWndPage2 = pPage2->GetSafeHwnd();

其中,GetDlgItem(IDD_PAGE2) 获取到第二页的 CPropertyPage 对象,GetSafeHwnd() 获取到第二页窗口的句柄。

2.通过窗口句柄获取控件对象

获取到第二页窗口句柄后,就可以通过窗口句柄来获取第二页里面的控件了。例如,获取第二页里面一个 Edit 控件的方法如下:

HWND hWndEdit = ::GetDlgItem(hWndPage2, IDC_EDIT_CONTROL);
CEdit* pEdit = (CEdit*)CWnd::FromHandle(hWndEdit);

其中,::GetDlgItem(hWndPage2, IDC_EDIT_CONTROL) 获取到 Edit 控件的句柄,CWnd::FromHandle(hWndEdit) 将句柄转换成 CEdit 对象,这样就可以操作 Edit 控件了。

需要注意的是,如果想要获取第二页里面的控件,必须在切换到第二页后才能获取到窗口句柄和控件对象。如果在切换到第二页之前就获取窗口句柄和控件对象,会获取到第一页的窗口句柄和控件对象。

MFC Tab 控件切换页面后操作子控件方法

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

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