ALT로 만든 ActiveX Control  네 번째 ---
원본: http://www7.inforyoma.or.jp/~bono/junks/atlactxctrlsample.html

 이번 4편에서는 왼쪽 마우스 클릭 이벤트를 처리할 것이다. 어디에서 처리해야 할지 막막했는데 위자를 잘사용하면 마우스 처리 이벤트까지는 쉽게 해결할 수 있다. 클라이어트로 이벤트를 보낼 필요가 없는 경우에는  [Add Windows Message handler...] 처리만 해주면 된다.

이벤트 처리를 위해서는 [ATL Object Wizard 등록 정보]대화 상자에서 컨트롤을 만들 때 [Support Connection poins]가 체크 되어 있어야 할것이다.ㅋ

왼쪽 마우스 처리를 위해서 먼저 ClickIn, ClickOut을 추가한다.

왼쪽 클래스 뷰 [_ISampleCtrlEvenet]위에서 오른쪽 마우스를 클릭하여 [Add Method...]를 클릭한다.

 

[Add Method to Interface]대화상자를 열고 ClickIn 메쏘드를 추가해보자. 
[Return Type] void, [Mthod Name] ClickIn, [Parameters]는 [in] long x, [in] long y를 입력하고 [OK]를 누른다.

[Add Method to Interface]대화상자를 열고 ClickOut 메쏘드를 추가해보자.
[Return Type] void, [Mthod Name] ClickOut, [Parameters]는 [in] long x, [in] long y를 입력하고 [OK]를 누른다. 

atltest.idl파일을 열어보면 다음 코드가 추가된 것을 확인할 수 있을것이다.

dispinterface _ISampleCtrlEvents
{
        properties:
        methods:
       [id(1), helpstring("method ClickIn")] void ClickIn([in] long x, [in] long y);
       [id(2), helpstring("method ClickOut")] void ClickOut([in] long x, [in] long y);
};

클래스 뷰의 [CSmapleCtrl] 클래스에서 오른쪽 마우스 버튼을 클릭고 [Implement Connection Point...] 메뉴를 클릭한다.

[Implement Connection Point] 대화 상자가 나타나면 [File name] atltestCP.h, [_ISampleCtrlEvents]를 체크하고 [OK]버튼을 누른다.

이제 마우스 왼쪽 메시지 이벤트를 연결해주면 된다. 클래스 뷰 CSampleCtrl 클래스를 선택하고 오른쪽 마우스 버튼을 클릭하여 [Add Windows Message handler...]메뉴를 선택한다.

[New Window Message and Event Handlers for class CsampleCtral] 대화 상자가 떠면 [WM_LBUTTONDOWN] 메시지를 선택하고 [Add Handler]버튼을 클릭한다.
그러면 그림과 같이 메시지가 왼쪽에 추가되면 [OK]를 클릭한다.

SampleCtrl.h 다음과 같은 코드가 생길 것이다.

LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
        // TODO : Add Code for message handler. Call DefWindowProc if necessary.
        return 0;
}

이 코드를 다음과 같이 바꾸자.

실행하면 다음과 같이 뜰 것이다.