MFC ActiveX 컨트롤: ActiveX 컨트롤에 스톡 이벤트 추가
스톡 이벤트는 COleControl 클래스에 의해 자동으로 발생한다는 점에서 사용자 지정 이벤트와 다릅니다. COleControl
에는 일반적인 작업으로 인해 발생하는 이벤트를 발생시키는 미리 정의된 멤버 함수가 포함됩니다. COleControl
에 의해 구현되는 몇 가지 일반적인 작업에는 컨트롤, 키보드 이벤트의 한 번 및 두 번 클릭과 마우스 단추의 상태 변경이 포함됩니다. 스톡 이벤트의 이벤트 맵 항목은 항상 EVENT_STOCK 접두사 앞에 옵니다.
이벤트 추가 마법사에서 지원되는 스톡 이벤트
COleControl
클래스는 다음 표에 나열된 10개의 스톡 이벤트를 제공합니다. 이벤트 추가 마법사를 사용하여 컨트롤에서 원하는 이벤트를 지정할 수 있습니다.
스톡 이벤트
이벤트 | 발생 함수 | 설명 |
---|---|---|
클릭 | void FireClick( ) | 컨트롤이 마우스를 캡처하고, BUTTONUP(왼쪽, 가운데 또는 오른쪽) 메시지가 수신되고, 단추가 컨트롤 위에서 놓일 때 발생합니다. 스톡 MouseDown 및 MouseUp 이벤트는 이 이벤트 전에 발생합니다. 이벤트 맵 항목: EVENT_STOCK_CLICK( ) |
DblClick | void FireDblClick( ) | Click과 비슷하지만 BUTTONDBLCLK 메시지가 수신될 때 발생합니다. 이벤트 맵 항목: EVENT_STOCK_DBLCLICK( ) |
오류 | void FireError( SCODEscode, LPCSTRlpszDescription , UINTnHelpID = 0 ) |
메서드 호출 또는 속성 액세스의 범위를 벗어나는 ActiveX 컨트롤 내에서 오류가 발생할 때 발생합니다. 이벤트 맵 항목: EVENT_STOCK_ERROREVENT( ) |
KeyDown | void FireKeyDown( shortnChar , shortnShiftState ) |
WM_SYSKEYDOWN 또는 WM_KEYDOWN 메시지가 수신될 때 발생합니다.이벤트 맵 항목: EVENT_STOCK_KEYDOWN( ) |
KeyPress | void FireKeyPress( short*pnChar ) |
WM_CHAR 메시지가 수신될 때 발생합니다.이벤트 맵 항목: EVENT_STOCK_KEYPRESS( ) |
KeyUp | void FireKeyUp( shortnChar , shortnShiftState ) |
WM_SYSKEYUP 또는 WM_KEYUP 메시지가 수신될 때 발생합니다.이벤트 맵 항목: EVENT_STOCK_KEYUP( ) |
MouseDown | void FireMouseDown( shortnButton , shortnShiftState , floatx, floaty) |
BUTTONDOWN(왼쪽, 가운데 또는 오른쪽)이 수신될 때 발생합니다. 이 이벤트가 발생하기 직전에 마우스가 캡처됩니다. 이벤트 맵 항목: EVENT_STOCK_MOUSEDOWN( ) |
MouseMove | void FireMouseMove( shortnButton , shortnShiftState , floatx, floaty) |
WM_MOUSEMOVE 메시지가 수신될 때 발생합니다. 이벤트 맵 항목: EVENT_STOCK_MOUSEMOVE( ) |
MouseUp | void FireMouseUp( shortnButton , shortnShiftState , floatx, floaty) |
BUTTONUP(왼쪽, 가운데 또는 오른쪽)이 수신될 때 발생합니다. 이 이벤트가 발생하기 전에 마우스 캡처가 해제됩니다. 이벤트 맵 항목: EVENT_STOCK_MOUSEUP( ) |
ReadyStateChange | void FireReadyStateChange( ) | 수신된 데이터의 양으로 인해 컨트롤이 다음 준비 상태로 전환될 때 발생합니다. 이벤트 맵 항목: EVENT_STOCK_READYSTATECHANGE( ) |
이벤트 추가 마법사를 사용하여 스톡 이벤트 추가
실제 이벤트의 발생은 기본 클래스 COleControl
에 의해 자동으로 처리되므로 스톡 이벤트를 추가하는 데는 사용자 지정 이벤트를 추가하는 것보다 더 적은 작업이 필요합니다. 다음 절차에서는 MFC ActiveX 컨트롤 마법사를 사용하여 개발된 컨트롤에 스톡 이벤트를 추가합니다. KeyPress라는 이벤트는 키를 누르고 컨트롤이 활성 상태일 때 발생합니다. 이 절차를 사용하여 다른 스톡 이벤트를 추가할 수도 있습니다. 선택한 스톡 이벤트 이름을 KeyPress로 대체합니다.
이벤트 추가 마법사를 사용하여 KeyPress 스톡 이벤트를 추가하려면
컨트롤의 프로젝트를 로드합니다.
클래스 뷰에서 ActiveX 컨트롤 클래스를 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 엽니다.
바로 가기 메뉴에서 추가를 클릭한 다음, 이벤트 추가를 클릭합니다.
그러면 이벤트 추가 마법사가 열립니다.
이벤트 이름 드롭다운 목록에서
KeyPress
를 선택합니다.Finish를 클릭합니다.
스톡 이벤트에 대한 이벤트 추가 마법사 변경 내용
스톡 이벤트는 컨트롤의 기본 클래스에 의해 처리되므로 이벤트 추가 마법사는 어떤 방식으로도 클래스 선언을 변경하지 않습니다. 컨트롤의 이벤트 맵에 이벤트를 추가하고 해당 .IDL 파일에 항목을 만듭니다. 다음 줄은 컨트롤 클래스 구현(.CPP) 파일에 있는 컨트롤의 이벤트 맵에 추가됩니다.
EVENT_STOCK_KEYPRESS()
이 코드를 추가하면 WM_CHAR 메시지가 수신되고 컨트롤이 활성 상태일 때 KeyPress 이벤트가 발생합니다. 다른 때에는 제어 코드 내에서 해당 발생 함수(예: FireKeyPress
)를 호출하면 KeyPress 이벤트가 발생할 수 있습니다.
이벤트 추가 마법사는 컨트롤의 .IDL 파일에 다음 코드 줄을 추가합니다.
[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
이 줄은 KeyPress 이벤트를 표준 디스패치 ID와 연결하며 이 줄을 통해 컨테이너는 KeyPress 이벤트를 예상할 수 있습니다.