Visual C++를 사용하여 MFC에서 창에 대한 마우스 포인터 변경
이 문서에서는 Visual C++를 사용하여 MFC에서 창에 대한 마우스 포인터를 변경하는 방법을 소개합니다. 이 문서의 정보는 관리되지 않는 Visual C++ 코드에만 적용됩니다.
원래 제품 버전: Visual C++
원래 KB 번호: 131991
요약
Windows 기반 애플리케이션에서 창은 항상 창 클래스를 기반으로 만들어집니다. 창 클래스는 기본 마우스 포인터(커서)를 비롯하여 창의 여러 특성을 식별합니다. 경우에 따라 애플리케이션이 만드는 특정 창과 연결된 포인터를 변경하려고 할 수 있습니다. 이 문서에서는 MFC 애플리케이션이 서로 다른 시간에 다른 포인터를 표시하는 데 사용할 수 있는 세 가지 방법을 설명합니다.
MFC 애플리케이션이 다른 포인터를 표시하는 상황
MFC 애플리케이션이 다른 시간에 다른 포인터를 표시하도록 할 수 있는 몇 가지 상황은 다음과 같습니다.
- 기본 포인터가 특정 애플리케이션에 적합한 사용자 인터페이스 개체가 아닌 경우 예를 들어 I-빔 포인터는 메모장에서 텍스트 편집기 창의 화살표보다 더 적합합니다. 여기에는 애플리케이션의 전체 실행에 대한 포인터 변경이 포함될 수 있습니다.
- 애플리케이션이 디스크 I/O와 같은 긴 작업을 수행하는 경우 모래 시계 포인터가 화살표보다 더 적합합니다. 포인터를 모래 시계로 변경하면 사용자에게 좋은 시각적 피드백을 제공합니다. 여기에는 제한된 기간 동안 포인터를 변경하는 작업이 포함될 수 있습니다.
창에서 마우스 포인터를 변경하는 세 가지 방법
애플리케이션이 창에서 마우스 포인터를 변경할 수 있는 세 가지 방법은 다음과 같습니다.
- 메서드 1: 함수를 재정의합니다
CWnd::OnSetCursor()
. Windows APISetCursor()
함수를 호출하여 포인터를 변경합니다. - 방법 2: 원하는 마우스 포인터를 사용하여 사용자 고유의 창 클래스를 등록하고, 함수를 재정의
CWnd::PreCreateWindow()
하고, 새로 등록된 창 클래스를 사용하여 창을 만듭니다. - 방법 3: 표준 모래 시계 포인터를 표시하기 위해 애플리케이션은 모래 시계 표시를 호출
CCmdTarget::BeginWaitCursor()
하고 기본 포인터로 되돌리기 위해 호출CmdTarget::EndWaitCursor()
할 수 있습니다. 이 체계는 단일 메시지 기간 동안만 작동합니다. 호출EndWaitCursor
하기 전에 마우스를 이동하면 Windows에서 포인터 아래 창으로 메시지를 보냅니WM_SETCURSOR
다. 이 메시지의 기본 처리는 포인터를 클래스에 등록된 기본 형식으로 다시 설정하므로 해당 창에 대해 재정CWnd::OnSetCursor()
의하고 포인터를 모래 시계로 다시 설정해야 합니다.
다음 코드 샘플에서는 세 가지 메서드를 사용하여 파생 클래스 창의 마우스 포인터를 CView
변경하는 방법을 예제별로 보여 줍니다.
m_ChangeCursor
는 클래스의 CMyView
멤버 변수이며 형식 BOOL
입니다. 다른 포인터 형식을 표시해야 하는지 여부를 나타냅니다.
메서드 1에 대한 코드
함수를 재정의하여 개체의 CMyView
마우스 포인터를 변경합니다 CWnd::OnSetCursor()
. 클래스 마법사를 사용하여 Windows 메시지에 WM_SETCURSOR
대한 메시지 맵 함수 CMyView::OnSetCursor()
를 설정하고 다음과 같이 함수 본문을 제공합니다.
BOOL CMyView::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message)
{
if (m_ChangeCursor)
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
return TRUE;
}
return CView::OnSetCursor(pWnd, nHitTest, message);
}
메서드 2에 대한 코드
또는 AfxRegisterWndClass()
함수를 사용하여 원하는 마우스 포인터가 포함된 고유한 창 클래스를 AfxRegisterClass()
등록합니다. 그런 다음 등록된 창 클래스에 따라 보기 창을 만듭니다. MFC에서 창 클래스를 등록하는 방법에 대한 자세한 내용은 MFC Tech Note 1의 창 클래스 등록을 참조하세요.
BOOL CMyView::PreCreateWindow(CREATESTRUCT &cs)
{
cs.lpszClass = AfxRegisterWndClass(
CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, // use any window styles
AfxGetApp()->LoadStandardCursor(IDC_WAIT),
(HBRUSH)(COLOR_WINDOW + 1)); // background brush
return CView::PreCreateWindow(cs)
}
메서드 3에 대한 코드
BeginWaitCursor()
및 EndWaitCursor()
함수를 호출하여 마우스 포인터를 변경합니다.
참고 항목
CWinApp::DoWaitCursor(1)
각각 CWinApp::DoWaitCursor(-1)
과 비슷하게 BeginWaitCursor()
EndWaitCursor()
작동합니다.
void CMyView::PerformLengthyOperation()
{
BeginWaitCursor(); // or AfxGetApp()->DoWaitCursor(1)
//...
EndWaitCursor(); // or AfxGetApp()->DoWaitCursor(-1)
}
호출이 BeginWaitCursor()
EndWaitCursor()
동일한 처리기에 있지 않은 경우 다음과 같이 재정 OnSetCursor
의해야 합니다.
BOOL CMyView::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message)
{
if (m_ChangeCursor)
{
RestoreWaitCursor();
return TRUE;
}
return CView::OnSetCursor(pWnd, nHitTest, message);
}
이 예제에서는 호출 바로 전에 TRUE로 BeginWaitCursor()
설정하고 m_ChangeCursor
호출 후 EndWaitCursor()
FALSE로 다시 설정합니다.