Sample9

[新しいコモンコントロール]



//--------------------------------------------------------------------------------
//
//【ToolBar】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
static TBBUTTON g_tbbutton[] = 
{
	{ 0, IDM_NEW,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
	{ 1, IDM_OPEN,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
	{ 2, IDM_SAVE,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
	{ 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0 },
	{ 3, IDM_ABOUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
} ;
/////////////////////////////////////////////////////////////////////////////
// メインウィンドウプロシージャ内のWM_CREATEハンドラ部分

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_CREATE :
			RECT rcToolBar ;
			LONG lStyle ;

			// ツールバーの作成
			// g_hwndToolBarはHWND型のグローバル変数
			g_hwndToolBar = CreateToolbarEx(hWnd, 
				WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN |CCS_NOMOVEY | CCS_NODIVIDER|CCS_NORESIZE, 
				IDC_TOOLBAR, 8, g_hInstance, IDB_TOOLBAR, g_tbbutton, sizeof(g_tbbutton)/sizeof(TBBUTTON), 
				16, 15, 16*3, 15, sizeof(TBBUTTON)) ;

			// ToolBarCtrlの現在のウィンドウスタイルを取得
			lStyle = GetWindowLong(g_hwndToolBar, GWL_STYLE) ;
			// TBSTYLE_FLATスタイルを指定
			lStyle |= TBSTYLE_FLAT ;
			// 新しいウィンドウスタイルを設定
			SetWindowLong(g_hwndToolBar, GWL_STYLE, lStyle) ;

			// ホット状態のイメージリストを作成
			// g_imlはHIMAGELIST型のグローバル変数
			// g_hInstanceはイメージリストを保持するインスタンスハンドル
			g_iml = ImageList_LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_TOOLHOT), 16, 8, 0xc0c0c0) ;

			// ホットイメージリストをツールバーに割り当てる
			SendMessage(g_hwndToolBar, TB_SETHOTIMAGELIST, 0, (LPARAM)g_iml) ;
			return 0 ;
	}
	return 0 ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_CREATEハンドラ関数

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if(CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1 ;
	
	if(!m_wndToolBar.Create(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){
		TRACE0("Failed to create toolbar\n") ;
		return -1 ;		// fail to create
	}
	// ツールバーからToolBarCtrlのウィンドウハンドルを取得
	HWND hwndToolBarCtrl = m_wndToolBar.GetToolBarCtrl().m_hWnd ;
	// ToolBarCtrlの現在のウィンドウスタイルを取得
	LONG lStyle = GetWindowLong(hwndToolBarCtrl, GWL_STYLE) ;
	// TBSTYLE_FLATスタイルを指定
	lStyle |= TBSTYLE_FLAT ;
	// 新しいウィンドウスタイルを設定
	SetWindowLong(hwndToolBarCtrl, GWL_STYLE, lStyle) ;

	// ホット状態のイメージリストを作成
	// m_imlはCImageList型のメンバ変数
	m_iml.Create(IDB_TOOLHOT, 16, 8, 0xc0c0c0) ;

	// ホットイメージリストをツールバーに割り当てる
	m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)m_iml.m_hImageList) ;

		:
		:
}


//--------------------------------------------------------------------------------
//
//【StatusBar】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// メインウィンドウプロシージャ内のWM_CREATEハンドラ部分

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_CREATE :
			HICON hIcon ;

			// ステータスバーの作成
			g_hwndStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", hWnd, IDC_STATUSBAR) ;

			// ステータスバー用のスモールアイコンの取得
			hIcon = (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_MAIN), 
				IMAGE_ICON, 16, 16, 0) ;

			// ステータスバーにアイコンを設定
			SendMessage(g_hwndStatusBar, SB_SETICON, 0, (LPARAM)hIcon) ;

			// ステータスバーの背景色を設定
			SendMessage(g_hwndStatusBar, SB_SETBKCOLOR, 0, RGB(255, 0, 0)) ;
			return 0 ;
	}
	return 0 ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_CREATEハンドラ関数

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
		:
		:

	if(!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		sizeof(indicators)/sizeof(UINT))){
		TRACE0("Failed to create status bar\n") ;
		return -1 ;		// fail to create
	}
	// ステータスバー用のスモールアイコンの取得
	HICON hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), 
			MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, 0) ;

	// ステータスバーにアイコンを設定
	m_wndStatusBar.SendMessage(SB_SETICON, 0, (LPARAM)hIcon) ;

	// ステータスバーの背景色を設定
	m_wndStatusBar.SendMessage(SB_SETBKCOLOR, 0, RGB(255,0,0)) ;

		:
		:
}

//--------------------------------------------------------------------------------
//
//【List View Control】
//
//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
		:
		:

	// m_wndListCtrlはCListCtrlのオブジェクト
	// リストビューコントロールの現在のスタイルを取得
	DWORD dwExStyle = ListView_GetExtendedListViewStyle(m_wndListCtrl.m_hWnd) ;
	// 拡張スタイルのセット
	dwExStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES | LVS_EX_HEADERDRAGDROP ;
	// 新しい拡張スタイルを設定
	ListView_SetExtendedListViewStyle(m_wndListCtrl.m_hWnd, dwExStyle) ;
	// イメージリストを作成
	// m_imlはCImageList型のメンバ変数
	m_iml.Create(IDB_BITMAP1, 16, 8, RGB(192, 192, 192)) ;
	// リストビューコントロールにイメージリストを設定
	m_wndListCtrl.SetImageList(&m_iml, LVSIL_SMALL) ;

	// カラムの設定
	char szText[256] ;
	LV_COLUMN lvclm ;
	lvclm.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE ;
	lvclm.fmt = LVCFMT_LEFT | LVCFMT_IMAGE ;
	lvclm.cx = 100 ;
	lvclm.iSubItem = 0 ;
	//lvclm.cchTextMax;
	//lvclm.iOrder;
	for(int nCol=0 ; nCol<3 ; nCol++){
		wsprintf(szText, "カラム%d", nCol) ;
		lvclm.pszText = szText ;
		lvclm.iImage = nCol ;
		m_wndListCtrl.InsertColumn(nCol, &lvclm) ;
	}
	// アイテムの設定
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT | LVIF_IMAGE ;
	//lvi.state; 
	//lvi.stateMask;
	//lvi.cchTextMax; 
	//lvi.lParam;
	//lvi.iIndent;
	for(nCol=0 ; nCol<3 ; nCol++){
		wsprintf(szText, "アイテム%d", nCol) ;
		lvi.pszText = szText ;
		lvi.iItem = 0 ;
		lvi.iSubItem = nCol ;
		lvi.iImage = nCol + 3 ;
		if(lvi.iSubItem == 0)
			m_wndListCtrl.InsertItem(&lvi) ;
		else
			m_wndListCtrl.SetItem(&lvi) ;
	}
		:
		:
}


