#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