본문 바로가기

프로그래밍/MFC

MFC 다이얼로그 스크롤 사용 소스


이 문서에서는 스크롤 막대를 resizeable 대화 상자를 만드는 방법에 대해 설명합니다. 프로세스는 네 가지 기본적인 부분으로 구성됩니다.
  • 리소스 편집기에서 속성 대화 상자의 가로 스크롤세로 스크롤 스타일을 선택하십시오.
  • 대화 상자에서 resizeable 수 Resizing 테두리 스타일을 선택하십시오.
  • WM_VSCROLL 및 WM_HSCROLL 메시지 처리기를 재정의하십시오.
  • 스크롤 막대 범위가 원래 크기보다 작은 수 크기를 줄이면 설정하려면 WM_SIZE 메시지 처리기를 재정의하십시오.

추가 정보
세로 스크롤 막대를 사용하여 resizeable 대화 상자를 만들려면 다음과 같이 하십시오. 응용 프로그램 마법사를 사용하여 Microsoft...

세로 스크롤 막대를 사용하여 resizeable 대화 상자를 만들려면 다음과 같이 하십시오.
  1. 응용 프로그램 마법사를 사용하여 Microsoft 기반 클래스 (MFC) 대화 상자 기반 응용 프로그램을 만듭니다.
  2. 리소스 편집기에서 대화 상자 리소스 템플릿 일부 컨트롤을 대화 상자의 속성에서 세로로 말린 두루마리 선택하고 Resizing 테두리 스타일로 선택합니다 추가하십시오.
  3. 다음 대화 상자 클래스에 멤버 변수가 보호된 추가:
    int m_nCurHeight;
    int m_nScrollPos;
    CRect m_rect;
    						
    m_nScrollPos 현재 세로 스크롤 위치를 저장할 수 있습니다. m_nCurHeight을 현재 대화 상자의 높이를 저장할 OnVScroll 메서드는 스크롤을 처리할 수 있습니다.
  4. 원래 창 크기를 보려면 다음 줄을 OnInitDialog 메서드에 추가합니다:
    GetWindowRect(m_rect);
    m_nScrollPos = 0;
    					
  5. 스크롤 막대 범위를 설정하려면 WM_SIZE 메시지를 OnSize 메서드에 메시지 처리기를 추가하십시오. 범위를 0으로 설정하여 원래 크기보다 더 크기가 증가합니다.
    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_rect.Height())
    	{
    	     nScrollMax = m_rect.Height() - cy;
    	}
    	else
    	     nScrollMax = 0;
    
    	SCROLLINFO si;
    	si.cbSize = sizeof(SCROLLINFO);
    	si.fMask = SIF_ALL; // SIF_ALL = SIF_PAGE | SIF_RANGE | SIF_POS;
    	si.nMin = 0;
    	si.nMax = nScrollMax;
    	si.nPage = si.nMax/10;
    	si.nPos = 0;
            SetScrollInfo(SB_VERT, &si, TRUE); 
    }
    					
  6. OnVScroll 메서드를 WM_VSCROLL 메시지에 대한 메시지 처리기를 추가할:
    void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    	// TODO: Add your message handler code here and/or call default.
    	int nDelta;
    	int nMaxPos = m_rect.Height() - m_nCurHeight;
    
    	switch (nSBCode)
    	{
    	case SB_LINEDOWN:
    		if (m_nScrollPos >= nMaxPos)
    			return;
    		nDelta = min(nMaxPos/100,nMaxPos-m_nScrollPos);
    		break;
    
    	case SB_LINEUP:
    		if (m_nScrollPos <= 0)
    			return;
    		nDelta = -min(nMaxPos/100,m_nScrollPos);
    		break;
    
             case SB_PAGEDOWN:
    		if (m_nScrollPos >= nMaxPos)
    			return;
    		nDelta = min(nMaxPos/10,nMaxPos-m_nScrollPos);
    		break;
    
    	case SB_THUMBPOSITION:
    		nDelta = (int)nPos - m_nScrollPos;
    		break;
    
    	case SB_PAGEUP:
    		if (m_nScrollPos <= 0)
    			return;
    		nDelta = -min(nMaxPos/10,m_nScrollPos);
    		break;
    	
             default:
    		return;
    	}
    	m_nScrollPos += nDelta;
    	SetScrollPos(SB_VERT,m_nScrollPos,TRUE);
    	ScrollWindow(0,-nDelta);
    	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }
    					
  7. 빌드 및 응용 프로그램을 실행하십시오. 세로 스크롤 막대 표시 대화 상자의 크기를 조정하십시오.
가로 스크롤에 대해 비슷한 방식으로 WM_HSCROLL 메시지 처리기를 추가하고 OnSizeOnInitDialog 메서드에 필요한 코드를 추가하십시오.

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2 을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
키워드: 
kbmt kbdlg kbhowto kbscrollbar KB262954 KbMtko
기계 번역된 문서기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.