//--------------------------------------------------------------------------------
//
//【Tree View Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndTreeCtrl ;
			LONG lStyle ;
			char szText[256] ;
			TV_INSERTSTRUCT tvis ;
			HTREEITEM hTreeItem ;
			int nIndex ;

			// IDC_TREE1はツリーコントロールのリソースID
			hwndTreeCtrl = GetDlgItem(hDlg, IDC_TREE1) ;
			// ツリービューコントロールの現在のウィンドウスタイルを取得
			lStyle = GetWindowLong(hwndTreeCtrl, GWL_STYLE) ;
			// 新しいスタイルを指定
			lStyle |= TVS_CHECKBOXES | TVS_FULLROWSELECT | TVS_SINGLEEXPAND ;
			// 新しいウィンドウスタイルを設定
			SetWindowLong(hwndTreeCtrl, GWL_STYLE, lStyle) ;

			tvis.hInsertAfter = TVI_FIRST ;
			tvis.item.mask = TVIF_TEXT ;
			//tvis.item.hItem = ;
			//tvis.item.state;
			//tvis.item.stateMask;
			//tvis.item.cchTextMax;
			//tvis.item.iImage;
			//tvis.item.iSelectedImage;
			//tvis.item.cChildren;
			//tvis.item.lParam;

			hTreeItem = TVI_ROOT ;
			for(nIndex = 0 ; nIndex < 3 ; nIndex++){
				tvis.hParent = hTreeItem ;
				wsprintf(szText, "わざと長い名前にしてみる:アイテム%d", nIndex) ;
				tvis.item.pszText = szText ;
				hTreeItem = TreeView_InsertItem(hwndTreeCtrl, &tvis) ;
			}
			return TRUE ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// ツリービューコントロールの現在のウィンドウスタイルを取得
	// m_wndTreeCtrlはCTreeCtrlのオブジェクト
	LONG lStyle = GetWindowLong(m_wndTreeCtrl.m_hWnd, GWL_STYLE) ;
	// 新しいスタイルを指定
	lStyle |= TVS_CHECKBOXES | TVS_FULLROWSELECT | TVS_SINGLEEXPAND ;
	// 新しいウィンドウスタイルを設定
	SetWindowLong(m_wndTreeCtrl.m_hWnd, GWL_STYLE, lStyle) ;

	char szText[256] ;
	TV_INSERTSTRUCT tvis ;
	tvis.hInsertAfter = TVI_FIRST ;

	tvis.item.mask = TVIF_TEXT ;
	//tvis.item.hItem = ;
	//tvis.item.state;
	//tvis.item.stateMask;
	//tvis.item.cchTextMax;
	//tvis.item.iImage;
	//tvis.item.iSelectedImage;
	//tvis.item.cChildren;
	//tvis.item.lParam;

	HTREEITEM hTreeItem = TVI_ROOT ;
	for(int nIndex = 0 ; nIndex < 3 ; nIndex++){
		tvis.hParent = hTreeItem ;
		wsprintf(szText, "わざと長い名前にしてみる:アイテム%d", nIndex) ;
		tvis.item.pszText = szText ;
		hTreeItem = m_wndTreeCtrl.InsertItem(&tvis) ;
	}
	return TRUE;	// TRUE を返すとコントロールに設定したフォーカスは失われません。
}


//--------------------------------------------------------------------------------
//
//【Progress Bar Control】
//
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndProgressCtrl ;

			// ダイアログ上には貼り付けた場合、ウィンドウスタイルを変更しても
			// 思うように動かなかったので、ここでプログレスバーコントロールを作成
			hwndProgressCtrl = CreateWindowEx(
									0,
									PROGRESS_CLASS,
									"",
									WS_VISIBLE | WS_CHILD | PBS_VERTICAL | PBS_SMOOTH,
									10,
									50,
									20,
									80,
									hDlg,
									(HMENU)IDC_PROGRESSBAR,
									g_hInstance,
									NULL) ;
			// 範囲の設定
			SendMessage(hwndProgressCtrl, PBM_SETRANGE , 0, MAKELPARAM(0, 100)) ;
			// 増減数の設定
			SendMessage(hwndProgressCtrl, PBM_SETSTEP, 1, 0) ;
			return TRUE ;
		case WM_COMMAND:
			// プログレスバーコントロールの動作テスト
			if(LOWORD(wParam) == IDC_BT_TEST){
				HWND hwndProgressCtrl ;
				int nCount ;

				hwndProgressCtrl = GetDlgItem(hDlg, IDC_PROGRESSBAR) ;

				SendMessage(hwndProgressCtrl, PBM_SETPOS, 0, 0) ;
				for(nCount = 0 ; nCount < 100 ; nCount++){
					SendMessage(hwndProgressCtrl, PBM_STEPIT, 0, 0) ;
					Sleep(1) ;
				}
				return TRUE ;
			}
			break ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// ダイアログ上には貼り付けた場合、ウィンドウスタイルを変更しても
	// 思うように動かなかったので、ここでプログレスバーコントロールを作成
	// m_wndProgressCtrl2はCWnd型のメンバ変数
	m_wndProgressCtrl2.CreateEx(
					0,
					PROGRESS_CLASS,
					"",
					WS_VISIBLE | WS_CHILD | PBS_VERTICAL | PBS_SMOOTH,
					10,
					50,
					20,
					80,
					m_hWnd,
					NULL) ;
	// 範囲の設定
	m_wndProgressCtrl2.SetRange(0, 100) ;
	// 増減数の設定
	m_wndProgressCtrl2.SetStep(1) ;

	return TRUE;	// TRUE を返すとコントロールに設定したフォーカスは失われません。
}
/////////////////////////////////////////////////////////////////////////////
// プログレスバーコントロールの動作テスト

