要使CWnd对话框支持滚动条,需要在CreateEx时添加style风格样式WS_EX_RIGHTSCROLLBAR  WS_VSCROLL  WS_HSCROLL

CreateEx(WS_EX_CLIENTEDGE| WS_EX_RIGHTSCROLLBAR, "", "", WS_CHILD | WS_BORDER | WS_VSCROLL | WS_HSCROLL, CRect(), this, IDXXX));

然后在窗口初始化时,设置滚动条相关信息

SCROLLINFO tagScrollInfo;//滚动条详细信息的结构体

tagScrollInfo.cbSize = sizeof(SCROLLINFO);     //结构的大小
tagScrollInfo.fMask = SIF_ALL;            //#define SIF_ALL  (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)  
                           //  此外还有SIF_DISABLENOSCROLL为不显示滚动条
tagScrollInfo.nMin = 0;               //滚动条的最小值
tagScrollInfo.nMax = 100;              //滚动条的最大长度
tagScrollInfo.nPage = 10;              //滚动条内滑块的大小,-1时为不显示滚动条
tagScrollInfo.nPos = 0;               //设置滑块的位置,在消息响应中修改
tagScrollInfo.nTrackPos = 0;            //当前位置
SetScrollInfo(SB_HORZ, &tagScrollInfo, true);     //水平滚动条
SetScrollInfo(SB_VERT, &tagScrollInfo, true);    //垂直滚动条


此外还需要添加对应的消息响应OnVScroll和OnHScroll,类向导->你具体的对话框类名->分别输入搜索WM_VSCROLLWM_HSCROLL添加响应代码,然后手动编写具体的响应操作:

void CPaint::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch (nSBCode)
	{
	case SB_LINELEFT:                 //上移
		tagScrollInfo -= 1;
		RedrawWindow();
		break;
	case SB_LINERIGHT:                 //下移
		...
		RedrawWindow();
		break;
	case SB_PAGELEFT:                 //滑块与滚动条起点位置之间点击
		...
		RedrawWindow();
		break;
	case SB_PAGERIGHT:                 //滑块与滚动条终点位置之间点击
		...
		RedrawWindow();
		break;
	case SB_THUMBPOSITION:                 //滑块移动的当前位置
		tagScrollInfo = nPos;
		RedrawWindow();
		break;
	default:
		break;
	}
	SetScrollInfo(SB_VERT, &tagScrollInfoY, true);

	CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CPaint::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    //与上同理
    ...
}