2023年6月20日发(作者:)

要创建带垂直滚动条的 resizeable 对话框,执行以下步骤:

1. 使用应用程序向导创建 Microsoft 基础类 (MFC) 基于对话框的应用程序。

2. 在资源编辑器中添加到对话框的资源模板的某些控件属性对话框中选择 垂直滚动,然后选择 Resizing 作为边框样式。

3. 添加以下受保护的对话框类的成员变量:

4.

5.

6.

int m_nCurHeight;

int m_nScrollPos;

CRect m_rect;

用于 m_nScrollPos 存储当前垂直滚动条的位置。 存储对话框框的当前高度和处理

OnVScroll 方法中滚动,请使用 m_nCurHeight。

7. 若要将原始的窗口大小将下行添加到 OnInitDialog 方法:

8.

9.

GetWindowRect(m_rect);

m_nScrollPos = 0;

10. 将消息处理程序添加到 OnSize 方法设置滚动条区域 WM_SIZE 消息。将范围设置为 0,如果大小增加到原有大小超过

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

void CTestDlg::OnSize(UINT nType, int cx, int cy)

{

CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here.

m_nCurHeight = cy;

int nScrollMax;

if (cy < m_())

{

nScrollMax = m_() - cy;

21. }

22. else

23. nScrollMax = 0;

24.

25. SCROLLINFO si;

26. = sizeof(SCROLLINFO);

27. = SIF_ALL; // SIF_ALL = SIF_PAGE |

SIF_RANGE | SIF_POS; 28.

29.

30.

31.

32.

33.

= 0;

= nScrollMax;

= /10;

= 0;

SetScrollInfo(SB_VERT, &si, TRUE);

}

34. 将消息处理程序为 WM_VSCROLL 消息添加到 OnVScroll 方法:

35. void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos,

CScrollBar* pScrollBar)

36. {

37. // TODO: Add your message handler code here

and/or call default.

38. int nDelta;

39. int nMaxPos = m_() -

m_nCurHeight;

40.

41. switch (nSBCode)

42. {

43. case SB_LINEDOWN:

44. if (m_nScrollPos >= nMaxPos)

45. return;

46. nDelta =

min(nMaxPos/100,nMaxPos-m_nScrollPos);

47. break;

48.

49. case SB_LINEUP:

50. if (m_nScrollPos <= 0)

51. return;

52. nDelta =

-min(nMaxPos/100,m_nScrollPos);

53. break;

54.

55. case SB_PAGEDOWN:

56. if (m_nScrollPos >= nMaxPos)

57. return; 58. nDelta =

min(nMaxPos/10,nMaxPos-m_nScrollPos);

59. break;

60.

61. case SB_THUMBPOSITION:

62. nDelta = (int)nPos - m_nScrollPos;

63. break;

64.

65. case SB_PAGEUP:

66. if (m_nScrollPos <= 0)

67. return;

68. nDelta =

-min(nMaxPos/10,m_nScrollPos);

69. break;

70.

71. default:

72. return;

73. }

74. m_nScrollPos += nDelta;

75. SetScrollPos(SB_VERT,m_nScrollPos,TRUE);

76. ScrollWindow(0,-nDelta);

77. CDialog::OnVScroll(nSBCode, nPos,

pScrollBar);

78. }

79. 生成并运行该应用程序。调整大小以显示垂直滚动条对话框。

对于水平滚动以类似方式添加 WM_HSCROLL 消息处理程序,并将所需的代码添加到 OnSize 和

OnInitDialog 方法。

2023年6月20日发(作者:)

要创建带垂直滚动条的 resizeable 对话框,执行以下步骤:

1. 使用应用程序向导创建 Microsoft 基础类 (MFC) 基于对话框的应用程序。

2. 在资源编辑器中添加到对话框的资源模板的某些控件属性对话框中选择 垂直滚动,然后选择 Resizing 作为边框样式。

3. 添加以下受保护的对话框类的成员变量:

4.

5.

6.

int m_nCurHeight;

int m_nScrollPos;

CRect m_rect;

用于 m_nScrollPos 存储当前垂直滚动条的位置。 存储对话框框的当前高度和处理

OnVScroll 方法中滚动,请使用 m_nCurHeight。

7. 若要将原始的窗口大小将下行添加到 OnInitDialog 方法:

8.

9.

GetWindowRect(m_rect);

m_nScrollPos = 0;

10. 将消息处理程序添加到 OnSize 方法设置滚动条区域 WM_SIZE 消息。将范围设置为 0,如果大小增加到原有大小超过

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

void CTestDlg::OnSize(UINT nType, int cx, int cy)

{

CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here.

m_nCurHeight = cy;

int nScrollMax;

if (cy < m_())

{

nScrollMax = m_() - cy;

21. }

22. else

23. nScrollMax = 0;

24.

25. SCROLLINFO si;

26. = sizeof(SCROLLINFO);

27. = SIF_ALL; // SIF_ALL = SIF_PAGE |

SIF_RANGE | SIF_POS; 28.

29.

30.

31.

32.

33.

= 0;

= nScrollMax;

= /10;

= 0;

SetScrollInfo(SB_VERT, &si, TRUE);

}

34. 将消息处理程序为 WM_VSCROLL 消息添加到 OnVScroll 方法:

35. void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos,

CScrollBar* pScrollBar)

36. {

37. // TODO: Add your message handler code here

and/or call default.

38. int nDelta;

39. int nMaxPos = m_() -

m_nCurHeight;

40.

41. switch (nSBCode)

42. {

43. case SB_LINEDOWN:

44. if (m_nScrollPos >= nMaxPos)

45. return;

46. nDelta =

min(nMaxPos/100,nMaxPos-m_nScrollPos);

47. break;

48.

49. case SB_LINEUP:

50. if (m_nScrollPos <= 0)

51. return;

52. nDelta =

-min(nMaxPos/100,m_nScrollPos);

53. break;

54.

55. case SB_PAGEDOWN:

56. if (m_nScrollPos >= nMaxPos)

57. return; 58. nDelta =

min(nMaxPos/10,nMaxPos-m_nScrollPos);

59. break;

60.

61. case SB_THUMBPOSITION:

62. nDelta = (int)nPos - m_nScrollPos;

63. break;

64.

65. case SB_PAGEUP:

66. if (m_nScrollPos <= 0)

67. return;

68. nDelta =

-min(nMaxPos/10,m_nScrollPos);

69. break;

70.

71. default:

72. return;

73. }

74. m_nScrollPos += nDelta;

75. SetScrollPos(SB_VERT,m_nScrollPos,TRUE);

76. ScrollWindow(0,-nDelta);

77. CDialog::OnVScroll(nSBCode, nPos,

pScrollBar);

78. }

79. 生成并运行该应用程序。调整大小以显示垂直滚动条对话框。

对于水平滚动以类似方式添加 WM_HSCROLL 消息处理程序,并将所需的代码添加到 OnSize 和

OnInitDialog 方法。