void CTestDialog::OnTest() 
{
	m_wndProgressCtrl2.SetPos(0) ;
	for(int nCount=0 ; nCount < 100 ; nCount++){
		m_wndProgressCtrl2.StepIt() ;
		Sleep(1) ;
	}
}


//--------------------------------------------------------------------------------
//
//【Tab Controls】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
static WNDPROC g_WndProc = NULL ;
static BOOL g_bTabLeft = TRU ;

#define		PAGEMAX		2
static char g_szTabCaption[PAGEMAX][256] ;

/////////////////////////////////////////////////////////////////////////////
// プロパティシートの作成

void OnTest(HWND hWnd)
{
	HPROPSHEETPAGE hPropSheetPage[PAGEMAX] ;
	PROPSHEETPAGE psp ;
	PROPSHEETHEADER psh ;
	HWND hwndPropSheet ;

	psp.dwSize = sizeof(PROPSHEETPAGE) ;
	psp.dwFlags = PSP_DEFAULT ;
	psp.hInstance = g_hInstance ;
	psp.pszTemplate = MAKEINTRESOURCE(IDD_PAGE1) ;
	hPropSheetPage[0] = CreatePropertySheetPage(&psp) ;

	psp.pszTemplate = MAKEINTRESOURCE(IDD_PAGE2) ;
	hPropSheetPage[1] = CreatePropertySheetPage(&psp) ;

	ZeroMemory((void*)&psh, sizeof(PROPSHEETHEADER)) ;
	psh.dwSize = sizeof(PROPSHEETHEADER) ;
	psh.dwFlags = PSH_MODELESS ;
	psh.hwndParent = hWnd ;
	psh.hInstance = g_hInstance ;
	psh.pszCaption = "907" ;
	psh.nPages = PAGEMAX ;
	psh.phpage = hPropSheetPage ;

	hwndPropSheet = (HWND)PropertySheet(&psh) ;
	if(hwndPropSheet > 0){
		// サプクラス化
		g_WndProc = (WNDPROC)SetWindowLong(hwndPropSheet, GWL_WNDPROC, (LONG)PropSheetMainProc) ;
		// 無理矢理WM_INITDIALOGメッセージを発行
		SendMessage(hwndPropSheet, WM_INITDIALOG, 0, 0) ;
	}
}
/////////////////////////////////////////////////////////////////////////////
// プロパティシート用ウィンドウプロシージャ

