2012-09-17 6 views
0

Windows 기본 C++/Win32/MFC 대화 앱이 있습니다. 대화 상자에서 IE ActiveX 컨트롤을 사용하여 일부 HTML 내용을 렌더링하고 있습니다. 렌더링되는 HTML에는 버튼이 있습니다. 버튼에는 아래와 같이 onClick 자바 스크립트 핸들러가 있습니다.C++ 코드에서 HTML 버튼 클릭 이벤트 처리

<input type="button" id="uniqueButtonID" name="uniqueButtonName" value="blue" onClick="OnButtonClick('blue');"> 

현재 버튼 클릭은 표시된 javascript 핸들러에 의해 페이지에서 처리됩니다. 이것은 모두 작동합니다.

대신 대화 상자 C++ 코드에서 버튼 클릭을 처리하고 싶습니다.

대화 상자에서 다른 이벤트를 처리하는 데 경험이 있습니다. 예를 들어, 아래에서 작동하고 doc complete 이벤트 및 탐색을 처리 할 수 ​​있습니다.

BEGIN_EVENTSINK_MAP(DMyDlg, CDialog) 
ON_EVENT(DMyDlg, IDC_EXPLORER2, 259, DMyDlg::DocumentCompleteExplorer2, VTS_DISPATCH VTS_PVARIANT) 
ON_EVENT(DMyDlg, IDC_EXPLORER2, 250, DMyDlg::BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL) 
END_EVENTSINK_MAP() 

미리 정의 된 잘 알려진 이벤트입니다. onClick = ""섹션의 버튼에서 정의한 것을 처리하는 방법을 잘 모르겠습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까? 여기서 동기 부여는 일부 비즈니스 로직을 정의하는 다른 C++ 응용 프로그램에 사용되는 코드가 있다는 것입니다. 나는 여기에 사용 된 것과 동일한 비즈니스 로직을 원한다. 현재 나는 그것을 자바 스크립트로 매번 번역해야한다. C++ 코드에서 이벤트를 처리 할 수 ​​있다면 복사/붙여 넣기 (또는 DLL을 통해 다시 사용)하고 자바 스크립트 번역 단계를 피할 수 있습니다.

답변

1

JavaScript와 C++ 사이의 브리지로 COM 개체를 만들어야합니다. 이름 "ActiveXObject"에도 불구하고, 객체가 전체 ActiveX 컨트롤, 단지 COM 개체를 할 필요가 없다는

var myhelper = new ActiveXObject("MyCompany.MyHelper"); 

참고 : 자바 스크립트 초기화 코드는 같을 것이다. 그런 다음 온 클릭 처리기에서 당신은 다만 할 수 있습니다

myhelper.DoThis(); 
myhelper.DoThat(); 

은 "재미"부분은 C++에서 COM 개체를 만드는 - IDL 파일, ATL 클래스, IDispatch를,의 IUnknown과 잊지하려고 모든 물건을.

하나의 문제 - C++ 코드가 응용 프로그램 exe (별도의 COM DLL이 아님)에있는 경우 프로그램이 시작될 때 "MyCompany.MyHelper"에 대한 클래스 팩터 리 인스턴스를 만들어야한다는 것을 잊지 마십시오. JavaScript에서 "새 ActiveXObject"가 성공할 수 있도록 COM에 등록하십시오.

[업데이트 1]

내 초기 응답에 추가한다 - 당신이 그것을 피할 수 있다면 나는 실제로이 일을하지 않는 것이 좋습니다. C#과 .NET이 존재하기 전에, 우리 회사에서 우리는 실제로 COM이 좋은 것이었지만 그것을 배울 시간과 노력이 필요했습니다. 오늘 ...별로.

귀하의 비즈니스 로직을 C++ 및 JavaScript로 다시 작성하는 것은 많은 추가 작업처럼 보일 수 있지만 적어도 계획, 할당 및 추가 작업을 할 수있는 추가 작업이 필요합니다. 끝. 일단 C++/COM/ActiveScripting의 경로를 거치면 작업이 멈출 때까지 모호한 COM 관련 문제를 추적하는 데 소요되는 시간에 제한이 없습니다. 아무튼 행운을 빌어 요!

+0

감사! 나는 그것을 시도 할 것이다. – Nerdtron

+0

나는 OLE/COM에 대해 많은 읽기를했지만 그 날을 잊어 버렸습니다. :) 이제는 두통이 생겨서 가장 간단한 방법을 통해 간단한 객체를 만들 수 있습니다. Javascript에서 메소드 호출 ... – Nerdtron

+1

동의. 업데이트 된 답변보기 –