-
[MFC] - ActiveX 컨트롤 만들기VC++/MFC 2021. 1. 5. 22:56
MFC ActiveX 컨트롤 만들기
해당 내용은 Visual Studio Professional 2015로 설명 드리겠습니다. 프로젝트 이름은 추 후에 C# ActiveX 컨트롤을 MFC ActiveX 컨트롤에 래핑하는 예제를 위해서 아래와 같이 CSharpActiveXCtrlWrapper라고 짓게 되었습니다.
다음
다음
마침
추가 기능에 대한 설명은 아래의 링크를 통해 확인 하시기 바랍니다.
https://msdn.microsoft.com/ko-kr/library/dkzccw76.aspx
컨트롤 설정 탭에서 컨트롤 기준을 (None)으로 하였기 때문에 Internet Explorer 브라우저에서 보이는 컨트롤이 없으므로
CFormView 방식으로 컨트롤을 올려보도록 하겠습니다.
리소스뷰 창에서 그림6과 같이 리소스 추가(A).... 메뉴를 클릭 후 그림 7과 같이 Dialog/IDD_FORMVIEW 선택 후 새로만들기
그림 8과 같이 추가된 폼 뷰 안에서 마우스 오른쪽 버튼을 눌러 클래스 추가(C) 메뉴를 클릭
그림 9와 같이 기본 클래스를 CFormView로 선택 후 클래스 이름을 CMyFormView 지정후 마침 후에 그림 10과 같이 추가한 클래스 생성자/소멸자를 public 영역으로 이동시킵니다.
그림 11과 같이 클래스뷰 선택 후 CMyFormView 클래스를 선택 후 그림 12와 같이 속성/재정의 에서
Create, PostNcDestroy 함수를 재정의 합니다.
재정의 후 추가한 PostNcDestory 함수에서 CFormView::PostNcDestroy() 호출 부분을 주석합니다.
다음은 CSharpActiveXCtrlWrapper.h 파일에서 MyFormView.h 파일을 Include 후에
CCSharpActiveXCtrlWrapperCtrl 클래스에서 사용 할 수 있게 CMyFormView 클래스를 멤버 변수로 선언합니다.
그림11처럼 이번에는 CCSharpActiveXCtrlWrapperCtrl 클래스 선택후에 그림 13과 같이 WM_CREATE 메시지를 추가합니다. OnCreate 함수를 재정의 하는 이유는 CSharpActiveXCtrlWrapper 클래스에서 OnCreate시 해당 함수를 호출하기 위해서 입니다.
OnDraw 함수에서 그리는 코드를 주석 후 OnCreate 함수에서 CMyFormView 를 추가합니다.
CCSharpActiveXCtrlWrapperCtrl.cpp OnDraw 함수
void CCSharpActiveXCtrlWrapperCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& /* rcInvalid */) { if (!pdc) return; // TODO: 다음 코드를 사용자가 직접 작성한 그리기 코드로 바꾸십시오. // pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); // pdc->Ellipse(rcBounds); }
CCSharpActiveXCtrlWrapperCtrl.cpp OnCreate 함수
int CCSharpActiveXCtrlWrapperCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 여기에 특수화된 작성 코드를 추가합니다. RECT rect; ::GetClientRect(m_hWnd, &rect); if (m_MyFormView.Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect, this, IDD_FORMVIEW)) { OutputDebugString(L"MyFormView Create"); } return 0; }
이로써 간단하게 ActiveX 컨트롤 완성 시켰습니다. 테스트를 해보기 위해서는 Internet Explorer 실행을 통해 확인 해야 합니다. ActiveX 컨트롤을 추가한 Test.html 파일을 만들어야 합니다.
Test.html
... <body> <object id="ActiveX" classid="CLSID:C5C3AAE2-4733-487B-8A11-C8925B15B3AE" width="800" height="600"> </body> ...
Test.html 파일에 ActiveX를 추가하였습니다. 중간에 보이는 Object 태그가 ActiveX인데 classid="CLSID:*" 해당 id는 그림 14와 같이 프로젝트명.idl 파일에서 확인 할 수 있습니다.
마지막으로 프로젝트를 빌드하고 ActiveX를 레지스트리에 등록하여 실행을 해보겠습니다. 프로젝트 빌드가 안 될 경우에는 VIsual Studio를 관리자권한으로 다시 실행하여 빌드 하시길 바랍니다.
그림 15와 같이 프로젝트 Debug 디렉토리로 이동 후에 그림 16과 같이 명령 프롬프트를 관리자 권한으로 실행 시킨 후에 CSharpActiveXCtrlWrapper.ocx 파일을 레지스트리에 등록합니다.
RegSvr32
- Ocx 파일 레지스트리에 등록 : regsvr32 파일명.ocx
- Ocx 파일 레지스트리에서 등록 해제 : regsvr32 -u 파일명.ocx
GitHub Source
https://github.com/soultomind/Blog/tree/develop/CSharpActiveXCtrlWrapper'VC++ > MFC' 카테고리의 다른 글
[MFC] - 프로그램 안에서 ActiveX 컨트롤 추가하여 사용하기 (0) 2018.04.14