LRESULT CALLBACK PropSheetMainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_COMMAND :
			if(LOWORD(wParam) == IDOK){
				//EndDialog(hWnd, IDOK);
				DestroyWindow(hWnd) ;
				return TRUE ;
			}
			if(LOWORD(wParam) == IDCANCEL){
				//EndDialog(hWnd, IDCANCEL);
				DestroyWindow(hWnd) ;
				return TRUE ;
			}
		case WM_INITDIALOG :
			int nIndex ;
			HWND hwndTab ;
			HWND hwndPage ;
			LONG lStyle ;
			//RECT rcTabClient;

			// タブコントロールの取得
			hwndTab = PropSheet_GetTabControl(hWnd) ;
			// タブコントロールの現在のウィンドウスタイルを取得
			lStyle = GetWindowLong(hwndTab, GWL_STYLE) ;
			// 新しいスタイルを指定
			lStyle |= TCS_VERTICAL | TCS_OWNERDRAWFIXED ;
			// 新しいウィンドウスタイルを設定
			SetWindowLong(hwndTab, GWL_STYLE, lStyle) ;
			// g_bTabLeftはBOOL型のグローバル変数
			g_bTabLeft = TRUE ;

			for(nIndex = 0 ; nIndex < TabCtrl_GetItemCount(hwndTab) ; nIndex++){
				// ページにアクセスするためにアクティブ化
				PropSheet_SetCurSel(hWnd, -1, nIndex) ;
				// ページウィンドウハンドルの取得
				hwndPage = PropSheet_GetCurrentPageHwnd(hWnd) ;
				// ページのキャプションを取得
				GetWindowText(hwndPage, g_szTabCaption[nIndex], 256) ;
			}
			// 最初のページをアクティブにする
			PropSheet_SetCurSel(hWnd, -1, 0) ;
			break ;
		case WM_DRAWITEM :
			UINT idCtl ;
			LPDRAWITEMSTRUCT lpDrawItemStruct ;
			RECT rectTab ;
			RECT rectBorder ;
			HBRUSH hbrBtnFace ;
			int nMaxPage ;
			int nIndex ;
			int nActivePageIndex ;
			HWND hwndTab ;

			idCtl = (UINT)wParam ;
			lpDrawItemStruct = (LPDRAWITEMSTRUCT)lParam ;
			
			hbrBtnFace = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)) ;

			// タブコントロールの取得
			hwndTab = PropSheet_GetTabControl(hWnd) ;
			// ページ数を取得
			nMaxPage = TabCtrl_GetItemCount(hwndTab) ;
			// アクティブなページを取得
			nActivePageIndex = TabCtrl_GetCurSel(hwndTab) ;

			for(nIndex = 0 ; nIndex < nMaxPage ; nIndex++){
				HDC hdcTab ;
				HFONT hfontPrev ;
				HFONT hfontNew ;
				HFONT hfontOld ;
				LOGFONT logFont ;

				hdcTab = lpDrawItemStruct->hDC ;
				// タブの座標取得
				TabCtrl_GetItemRect(hwndTab, nIndex, &rectTab) ;
				// タブで使われているフォントを取得
				hfontPrev = (HFONT)SendMessage(hwndTab, WM_GETFONT, 0, 0) ;
				// 縦書用フォントを作成
				GetObject(hfontPrev, sizeof(LOGFONT), &logFont) ;
				logFont.lfEscapement = (g_bTabLeft ? 900 : 2700) ;
				hfontNew = CreateFontIndirect(&logFont) ;
				// フォントを選択
				hfontOld = SelectObject(hdcTab, hfontNew) ;
				// キャプションの背景色を指定
				SetBkColor(hdcTab, GetSysColor(COLOR_BTNFACE)) ;
				// キャプション表示
				if(g_bTabLeft)
					TextOut(hdcTab, rectTab.left+2, rectTab.bottom-5, 
						(LPCTSTR)g_szTabCaption[nIndex], lstrlen(g_szTabCaption[nIndex])) ;
				else
					TextOut(hdcTab, rectTab.right-2, rectTab.top+5, 
						(LPCTSTR)g_szTabCaption[nIndex], lstrlen(g_szTabCaption[nIndex])) ;
				// アクティブなページならタブの縁を塗りつぶす
				if(nIndex == nActivePageIndex){
					if(g_bTabLeft){
						rectBorder.left		= rectTab.right ;
						rectBorder.top		= rectTab.top ;
						rectBorder.right	= rectTab.right + 3 ;
						rectBorder.bottom	= rectTab.bottom ;
					}
					else{
						rectBorder.left		= rectTab.left - 3 ;
						rectBorder.top		= rectTab.top ;
						rectBorder.right	= rectTab.left ;
						rectBorder.bottom	= rectTab.bottom ;
					}
					FillRect(hdcTab, &rectBorder, hbrBtnFace) ;
				}
				SelectObject(hdcTab, hfontOld) ;
			}
			return TRUE ;
		default:
			if(g_WndProc)
				return g_WndProc(hWnd, message, wParam, lParam) ;
			return DefWindowProc(hWnd, message, wParam, lParam) ;
	}
	return TRUE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestPropertySheet::OnInitDialog() 
{
	BOOL bResult = CPropertySheet::OnInitDialog();
	
	// タブコントロールの取得
	CTabCtrl* pTab = GetTabControl() ;
	// タブコントロールの現在のウィンドウスタイルを取得
	LONG lStyle = GetWindowLong(pTab->m_hWnd, GWL_STYLE) ;
	// 新しいスタイルを指定
	lStyle |= TCS_VERTICAL | TCS_OWNERDRAWFIXED ;
	// 新しいウィンドウスタイルを設定
	SetWindowLong(pTab->m_hWnd, GWL_STYLE, lStyle) ;
	// m_bTabLeftはBOOL型のメンバ変数
	m_bTabLeft = TRUE ;
	// タブコントロール上の有効表示領域を取得
	CRect rcTabClient ;
	pTab->AdjustRect(FALSE, &rcTabClient) ;

	for(int nIndex = 0 ; nIndex < GetPageCount() ; nIndex++){
		// ページにアクセスするためにアクティブ化
		SetActivePage(nIndex) ;
		// ページオブジェクトの取得
		CPropertyPage* pPage = GetActivePage() ;
		// ページの位置補正
		pPage->SetWindowPos(NULL, rcTabClient.left, rcTabClient.top, 0, 0, SWP_NOSIZE) ;
	}
	// 最初のページをアクティブにする
	SetActivePage(0) ;
	
	return bResult ;
}

/////////////////////////////////////////////////////////////////////////////
// クラスウィザードで追加されたWM_DRAWITEMハンドラ

void CTestPropertySheet::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CRect rectTab ;
	CRect rectBorder ;
	CRect rectText ;
	CBrush brBtnFace ;
	brBtnFace.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)) ;

	CTabCtrl* pTab = GetTabControl() ;
	// ページ数を取得
	int nMaxPage = GetPageCount() ; 
	// アクティブなページを取得
	int nActivePageIndex = pTab->GetCurSel() ;

	for(int nIndex = 0 ; nIndex < nMaxPage ; nIndex++){
		CPropertyPage* pPage = GetPage(nIndex) ;
		CDC tabDC ;
		tabDC.Attach(lpDrawItemStruct->hDC) ;
		// タブの座標取得
		pTab->GetItemRect(nIndex, &rectTab) ;
		// タブで使われているフォントを取得
		CFont* pfontNow = pPage->GetFont() ;
		// 縦書用フォントを作成
		LOGFONT logFont ;
		pfontNow->GetLogFont(&logFont) ;
		logFont.lfEscapement = (m_bTabLeft ? 900 : 2700) ;
		CFont fontNew;
		fontNew.CreateFontIndirect(&logFont) ;
		// フォントを選択
		CFont *oldFont = tabDC.SelectObject(&fontNew) ;
		// タブのキャプション取得
		CString strCaption ;
		pPage->GetWindowText(strCaption) ;
		// キャプションの背景色を指定
		tabDC.SetBkColor(GetSysColor(COLOR_BTNFACE)) ;
		// キャプション表示
		if(m_bTabLeft)
			tabDC.TextOut(rectTab.left + 2, rectTab.bottom - 5, strCaption) ;
		else
			tabDC.TextOut(rectTab.right - 2, rectTab.top + 5, strCaption) ;
		// アクティブなページならタブの縁を塗りつぶす
		if(nIndex == nActivePageIndex){
			if(m_bTabLeft)
				rectBorder.SetRect(rectTab.right, rectTab.top, rectTab.right+3, rectTab.bottom) ;
			else
				rectBorder.SetRect(rectTab.left - 3, rectTab.top, rectTab.left, rectTab.bottom) ;
			tabDC.FillRect(rectBorder, &brBtnFace) ;
		}
		tabDC.SelectObject(oldFont) ;
		tabDC.Detach() ;
	}

	CPropertySheet::OnDrawItem(nIDCtl, lpDrawItemStruct) ;
}


//--------------------------------------------------------------------------------
//
//【Rebar Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// メインウィンドウプロシージャ

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_CREATE :
			REBARINFO rbi ;
			REBARBANDINFO rbBand ;
			RECT rcToolBar ;
			RECT rcButton ;
			LONG lStyle ;
			HICON hIcon ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex ;
			icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
			// レバーコントロールを使用する
			icex.dwICC = ICC_WIN95_CLASSES | ICC_COOL_CLASSES | ICC_BAR_CLASSES ;
			InitCommonControlsEx(&icex) ;

			// レバーコントロールの作成
			g_hwndReber = CreateWindowEx(
					WS_EX_CLIENTEDGE,
					REBARCLASSNAME,
					NULL,
					WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER | WS_CLIPCHILDREN | RBS_VARHEIGHT | CCS_NODIVIDER,
					0,
					0,
					0,
					0,
					hWnd,
					NULL,
					g_hInstance,
					NULL) ;

			rbi.cbSize = sizeof(REBARINFO) ;
			rbi.fMask = 0 ;
			rbi.himl = (HIMAGELIST)NULL ;
			SendMessage(g_hwndReber, RB_SETBARINFO, 0, (LPARAM)&rbi) ;

			rbBand.cbSize = sizeof(REBARBANDINFO) ;
			rbBand.fMask = RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE ;
			rbBand.fStyle = RBBS_CHILDEDGE ;

			// ボタンの作成
			// g_hwndButtonはHWND型のグローバル変数
			g_hwndButton = CreateWindow(
							"BUTTON",
							"ボタン",
							WS_CHILD | WS_VISIBLE,
							0,
							0,
							50,
							24,
							hWnd,
							0,
							g_hInstance,
							0) ;
			// ボタンの大きさ取得
			GetWindowRect(g_hwndButton, &rcButton) ;

			// バンドデータの設定
			rbBand.lpText		= "Button" ;
			rbBand.hwndChild	= g_hwndButton ;
			rbBand.cxMinChild	= 0 ;
			rbBand.cyMinChild	= rcButton.bottom - rcButton.top ;
			rbBand.cx			= rcButton.right - rcButton.left ;
			// バンドの設定
			SendMessage(g_hwndReber, RB_INSERTBAND, (WPARAM) - 1, (LPARAM)&rbBand) ;

			// ツールバーの作成
			// g_hwndToolBarはHWND型のグローバル変数
			g_hwndToolBar = CreateToolbarEx(
					hWnd, 
					WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NODIVIDER|CCS_NORESIZE, 
					IDC_TOOLBAR,
					8,
					g_hInstance,
					IDB_TOOLBAR,
					g_tbbutton,
					sizeof(g_tbbutton) / sizeof(TBBUTTON), 
					16,
					15,
					16*3,
					15,
					sizeof(TBBUTTON)) ;

			// ツールバーの大きさ取得(実際は使えない)
			GetWindowRect(g_hwndToolBar, &rcToolBar) ;
			// バンドデータの設定
			rbBand.lpText		= "" ;
			rbBand.hwndChild	= g_hwndToolBar ;
			rbBand.cxMinChild	= 0 ;
			rbBand.cyMinChild	= 24 ;	// rcToolBar.bottom - rcToolBar.top;
			rbBand.cx			= rcToolBar.right - rcToolBar.left ;
			// バンドの設定
			SendMessage(g_hwndReber, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand) ;

			return 0 ;
		case WM_SIZE :
			// レバーコントロールのサイズをメインウィンドウに連動させる
			if(IsWindow(g_hwndReber))
				SendMessage(g_hwndReber, message, wParam, lParam) ;
			break ;
		default :
			return (DefWindowProc(hWnd, message, wParam, lParam)) ;
	}
	return (0) ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	REBARINFO rbi ;
	REBARBANDINFO rbBand ;

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	// レバーコントロールを使用する
	icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES ;
	InitCommonControlsEx(&icex) ;

	// レバーコントロールの作成
	// m_wndReberはCWnd型のメンバ変数
	m_wndReber.CreateEx(
				0 ,
				REBARCLASSNAME,
				NULL,
				WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER | WS_CLIPCHILDREN | RBS_VARHEIGHT | CCS_NODIVIDER,
				0,
				0,
				0,
				0,
				m_hWnd,
				NULL) ;

	rbi.cbSize = sizeof(REBARINFO) ;
	rbi.fMask = 0 ;
	rbi.himl = (HIMAGELIST)NULL ;
	m_wndReber.SendMessage(RB_SETBARINFO, 0, (LPARAM)&rbi) ;

	rbBand.cbSize = sizeof(REBARBANDINFO) ;
	rbBand.fMask = RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE ;
	rbBand.fStyle = RBBS_CHILDEDGE ;

	// ボタンの作成
	m_wndBtn.Create("ボタン", WS_CHILD | WS_VISIBLE, CRect(0,0,50,24), &m_wndReber, 0) ;
	// ボタンの大きさ取得
	CRect rcButton ;
	m_wndBtn.GetWindowRect(&rcButton) ;

	// バンドデータの設定
	rbBand.lpText		= "Button" ;
	rbBand.hwndChild	= m_wndBtn.m_hWnd ;
	rbBand.cxMinChild	= 0 ;
	rbBand.cyMinChild	= rcButton.Height() ;
	rbBand.cx			= rcButton.Width() ;
	// バンドの設定
	m_wndReber.SendMessage(RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand) ;

	// ツールバーの作成
	// m_wndToolBarはCToolBar型のメンバ変数
	m_wndToolBar.Create(&m_wndReber) ;
	// IDR_MAINFRAMEはツールバーのリソースID
	m_wndToolBar.LoadToolBar(IDR_MAINFRAME) ;
	// ツールバーの大きさ取得
	CSize	sizeToolBar ;
	sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE) ;

	// バンドデータの設定
	rbBand.lpText		= "Tool Bar" ;
	rbBand.hwndChild	= m_wndToolBar.m_hWnd ;
	rbBand.cxMinChild	= 0 ;
	rbBand.cyMinChild	= sizeToolBar.cy ;
	rbBand.cx			= sizeToolBar.cx ;
	// バンドの設定
	m_wndReber.SendMessage(RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand) ;

	return TRUE ;	// コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
}


