mirror of
https://github.com/zhongyang219/TrafficMonitor.git
synced 2026-10-28 14:09:08 +08:00
修正历史流量统计对话框中滚动鼠标滚轮会导致控件位置不正确的问题
This commit is contained in:
@@ -97,6 +97,8 @@ BOOL CHistoryTrafficDlg::OnInitDialog()
|
||||
}
|
||||
m_tab.SetCurFocus(m_tab_selected);
|
||||
|
||||
m_tab1_dlg.SetScrollEnable(false);
|
||||
m_tab2_dlg.SetScrollEnable(false);
|
||||
|
||||
//获取初始时窗口的大小
|
||||
CRect rect;
|
||||
|
||||
+61
-49
@@ -61,26 +61,32 @@ CWnd* CTabDlg::GetParentWindow()
|
||||
|
||||
void CTabDlg::SetScrollbarInfo(int nPage, int nMax)
|
||||
{
|
||||
//初始化滚动条
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
scrollinfo.nPage = nPage; //设置滑块大小
|
||||
scrollinfo.nMin = 0;
|
||||
scrollinfo.nMax = nMax; //设置滚动条的最大位置
|
||||
if (scrollinfo.nMax < 0)
|
||||
scrollinfo.nMax = 0;
|
||||
scrollinfo.nPos = scrollinfo.nMin;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
if(m_scroll_enable)
|
||||
{
|
||||
//初始化滚动条
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
scrollinfo.nPage = nPage; //设置滑块大小
|
||||
scrollinfo.nMin = 0;
|
||||
scrollinfo.nMax = nMax; //设置滚动条的最大位置
|
||||
if (scrollinfo.nMax < 0)
|
||||
scrollinfo.nMax = 0;
|
||||
scrollinfo.nPos = scrollinfo.nMin;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
}
|
||||
}
|
||||
|
||||
void CTabDlg::ResetScroll()
|
||||
{
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
int step = scrollinfo.nPos - scrollinfo.nMin;
|
||||
scrollinfo.nPos = scrollinfo.nMin;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
ScrollWindow(0, step);
|
||||
if (m_scroll_enable)
|
||||
{
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
int step = scrollinfo.nPos - scrollinfo.nMin;
|
||||
scrollinfo.nPos = scrollinfo.nMin;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
ScrollWindow(0, step);
|
||||
}
|
||||
}
|
||||
|
||||
void CTabDlg::ScrollWindowSimple(int step)
|
||||
@@ -116,33 +122,36 @@ void CTabDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
//参考资料:https://www.cnblogs.com/ranjiewen/p/6013922.html
|
||||
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
int unit = 1;
|
||||
int step = theApp.DPI(8);
|
||||
switch (nSBCode)
|
||||
if (m_scroll_enable)
|
||||
{
|
||||
case SB_LINEUP: //Scroll one line up
|
||||
ScrollWindowSimple(unit * step);
|
||||
break;
|
||||
case SB_LINEDOWN: //Scroll one line down
|
||||
ScrollWindowSimple(-unit * step);
|
||||
break;
|
||||
case SB_PAGEUP: //Scroll one page up.
|
||||
ScrollWindowSimple(unit * step * 5);
|
||||
break;
|
||||
case SB_PAGEDOWN: //Scroll one page down
|
||||
ScrollWindowSimple(-unit * step * 5);
|
||||
break;
|
||||
case SB_ENDSCROLL: //End scroll
|
||||
break;
|
||||
case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
|
||||
break;
|
||||
case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
|
||||
ScrollWindow(0, (scrollinfo.nPos - nPos)*unit);
|
||||
scrollinfo.nPos = nPos;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
break;
|
||||
SCROLLINFO scrollinfo;
|
||||
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
int unit = 1;
|
||||
int step = theApp.DPI(8);
|
||||
switch (nSBCode)
|
||||
{
|
||||
case SB_LINEUP: //Scroll one line up
|
||||
ScrollWindowSimple(unit * step);
|
||||
break;
|
||||
case SB_LINEDOWN: //Scroll one line down
|
||||
ScrollWindowSimple(-unit * step);
|
||||
break;
|
||||
case SB_PAGEUP: //Scroll one page up.
|
||||
ScrollWindowSimple(unit * step * 5);
|
||||
break;
|
||||
case SB_PAGEDOWN: //Scroll one page down
|
||||
ScrollWindowSimple(-unit * step * 5);
|
||||
break;
|
||||
case SB_ENDSCROLL: //End scroll
|
||||
break;
|
||||
case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
|
||||
break;
|
||||
case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
|
||||
ScrollWindow(0, (scrollinfo.nPos - nPos)*unit);
|
||||
scrollinfo.nPos = nPos;
|
||||
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
|
||||
}
|
||||
@@ -151,14 +160,17 @@ void CTabDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
||||
BOOL CTabDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
|
||||
{
|
||||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||
int step = theApp.DPI(16);
|
||||
if (zDelta > 0)
|
||||
if (m_scroll_enable)
|
||||
{
|
||||
ScrollWindowSimple(step);
|
||||
}
|
||||
if (zDelta < 0)
|
||||
{
|
||||
ScrollWindowSimple(-step);
|
||||
int step = theApp.DPI(16);
|
||||
if (zDelta > 0)
|
||||
{
|
||||
ScrollWindowSimple(step);
|
||||
}
|
||||
if (zDelta < 0)
|
||||
{
|
||||
ScrollWindowSimple(-step);
|
||||
}
|
||||
}
|
||||
|
||||
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
|
||||
|
||||
@@ -12,12 +12,15 @@ public:
|
||||
void SetScrollbarInfo(int nPage, int nMax);
|
||||
void ResetScroll();
|
||||
virtual void OnOK();
|
||||
void SetScrollEnable(bool enable) { m_scroll_enable = enable; }
|
||||
|
||||
protected:
|
||||
void ScrollWindowSimple(int step);
|
||||
|
||||
protected:
|
||||
CWnd* m_pParent;
|
||||
bool m_scroll_enable{ true };
|
||||
|
||||
public:
|
||||
DECLARE_MESSAGE_MAP()
|
||||
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
|
||||
Reference in New Issue
Block a user