/*創建分頁-頁面增加*/
void CHM_MachineView::CreatePages()
{
    CDialog* dlg;
    dlg = new CMain;
    m_DlgArray.Add(dlg);
    dlg->Create(IDD_MAIN, m_TabCtrl);
    m_TabCtrl->InsertItem(0, _T("主頁面"));
    if (((CHM_MachineApp*)AfxGetApp())->Post == _T("工程師"))
    {
        dlg = new CCompiler;
        m_DlgArray.Add(dlg);
        dlg->Create(IDD_COMPILER, m_TabCtrl);
        m_TabCtrl->InsertItem(1, _T("編輯頁面"));
        dlg = new CParameter;
        m_DlgArray.Add(dlg);
        dlg->Create(IDD_PARAMETER, m_TabCtrl);
        m_TabCtrl->InsertItem(2, _T("參數設定"));
        dlg = new CIOState;
        m_DlgArray.Add(dlg);
        dlg->Create(IDD_IOSTATE, m_TabCtrl);
        m_TabCtrl->InsertItem(3, _T("I/O狀態"));
    } 
    OnTabSelChange(NULL, NULL);
    Invalidate();      
}
LRESULT CColorPicker::OnKeyDownButton(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	bHandled = FALSE;
	switch (wParam) {			
		case VK_RETURN: 
			{	
				if ((m_nTrackIndex >=	 0) && (m_nTrackIndex < 64))
					m_clr = m_clrPalette[m_nTrackIndex];
			}
		case VK_ESCAPE:
			Close();
			break;

		case VK_TAB:
			{
				BOOL b;
				TabCtrl_SetCurSel(m_winTab, 1);
				OnTabSelChange(0, 0, b);
				break;
			}
		case VK_LEFT:
			m_nTrackIndex = max(0, m_nTrackIndex - 1);
			m_wndPalette.Invalidate();
			break;

		case VK_RIGHT:
			m_nTrackIndex = min(63, m_nTrackIndex + 1);
			m_wndPalette.Invalidate();
			break;

		case VK_UP:
			m_nTrackIndex = max(0, m_nTrackIndex - 8);
			m_wndPalette.Invalidate();
			break;

		case VK_DOWN:
			m_nTrackIndex = min(63, m_nTrackIndex + 8);
			m_wndPalette.Invalidate();
			break;

		default: 
			break;
	}
	return 0;
}
LRESULT CColorPicker::OnKeyDownList(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	bHandled = FALSE;
	if (wParam == VK_ESCAPE)
	{			
		Close();
	}	
	else if (wParam == VK_RETURN)
	{
		int nSel = m_winList.SendMessage(LB_GETCURSEL);
		if(nSel >= 0) m_clr = m_SystemColors[nSel].clr;
		Close();
	}
	else if (wParam == VK_TAB)
	{
		BOOL b;
		TabCtrl_SetCurSel(m_winTab, 0);
		OnTabSelChange(0, 0, b);
	}
	return 0;
}	
STDMETHODIMP CColorPicker::Pick(long hParent, long X, long Y, OLE_COLOR clr, OLE_COLOR* pclr)
{	
	m_hEvent = CreateEvent(0, 0, 0, 0);
	if (!m_hEvent) 
		return E_FAIL;

	if (!Create((HWND) hParent))
		return E_FAIL;
	
	m_clr = clr;

	BOOL b;
	int idx = SetStartColor(m_clr);		
	TabCtrl_SetCurSel(m_winTab, idx);		
	OnTabSelChange(idx, 0, b);

	int nSizeX = 0;
	HDC hdc = GetDC();
		
	HFONT hFont = (HFONT)::SelectObject(hdc, m_hFont);

	for(int i = 0; m_SystemColors[i].text; i++)
	{
		SIZE sizeText;
		::GetTextExtentPoint32(hdc, m_SystemColors[i].text, lstrlen(m_SystemColors[i].text), &sizeText);
		if(nSizeX < sizeText.cx + sizeText.cy)	nSizeX = sizeText.cx + sizeText.cy;
	}

	::SelectObject(hdc, hFont);
	::ReleaseDC(m_hWnd, hdc);

	nSizeX += GetSystemMetrics(SM_CXVSCROLL);
	nSizeX += GetSystemMetrics(SM_CXBORDER) * 2;
	m_nCellSize = MulDiv(nSizeX, 100, 800);
	
	RECT rc = {0, 0, m_nCellSize * 8, m_nCellSize * 8};
	
	TabCtrl_AdjustRect(m_winTab, TRUE, &rc);
	
	if(rc.left < 0)
	{
		rc.right -= rc.left; rc.left = 0;
	}
	if(rc.top < 0)
	{
		rc.bottom -= rc.top; rc.top = 0;
	}

	rc.bottom += ::GetSystemMetrics(SM_CYEDGE) * 2 + 2;
	rc.right += ::GetSystemMetrics(SM_CXEDGE) * 2 + 2;

	SetWindowPos(m_hWnd, &rc, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
	
	GetClientRect(&rc);

	m_winTab.MoveWindow(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE);
	TabCtrl_AdjustRect(m_winTab, FALSE, &rc); 	

	m_winList.MoveWindow(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE);
	m_wndPalette.MoveWindow(&rc, FALSE);	


	GetWindowRect(&rc);		
	int height = rc.bottom - rc.top;
	int cyScreen = ::GetSystemMetrics(SM_CYSCREEN);						
	if(Y + height >= cyScreen)
		Y = cyScreen -  height; 		
	int left = max(0, X - (rc.right - rc.left));
	
	SetWindowPos(HWND_TOPMOST, left, Y, 0, 0, SWP_NOSIZE);
	
	ShowWindow(SW_SHOW);
//////////////////////////////////////////////
/*	for (;;)
	{
		MSG msg;
		::GetMessage(&msg, NULL, 0, 0);
		HWND hCaptureWnd = ::GetCapture();
		if (hCaptureWnd && (hCaptureWnd != m_hWnd && ::GetParent(hCaptureWnd) != m_hWnd))
			break;
	}
*/
	AtlWaitWithMessageLoop(m_hEvent);
///////////////////////////////////////////////
	
	HWND hWndGetFocus = GetFocus();
	HWND hWndParent = GetParent();
	DestroyWindow();
	if (hWndGetFocus != hWndParent && ::GetParent(hWndGetFocus) != hWndParent)
		::SetFocus(hWndParent);
	CloseHandle(m_hEvent);
	m_hEvent = 0;	
	*pclr = m_clr;
	return S_OK;
}