//--------------------------------------------------------------------------------
//
//【ComboBoxEx】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			char szText[256] ;
			COMBOBOXEXITEM cbei ;
			int nIndex ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex ;
			icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
			// 拡張コンボボックスコントロールを使用する
			icex.dwICC = ICC_USEREX_CLASSES ;
			InitCommonControlsEx(&icex) ;

			// 拡張コンボボックスコントロールの作成
			// g_hwndComboBocExはHWND型のグローバル変数
			g_hwndComboBocEx = CreateWindowEx(
						0,
						WC_COMBOBOXEX,
						NULL,
						WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST,
						5,
						5,
						200,
						200,
						hDlg,
						NULL,
						g_hInstance,
						NULL) ;
			
			// イメージリストを作成
			// g_imlはCImageList型のグローバル変数
			g_iml = ImageList_LoadBitmap(
									g_hInstance,
									MAKEINTRESOURCE(IDB_BITMAP1),
									16,
									8,
									RGB(192, 192, 192));
			// 拡張コンボボックスにイメージリストを設定
			SendMessage(g_hwndComboBocEx, CBEM_SETIMAGELIST, 0, (LPARAM)g_iml) ;
			// 拡張コンボボックスにアイテムを設定
			cbei.mask = CBEIF_TEXT | CBEIF_INDENT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE ;
			//cbei.iOverlay;
			//cbei.lParam;
			for(nIndex = 0 ; nIndex < 8 ; nIndex++){
				wsprintf(szText, "アイテム%d", nIndex) ;
				cbei.pszText = szText ;
				cbei.cchTextMax = lstrlen(szText) ;
				cbei.iItem = nIndex ;
				cbei.iIndent = nIndex % 3 ;
				cbei.iImage = nIndex ;
				cbei.iSelectedImage = nIndex ;
				SendMessage(g_hwndComboBocEx, CBEM_INSERTITEM, 0, (LPARAM)&cbei) ;
			}
			return TRUE ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	// 拡張コンボボックスコントロールを使用する
	icex.dwICC = ICC_USEREX_CLASSES ;
	InitCommonControlsEx(&icex) ;

	// 拡張コンボボックスコントロールの作成
	// m_wndComboBocExはCWnd型のオブジェクト
	m_wndComboBocEx.CreateEx(
					0,
					WC_COMBOBOXEX,
					NULL,
					WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST ,
					5,
					5,
					200,
					200,
					m_hWnd,
					NULL) ;
	
	// イメージリストを作成
	// m_imlはCImageList型のメンバ変数
	m_iml.Create(IDB_BITMAP1, 16, 8, RGB(192,192,192)) ;
	// 拡張コンボボックスにイメージリストを設定
	m_wndComboBocEx.SendMessage(CBEM_SETIMAGELIST, 0, (LPARAM)m_iml.m_hImageList) ;
	// 拡張コンボボックスにアイテムを設定
	char szText[256] ;
	COMBOBOXEXITEM cbei ;
	cbei.mask = CBEIF_TEXT | CBEIF_INDENT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE ;
	//cbei.iOverlay;
	//cbei.lParam;
	for(int nIndex = 0 ; nIndex < 8 ; nIndex++){
		wsprintf(szText, "アイテム%d", nIndex) ;
		cbei.pszText = szText ;
		cbei.cchTextMax = lstrlen(szText) ;
		cbei.iItem = nIndex ;
		cbei.iIndent = nIndex % 3 ;
		cbei.iImage = nIndex ;
		cbei.iSelectedImage = nIndex ;
		m_wndComboBocEx.SendMessage(CBEM_INSERTITEM, 0, (LPARAM)&cbei) ;
	}

	return TRUE ;	// TRUE を返すとコントロールに設定したフォーカスは失われません。
}

//--------------------------------------------------------------------------------
//
//【Date and Time Picker Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndDate ;
			HWND hwndTime ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex;	
			icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
			// Date and Time Pickerコントロールを使用する
			icex.dwICC = ICC_DATE_CLASSES ;
			InitCommonControlsEx(&icex) ;

			// Date and Time Pickerコントロールの作成(日付)
			hwndDate = CreateWindowEx(
							0,
							DATETIMEPICK_CLASS , NULL,
							WS_BORDER | WS_VISIBLE | WS_CHILD | DTS_LONGDATEFORMAT,
							5,
							10,
							180,
							24,
							hDlg,
							NULL,
							g_hInstance,
							NULL) ;
			// Date and Time Pickerコントロールの作成(時間)
			hwndTime = CreateWindowEx(
							0,
							DATETIMEPICK_CLASS,
							NULL,
							WS_BORDER | WS_VISIBLE | WS_CHILD | DTS_TIMEFORMAT ,
							200,
							10,
							120,
							24,
							hDlg,
							NULL,
							g_hInstance,
							NULL) ;
			
			return TRUE ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;	
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	// Date and Time Pickerコントロールを使用する
	icex.dwICC = ICC_DATE_CLASSES ;
	InitCommonControlsEx(&icex) ;

	// Date and Time Pickerコントロールの作成(日付)
	// m_wndDateはCWnd型のメンバ変数
	m_wndDate.CreateEx(
					0,
					DATETIMEPICK_CLASS,
					NULL,
					WS_BORDER | WS_VISIBLE | WS_CHILD | DTS_LONGDATEFORMAT,
					5,
					10,
					180,
					24,
					m_hWnd,
					NULL) ;
	// Date and Time Pickerコントロールの作成(時間)
	m_wndTime.CreateEx(
					0,
					DATETIMEPICK_CLASS,
					NULL,
					WS_BORDER | WS_VISIBLE | WS_CHILD | DTS_TIMEFORMAT ,
					200,
					10,
					120,
					24,
					m_hWnd,
					NULL) ;
	
	return TRUE ;	// return TRUE unless you set the focus to a control
}


//--------------------------------------------------------------------------------
//
//【Month Calender Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndMonthCalender ;
			RECT rcMonthCal ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex ;
			icex.dwSize = sizeof(icex) ;
			// カレンダーコントロールを使用する
			icex.dwICC = ICC_DATE_CLASSES ;
			InitCommonControlsEx(&icex) ;

			// カレンダーコントロールの作成
			// ここで指定したウィンドウサイズは意味がない
			hwndMonthCalender = CreateWindowEx(
							WS_EX_CLIENTEDGE,
							 MONTHCAL_CLASS,
							"",
							WS_VISIBLE | WS_CHILD | WS_BORDER | MCS_DAYSTATE ,
							5,
							5,
							150,
							150,
							hDlg,
							NULL,
							g_hInstance,
							NULL) ;
			// カレンダーコントロールの大きさを取得
			MonthCal_GetMinReqRect(hwndMonthCalender, &rcMonthCal) ;
			// 大きさを設定
			SetWindowPos(
					hwndMonthCalender,
					NULL,
					0,
					0,
					10 + rcMonthCal.right - rcMonthCal.left,
					10 + rcMonthCal.bottom - rcMonthCal.top,
					SWP_NOMOVE) ;
			
			return TRUE ;
		break ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(icex) ;
	// カレンダーコントロールを使用する
	icex.dwICC = ICC_DATE_CLASSES ;
	InitCommonControlsEx(&icex) ;

	// m_wndMonthCalenderはCWnd型のオブジェクト
	// カレンダーコントロールの作成
	// ここで指定したウィンドウサイズは意味がない
	m_wndMonthCalender.CreateEx(
					WS_EX_CLIENTEDGE,
					MONTHCAL_CLASS,
					"",
					WS_VISIBLE | WS_CHILD | WS_BORDER | MCS_DAYSTATE,
					5,
					5,
					150,
					150,
					m_hWnd,
					NULL) ;
	// カレンダーコントロールの大きさを取得
	CRect rcMonthCal ;
	MonthCal_GetMinReqRect(m_wndMonthCalender.m_hWnd, &rcMonthCal) ;
	// 大きさを設定
	m_wndMonthCalender.SetWindowPos(
									NULL,
									0,
									0, 
									10 + rcMonthCal.Width(),
									10 + rcMonthCal.Height(),
									SWP_NOMOVE) ;

	return TRUE ;	// TRUE を返すとコントロールに設定したフォーカスは失われません。
}


//--------------------------------------------------------------------------------
//
//【IP Address Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndIPAddress ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex ;
			icex.dwSize = sizeof(icex) ;
			// IPアドレスコントロールを使用する
			icex.dwICC = ICC_INTERNET_CLASSES ;
			InitCommonControlsEx(&icex) ;

			// m_wndIPAddressはCWnd型のオブジェクト
			// IPアドレスコントロールの作成
			hwndIPAddress = CreateWindowEx(
									0,
									WC_IPADDRESS,
									"",
									WS_VISIBLE | WS_CHILD | WS_BORDER,
									5,
									5,
									150,
									26,
									hDlg,
									NULL,
									g_hInstance,
									NULL) ;
			// IPアドレスをセット(テスト用)
			SendMessage(hwndIPAddress, IPM_SETADDRESS, 0, MAKEIPADDRESS(1, 2, 3, 4)) ;
			
			SetWindowText(hDlg, "918IPAddress Control") ;
			return TRUE ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ

BOOL CMy918Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(icex) ;
	// IPアドレスコントロールを使用する
	icex.dwICC = ICC_INTERNET_CLASSES ;
	InitCommonControlsEx(&icex) ;

	// m_wndIPAddressはCWnd型のオブジェクト
	// IPアドレスコントロールの作成
	m_wndIPAddress.CreateEx(
							0,
							WC_IPADDRESS,
							"",
							WS_VISIBLE | WS_CHILD | WS_BORDER,
							5,
							5,
							150,
							26,
							m_hWnd,
							NULL) ;
	// IPアドレスをセット(テスト用)
	m_wndIPAddress.SendMessage(IPM_SETADDRESS, 0, MAKEIPADDRESS(1, 2, 3, 4)) ;

	return TRUE ;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}


//--------------------------------------------------------------------------------
//
//【Flat Scroll Bars】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			// フラットスクロールバーにするための初期化
			// このダイアログにはウィンドウスタイルでスクロールバーが付いている
			InitializeFlatSB(hDlg) ;
			// スクロールバーをフラットモードにする
			FlatSB_SetScrollProp(hDlg, WSB_PROP_VSTYLE , FSB_FLAT_MODE, TRUE) ;
			
			SetWindowText(hDlg, "919Flat Scroll Bars") ;
		return TRUE ;
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
//  WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// フラットスクロールバーにするための初期化
	// このダイアログにはウィンドウスタイルでスクロールバーが付いている
	InitializeFlatSB(m_hWnd) ;
	// スクロールバーをフラットモードにする
	FlatSB_SetScrollProp(m_hWnd, WSB_PROP_VSTYLE , FSB_FLAT_MODE, TRUE) ;
	
	return TRUE ;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
 


