long CModuleControlLong::GetValue() { if (m_hSlider) return GetSliderValue(); long lValue = GetEditValue(); if (lValue < m_iMin) lValue = m_iMin; if (lValue > m_iMax) lValue = m_iMax; return lValue; }
void CModuleControlLong::UpdateValue(long lValue) { if (m_hSlider && GetSliderValue() != lValue) { m_hSlider.SendMessage(TBM_SETPOS, true, lValue); } if (!m_hEdit.GetWindowTextLength() || GetEditValue() != lValue) { double dValue = lValue*1.0 / m_iDivisor; CString sValue; sValue.Format(TEXT("%g"), dValue); m_hEdit.SetWindowText(sValue); } }
static LRESULT CALLBACK HSBColorSelectControlWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_ERASEBKGND: return TRUE; case WM_PAINT: { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); pData->OnPaint(hdc); EndPaint(hWnd, &ps); } return 0; case WM_COMMAND: { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); switch(HIWORD(wParam)) { case EN_CHANGE: if (pData->m_Locked == 0) { uint32_t R = pData->m_Color.R; uint32_t G = pData->m_Color.G; uint32_t B = pData->m_Color.B; if ((HWND)lParam == pData->m_hwndREdit) { R = GetEditValue(pData->m_hwndREdit); } else if ((HWND)lParam == pData->m_hwndGEdit) { G = GetEditValue(pData->m_hwndGEdit); } else if ((HWND)lParam == pData->m_hwndBEdit) { B = GetEditValue(pData->m_hwndBEdit); } else { return 0; } pData->OnColorChanged(R, G, B); return 0; } break; } } break; case WM_VSCROLL: if (LOWORD(wParam) == SB_THUMBPOSITION) { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); if (pData->m_Locked == 0) { if ((HWND)lParam == pData->m_hwndRUpdown) { pData->OnColorChanged(HIWORD(wParam), pData->m_Color.G, pData->m_Color.B); } else if ((HWND)lParam == pData->m_hwndGUpdown) { pData->OnColorChanged(pData->m_Color.R, HIWORD(wParam), pData->m_Color.B); } else if ((HWND)lParam == pData->m_hwndBUpdown) { pData->OnColorChanged(pData->m_Color.R, pData->m_Color.G, HIWORD(wParam)); } } } return 0; case WM_ACTIVATE: if ((LOWORD(wParam) == WA_INACTIVE) && ((HWND)lParam != hWnd)) { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); pData->m_Loop = FALSE; } return 0; case WM_MOUSEMOVE: case WM_LBUTTONDOWN: case WM_LBUTTONUP: { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); pData->OnMessage(message, wParam, lParam); } return 0; case WM_NCHITTEST: { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); ScreenToClient(hWnd, &pt); if (pData->HitTest(pt.x, pt.y) == -1) return HTCAPTION; } break; case WM_KEYDOWN: if (wParam == 27) { CHSBWindow *pData = (CHSBWindow *)GetWindowLongPtr(hWnd, 0); pData->m_Loop = FALSE; } break; } return DefWindowProc(hWnd, message, wParam, lParam); };
LRESULT CModuleControlLong::OnEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { UpdateValue(GetEditValue()); return 0; }