#undef UNICODE #undef _UNICODE #include <windows.h> #include <commctrl.h> #include "resource.h" BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { TCITEM item; RECT rcClient, rcTab; static HWND hTabCtl; static HWND hPage[2]; //与选项卡index对应,方便操作 static int curPage = 0; switch ( uMsg ) { case WM_INITDIALOG: { hTabCtl = GetDlgItem(hwndDlg, IDC_TAB1); item.mask = TCIF_TEXT; //添加两个选项卡 item.pszText = "Tab1"; TabCtrl_InsertItem(hTabCtl, 0, &item ); item.pszText = "Tab2"; TabCtrl_InsertItem(hTabCtl, 1, &item ); GetClientRect(hTabCtl, &rcClient); //显示区域矩形 SendMessage(hTabCtl, TCM_GETITEMRECT, 0, (LPARAM)&rcTab); //Tab矩形 hPage[0] = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PAGE1), hTabCtl, NULL); hPage[1] = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PAGE2), hTabCtl, NULL); ShowWindow(hPage[0], SW_SHOW); ShowWindow(hPage[1], SW_SHOW); //重新摆放两个子对话框 SetWindowPos(hPage[0], NULL, \ rcTab.left-1, rcTab.bottom+1, \ rcClient.right-rcTab.left-1, rcClient.bottom-rcTab.bottom-3, \ SWP_SHOWWINDOW); SetWindowPos(hPage[1], NULL, \ rcTab.left-1, rcTab.bottom+1, \ rcClient.right-rcTab.left-1, rcClient.bottom-rcTab.bottom-3, \ SWP_SHOWWINDOW); } break; case WM_NOTIFY: if ( IDC_TAB1 == wParam ) { if ( TCN_SELCHANGE == ((LPNMHDR)lParam)->code ) { int i = 0; i = SendMessage(hTabCtl, TCM_GETCURFOCUS, 0, 0 ); if ( i != curPage ) { ShowWindow(hPage[curPage], SW_HIDE); curPage = i; ShowWindow(hPage[i], SW_SHOW); } } } break; case WM_CLOSE: EndDialog(hwndDlg, 0); break; } return FALSE; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc ); return 0; }
rc文件:
IDD_DIALOG1 DIALOGEX 0, 0, 316, 186 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "OK",IDOK,205,165,50,14 PUSHBUTTON "Cancel",IDCANCEL,259,165,50,14 CONTROL "",IDC_TAB1,"SysTabControl32",0x0,7,17,302,140 END IDD_PAGE1 DIALOGEX 0, 0, 240, 98 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "第一页",IDC_STATIC,115,50,29,8 END IDD_PAGE2 DIALOGEX 0, 0, 243, 96 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "第二页",IDC_STATIC,115,50,29,8 END