📄 sliderdlg.cpp
字号:
void CSliderDlg::OnChangeHorzTickfreqedit()
{
if (m_ctlHorzSlider.m_hWnd == NULL)
return;
UpdateData (TRUE);
m_ctlHorzSlider.SetTicFreq (m_nHorzTickFreq);
m_ctlHorzSlider.Invalidate ();
}
void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if (pScrollBar != (CScrollBar *) &m_ctlHorzSlider)
{
CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
return;
}
if (m_ctlHorzSlider.GetStyle () & TBS_ENABLESELRANGE)
{
m_ctlHorzSlider.SetSelection (m_ctlHorzSlider.GetRangeMin(), m_ctlHorzSlider.GetPos());
m_ctlHorzSlider.Invalidate ();
}
}
/////////////////////////////////////////////////////////////////////////////
// CSliderDlg message handlers
/////////////////////////////////////////////////////////////////////////////
// Vertical Slider Functions
/////////////////////////////////////////////////////////////////////////////
void CSliderDlg::OnChangeVertLoweredit()
{
if (m_ctlVertSlider.m_hWnd == NULL)
return;
int nMin, nMax;
UpdateData (TRUE);
if (m_nVertLowerLimit >= m_nVertUpperLimit)
{
nMin = m_ctlVertSlider.GetRangeMin ();
m_nVertLowerLimit = nMin;
UpdateData (FALSE);
return;
}
m_ctlVertSlider.GetRange (nMin, nMax);
m_ctlVertSlider.SetRange (m_nVertLowerLimit, nMax, TRUE);
}
void CSliderDlg::OnChangeVertUpperedit()
{
if (m_ctlVertSlider.m_hWnd == NULL)
return;
int nMin, nMax;
UpdateData (TRUE);
if (m_nVertUpperLimit <= m_nVertLowerLimit)
{
nMax = m_ctlVertSlider.GetRangeMax ();
m_nVertUpperLimit = nMax;
UpdateData (FALSE);
return;
}
m_ctlVertSlider.GetRange (nMin, nMax);
m_ctlVertSlider.SetRange (nMin, m_nVertUpperLimit, TRUE);
}
void CSliderDlg::OnVertPoints()
{
UpdateData (TRUE);
switch (m_nVertPoints)
{
case 0:
m_ctlVertSlider.ModifyStyle (TBS_RIGHT | TBS_LEFT, TBS_BOTH, TRUE);
break;
case 1:
m_ctlVertSlider.ModifyStyle (TBS_RIGHT | TBS_BOTH, TBS_LEFT, TRUE);
break;
case 2:
m_ctlVertSlider.ModifyStyle (TBS_BOTH | TBS_TOP, TBS_RIGHT, TRUE);
break;
}
AdjustSliderRect (m_ctlVertSlider);
}
void CSliderDlg::OnVertTickmarks()
{
UpdateData (TRUE);
int nMin, nMax;
m_ctlVertSlider.GetRange (nMin, nMax);
if (m_bVertTickMarks)
{
if (m_bVertAutoTick)
{
m_ctlVertSlider.ModifyStyle (TBS_NOTICKS, 0, TRUE);
m_ctlVertSlider.SetTicFreq (-1);
}
else
{
m_ctlVertSlider.ModifyStyle (0, TBS_AUTOTICKS, TRUE);
m_ctlVertSlider.SetTicFreq (-1);
m_ctlVertSlider.ModifyStyle (TBS_NOTICKS | TBS_AUTOTICKS, 0, TRUE);
m_ctlVertSlider.SetTicFreq (m_nVertTickFreq);
}
}
else
{
m_ctlVertSlider.ModifyStyle (0, TBS_NOTICKS, TRUE);
}
AdjustSliderRect (m_ctlVertSlider);
m_ctlVertSlider.SetRange (nMin, nMax, TRUE);
}
void CSliderDlg::OnVertAutotick()
{
UpdateData (TRUE);
int nMin, nMax;
m_ctlVertSlider.GetRange (nMin, nMax);
if (m_bVertAutoTick)
{
m_ctlVertSlider.SetTicFreq (-1);
m_ctlVertSlider.ModifyStyle (0, TBS_AUTOTICKS, TRUE);
m_ctlVertTickFreq.EnableWindow (FALSE);
m_ctlVertTickFreqSpinner.EnableWindow (FALSE);
}
else
{
m_ctlVertSlider.ModifyStyle (TBS_AUTOTICKS, 0, TRUE);
m_ctlVertSlider.SetTicFreq (m_nVertTickFreq);
// m_ctlVertSlider.SetTicFreq (0);
m_ctlVertTickFreq.EnableWindow (TRUE);
m_ctlVertTickFreqSpinner.EnableWindow (TRUE);
// m_ctlVertSlider.SetTicFreq (m_nVertTickFreq);
}
m_ctlVertSlider.SetRange (nMin, nMax, TRUE);
}
void CSliderDlg::OnVertEnablesel()
{
UpdateData (TRUE);
if (m_bVertEnableSel)
{
m_ctlVertSlider.ModifyStyle (0, TBS_ENABLESELRANGE, TRUE);
::EnableWindow (GetDlgItem (IDC_SETVERTSEL)->m_hWnd, TRUE);
::EnableWindow (GetDlgItem (IDC_CLEARVERTSEL)->m_hWnd, FALSE);
}
else
{
m_ctlVertSlider.ClearSel (TRUE);
m_nVertSelMax = m_nVertSelMin = -1;
m_ctlVertSlider.ModifyStyle (TBS_ENABLESELRANGE, 0, TRUE);
::EnableWindow (GetDlgItem (IDC_SETVERTSEL)->m_hWnd, FALSE);
::EnableWindow (GetDlgItem (IDC_CLEARVERTSEL)->m_hWnd, FALSE);
}
AdjustSliderRect (m_ctlVertSlider);
}
void CSliderDlg::OnChangeVertTickfreqedit()
{
if (m_ctlVertSlider.m_hWnd == NULL)
return;
UpdateData (TRUE);
m_ctlVertSlider.SetTicFreq (m_nVertTickFreq);
m_ctlVertSlider.Invalidate ();
}
void CSliderDlg::OnClearvertsel()
{
m_nVertSelMax = m_nVertSelMin = -1;
m_ctlVertSlider.ClearSel (TRUE);
::EnableWindow (GetDlgItem (IDC_CLEARVERTSEL)->m_hWnd, FALSE);
::EnableWindow (GetDlgItem (IDC_SETVERTSEL)->m_hWnd, TRUE);
}
void CSliderDlg::OnSetvertsel()
{
if ((m_nVertSelMax < 0) && (m_nVertSelMin < 0))
{
m_nVertSelMax = m_ctlVertSlider.GetPos ();
return;
}
m_nVertSelMin = m_ctlVertSlider.GetPos ();
if (m_nVertSelMin < m_nVertSelMax)
{
int temp = m_nVertSelMin;
m_nVertSelMin = m_nVertSelMax;
m_nVertSelMax = temp;
}
m_ctlVertSlider.SetSelection (m_nVertSelMax, m_nVertSelMin);
m_ctlVertSlider.Invalidate ();
::EnableWindow (GetDlgItem (IDC_SETVERTSEL)->m_hWnd, FALSE);
::EnableWindow (GetDlgItem (IDC_CLEARVERTSEL)->m_hWnd, TRUE);
}
void CSliderDlg::OnCustomdrawVertSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwMajor, dwMinor;
bool GetCommonControlsVersion(DWORD &dwMajor, DWORD &dwMinor);
GetCommonControlsVersion(dwMajor, dwMinor);
if ((dwMajor != 4) && (dwMinor < 70))
{
*pResult = 0;
return;
}
NMCUSTOMDRAW *pNMCustomDraw = (LPNMCUSTOMDRAW) pNMHDR;
if (pNMCustomDraw->dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
if ((pNMCustomDraw->dwDrawStage == CDDS_ITEMPREPAINT)
&& (pNMCustomDraw->dwItemSpec == TBCD_CHANNEL)
&& (m_ctlVertSlider.GetStyle () & TBS_ENABLESELRANGE))
{
if ((m_nVertSelMin < 0) || (m_nVertSelMax < 0))
{
*pResult = 0;
return;
}
CBrush brYellow;
CBrush brGreen;
CDC dc;
dc.Attach (pNMCustomDraw->hdc);
brYellow.CreateSolidBrush (RGB (0xff, 0xff, 0x00));
brGreen.CreateSolidBrush (RGB (0x00, 0xff, 0x00));
dc.FillRect (&pNMCustomDraw->rc, &brYellow);
CRect rc = pNMCustomDraw->rc;
int nMin, nMax;
m_ctlVertSlider.GetRange (nMin, nMax);
CRect rcThumb;
m_ctlVertSlider.GetThumbRect (&rcThumb);
int nTop = rc.top;
rc.top = m_nVertSelMin * (rc.bottom - nTop) / (nMax - nMin) + rcThumb.bottom - rcThumb.top;
rc.bottom = m_nVertSelMax * (rc.bottom - nTop) / (nMax - nMin) + rcThumb.bottom - rcThumb.top;
dc.FillRect (&rc, &brGreen);
dc.Draw3dRect (&pNMCustomDraw->rc, GetSysColor (COLOR_3DDKSHADOW),
GetSysColor (COLOR_3DHIGHLIGHT));
dc.Detach ();
*pResult = CDRF_SKIPDEFAULT;
return;
}
*pResult = 0;
}
bool GetCommonControlsVersion(DWORD &dwMajor,DWORD &dwMinor)
{
HINSTANCE hInstCtrl;
DLLGETVERSIONPROC pfDllGetVersion;
bool bResult;
if ((hInstCtrl = LoadLibrary ("ComCtl32.dll")) == NULL)
return (false);
pfDllGetVersion =
(DLLGETVERSIONPROC)GetProcAddress(hInstCtrl,
_T("DllGetVersion"));
if(pfDllGetVersion)
{
DLLVERSIONINFO dvi;
memset (&dvi, '\0', sizeof(dvi));
dvi.cbSize = sizeof(dvi);
if(SUCCEEDED((*pfDllGetVersion)(&dvi)))
{
dwMajor = dvi.dwMajorVersion;
dwMinor = dvi.dwMinorVersion;
bResult = true;
}
else
{
bResult = false;
}
}
else
{
//
// If the call to GetProcAddress failed, then the DLL is
// is 4.0 or earlier.
//
dwMajor = 4;
dwMinor = 0;
bResult = true;
}
FreeLibrary(hInstCtrl);
return (true);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -