修正历史流量统计对话框中滚动鼠标滚轮会导致控件位置不正确的问题

This commit is contained in:
Zhong Yang
2020-06-28 22:36:06 +08:00
parent 23ee8f6aea
commit c819fc2d93
3 changed files with 66 additions and 49 deletions
+2
View File
@@ -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
View File
@@ -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);
+3
View File
@@ -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);