//--------------------------------------------------------------------------------
//
//【Pager Control】
//
//(SDK)
/////////////////////////////////////////////////////////////////////////////
// ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分

LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message){
		case WM_INITDIALOG :
			HWND hwndPager ;

			// 新しいコントロールを使用するための宣言
			INITCOMMONCONTROLSEX icex ;
			icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
			// ページャーコントロールを使用する
			icex.dwICC = ICC_PAGESCROLLER_CLASS ;
			InitCommonControlsEx(&icex) ;

			// ページャーコントロールの作成
			hwndPager = CreateWindowEx(
							0,
							WC_PAGESCROLLER,
							NULL,
							WS_CHILD | WS_VISIBLE | PGS_HORZ | PGS_AUTOSCROLL,
							0,
							0,
							100,
							30,
							hDlg,
							NULL,
							g_hInstance,
							NULL) ;

			// ツールバーの作成
			// g_hwndToolBarはHWND型のグローバル変数
			g_hwndToolBar = CreateToolbarEx(
									hwndPager,
									WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NODIVIDER | CCS_NORESIZE, 
									IDC_TOOLBAR,
									8,
									g_hInstance,
									IDB_TOOLBAR,
									g_tbbutton,
									sizeof(g_tbbutton) / sizeof(TBBUTTON), 
									16,
									15,
									16 * 6,
									15,
									sizeof(TBBUTTON)) ;

			// ツールバーをページャーコントロールの子ウィンドウとして設定
			SendMessage(hwndPager, PGM_SETCHILD, 0, (LPARAM)g_hwndToolBar) ;

			SetWindowText(hDlg, "920Pager Control") ;
			return TRUE ;
		case WM_NOTIFY:
			NMHDR* lpnmh = (NMHDR*)lParam ;
			switch(lpnmh->code){
				case PGN_CALCSIZE :
				{
					// このメッセージを処理しないと、ページャーコントロールのボタンが表示されない
					NMPGCALCSIZE* pCalcSize = (NMPGCALCSIZE*)lParam ;
					switch(pCalcSize->dwFlag){
						case PGF_CALCWIDTH :
						{
							// ツールバーの幅を返す
							pCalcSize->iWidth = 180 ;
							break ;
						}
					}
					return TRUE ;
				}
				case PGN_SCROLL:
				{
					// ボタンを押した時に、ここで指定した数だけスクロールする
					NMPGSCROLL* pScroll = (LPNMPGSCROLL)lParam ;
					switch(pScroll->iDir){
						case PGF_SCROLLLEFT :
						case PGF_SCROLLRIGHT :
						case PGF_SCROLLUP :
						case PGF_SCROLLDOWN :
							pScroll->iScroll = 5 ;
							break ;
					}
					return TRUE ;
				}
			}
	}
	return FALSE ;
}

//(MFC)
/////////////////////////////////////////////////////////////////////////////
//  WM_INITDIALOGハンドラ

BOOL CTestDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

		:
		:

	// 新しいコントロールを使用するための宣言
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	// ページャーコントロールを使用する
	icex.dwICC = ICC_PAGESCROLLER_CLASS ;
	InitCommonControlsEx(&icex) ;

	// ページャーコントロールの作成
	// m_wndPagerはCWnd型のメンバ変数
	m_wndPager.CreateEx(
						0,
						WC_PAGESCROLLER,
						NULL,
						WS_CHILD | WS_VISIBLE | PGS_HORZ | PGS_AUTOSCROLL,
						0,
						0,
						200,
						50,
						m_hWnd,
						NULL) ;

	// ツールバーの作成
	// m_wndToolBarはCToolBar型のメンバ変数
	m_wndToolBar.Create(&m_wndPager) ;
	// IDR_TOOLBAR1はツールバーのリソースID
	m_wndToolBar.LoadToolBar(IDR_TOOLBAR1) ;
	// ツールバーの大きさ取得
	CSize sizeToolBar ;
	sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE) ;
	// ページャーコントロールの大きさを補正
	m_wndPager.SetWindowPos(NULL, 0, 0, 200, sizeToolBar.cy, SWP_NOMOVE) ;
	// ツールバーをページャーコントロールの子ウィンドウとして設定
	m_wndPager.SendMessage(PGM_SETCHILD, 0, (LPARAM)m_wndToolBar.m_hWnd) ;

	return TRUE ;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
/////////////////////////////////////////////////////////////////////////////
//  クラスウィザードで追加したWM_NOTFYメッセージハンドラ

BOOL CMy920Dlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	NMHDR* lpnmh = (NMHDR*)lParam ;

	switch(lpnmh->code){
		case PGN_CALCSIZE :
			// このメッセージを処理しないと、ページャーコントロールのボタンが表示されない
			NMPGCALCSIZE* pCalcSize = (NMPGCALCSIZE*)lParam ;
			switch(pCalcSize->dwFlag){
				case PGF_CALCWIDTH :
				{
					// ツールバーの大きさ取得
					CSize sizeToolBar ;
					sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE) ;
					pCalcSize->iWidth = sizeToolBar.cx ;
					break ;
				}
			}
			return TRUE ;
		case PGN_SCROLL :
			// ボタンを押した時に、ここで指定した数だけスクロールする
			NMPGSCROLL* pScroll = (LPNMPGSCROLL)lParam ;
			switch(pScroll->iDir){
				case PGF_SCROLLLEFT :
				case PGF_SCROLLRIGHT :
				case PGF_SCROLLUP :
				case PGF_SCROLLDOWN :
					pScroll->iScroll = 5 ;
					break ;
			}
			return TRUE ;
	}
	return CDialog::OnNotify(wParam, lParam, pResult) ;
}