/*創建分頁-頁面增加*/ 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; }