如何在选项卡控件对象中当前打开的选项卡内设置另一个对话框可见?
我在 Visual Studio 2008 资源编辑器中创建选项卡控件(或者它是如何命名的?),我为选项卡控件创建了 IDD_FORMVIEW
对话框。
我知道如何初始化选项卡文本、使用 WM_NOTIFY
消息处理当前选定的选项卡等,但我缺少的是:如何将其他对话框的句柄发送到选项卡控件页面在那里显示对话框?
最佳答案
所有作为对话框的“标签页”都应设置为所创建标签的子项。更改选项卡时,您将收到一条通知消息,您可以像这样在 DialogProc 中处理该消息:
case WM_NOTIFY: {
switch( ( ( LPNMHDR ) lParam) -> code ) {
case TCN_SELCHANGE: {
if( TabCtrl_GetCurSel( ( ( LPNMHDR ) lParam) -> hwndFrom ) == 0 ) {
ShowWindow( hwndPathSettings, SW_SHOW );
ShowWindow( hwndStartSettings, SW_HIDE );
} else {
ShowWindow( hwndPathSettings, SW_HIDE );
ShowWindow( hwndStartSettings, SW_SHOW );
}
break;
}
如您所见,当用户更改选项卡时,代码会显示新选项卡子项并隐藏旧选项卡。在这种情况下,hwndPathSettings 和 hwndStartSettings 是子对话框的窗口句柄。
在上下文中,在您的 WM_INITDIALOG 中,您可能有一些类似于此的代码来设置选项卡:
HWND hwndTab = GetDlgItem( hwndDlg, IDC_TAB );
TCITEM tci = {0};
tci.mask = TCIF_TEXT;
tci.pszText = _T("Path");
TabCtrl_InsertItem( hwndTab, 0, &tci );
tci.pszText = _T("Run on Start");
TabCtrl_InsertItem( hwndTab, 1, &tci );
hwndPathSettings = CreateDialogParam( GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_PATHSETTINGS ), hwndTab, PathSettingsProc, lParam );
hwndStartSettings = CreateDialog( GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_STARTSETTINGS ), hwndTab, StartSettingsProc );
break;
关于c++ - 如何在选项卡控件页面内显示对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237577/