웹, HTML

HOWTO: WebBrowser 컨트롤의 상황에 맞는 표준 메뉴에 항목 추가 - msdn 한글

디버그정 2008. 9. 12. 13:13

HOWTO: WebBrowser 컨트롤의 상황에 맞는 표준 메뉴에 항목 추가

Retired KB Article이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.
기술 자료 ID : 177241
마지막 검토 : 2004년 3월 4일 목요일
수정 : 2.0
이 문서는 이전에 다음 ID로 출판되었음: KR177241

요약

본 문서에는 인터넷 클라이언트 SDK의 "Reusing the Web Browser Control & MSHTML" 개요에 있는 "Controlling the Context Menus" 절의 내용을 보충하는 정보가 포함되어 있습니다. 특히 본 문서에서는 추가된 항목이 나타나는 컨텍스트를 제어하기 위한 선택적인 레지스트리 키뿐만 아니라 상황에 맞는 메뉴 이벤트 개체에 대해서도 설명합니다.

위로 가기

추가 정보

다음은 "상황에 맞는 표준 메뉴에 항목 추가" 절의 전체 내용입니다.

위로 가기

상황에 맞는 표준 메뉴에 항목 추가

레지스트리에 항목을 넣고 스크립트를 실행하는 URL에 항목을 연결함으로써 WebBrowser 컨트롤의 기존 상황에 맞는 메뉴에 항목을 추가할 수 있습니다. 표준 WebBrowser 상황에 맞는 메뉴에 항목을 추가하려면 아래의 키를 만들거나 엽니다.
   HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt
메뉴에 표시할 텍스트를 키 이름으로 사용하여 이 키 아래에 새 키를(값이 아님) 만듭니다. 이 키의 기본값은 실행될 URL을 포함합니다. 키 이름에 "앰퍼샌드(&)" 문자를 포함할 수 있으며 그럴 경우 "앰퍼샌드(&)" 바로 다음의 문자는 메뉴에 나타날 때 밑줄이 표시됩니다. URL은 숨겨진 HTML 대화 상자 안에서 로드되고, 모든 인라인(Inline) 스크립트가 실행된 후 대화 상자가 닫힙니다. 숨겨진 HTML 대화 상자의 external.menuArguments 속성은 상황에 맞는 메뉴 항목이 실행된 창의 창 개체를 포함합니다.

아래의 레지스트리 항목은 제목이 "My Menu Item"인 항목을 WebBrowser 컨트롤의 상황에 맞는 메뉴에 추가하고 "c:\myscript.htm" 파일에 포함된 인라인(Inline) 스크립트를 실행합니다.
   HKEY_CURRENT_USER
       Software
           Microsoft
               Internet Explorer
                   MenuExt
                       My Menu Item = "file://c:\myscript.htm"
"c:\myscript.htm" 파일의 내용은 아래와 같습니다.
   <SCRIPT LANGUAGE="JavaScript" defer>
   var parentwin = external.menuArguments;
   var doc = parentwin.document;
   var sel = doc.selection;
   var rng = sel.createRange();
   var str = new String(rng.text);
   if(str.length == 0)
      rng.text = "MY INSERTED TEXT";
   else
      rng.text =  str.toUpperCase();
   </SCRIPT>
이 스크립트는 external.menuArguments에서 부모 창 개체를 얻습니다. 부모 창 개체는 상황에 맞는 메뉴 항목이 실행된 WebBrowser 컨트롤입니다. 그런 다음 스크립트는 현재 선택된 텍스트를 얻는데, 만일 선택된 텍스트가 없으면 상황에 맞는 메뉴가 실행된 지점에 "MY INSERTED TEXT"라는 텍스트를 삽입합니다. 선택된 텍스트가 있으면 그 텍스트를 대문자로 바꿉니다.

위로 가기

선택적인 키

앞에서 만든 항목 레지스트리 키 아래에는 두 개의 선택적인 값이 있습니다. 그 중 한 값은 이 항목이 나타날 상황에 맞는 메뉴를 지정합니다. 나머지 한 값은 스크립트가 대화 상자로서 실행되어야 하는지의 여부를 지정합니다.

"Contexts" DWORD 값은 항목이 표시될 상황에 맞는 메뉴를 지정합니다. 이 값은 mshtmhst.h에 정의된 아래와 같은 값들의 논리적 OR로 구성되는 비트 마스크입니다. 이 값들은 IDocHostUIHandler::ShowContextMenu 호출에서 전달되는 상수와 상응합니다.
(0x1 << CONTEXT_MENU_DEFAULT) (evaluates to 0x1)
(0x1 << CONTEXT_MENU_IMAGE) (evaluates to 0x2)
(0x1 << CONTEXT_MENU_CONTROL) (evaluates to 0x4)
(0x1 << CONTEXT_MENU_TABLE) (evaluates to 0x8)
(0x1 << CONTEXT_MENU_TEXTSELECT) (evaluates to 0x10)
(0x1 << CONTEXT_MENU_ANCHOR) (evaluates to 0x20)
(0x1 << CONTEXT_MENU_UNKNOWN) (evaluates to 0x40)
따라서, 예를 들어 단순한 확장이 기본 메뉴와 텍스트 선택 메뉴에만 나타나게 하려면 레지스트리의 "My Menu Item" 키 아래에 "Contexts"라는 DWORD 값을 만들고 그것을 0x11로 설정합니다. 이것을 C/C++ 코드로 아래와 같이 표현할 수 있습니다.
(0x1 << CONTEXT_MENU_DEFAULT) | (0x1 << CONTEXT_MENU_TEXTSELECT)
나머지 선택적인 레지스트리 DWORD 값은 "Flags"입니다. 이 레지스트리 값에 유효한 비트는 하나(0x1)뿐인데, Mshtmhst.h 파일에서 이 비트는 MENUEXT_SHOWDIALOG로 정의되어 있습니다. 이 비트를 설정하면 스크립트는 ShowModalDialog 메서드를 통해 호출된 것처럼 실행됩니다. 스크립트를 실행하는 창이 표시되고, 인라인(Inline) 및 온로드(Onload) 스크립트가 완료된 후 대화 상자가 자동으로 닫히지 않습니다. external.menuArugments 값은 사용자가 메뉴 항목을 선택한 창 개체를 여전히 포함합니다.

위로 가기

상황에 맞는 메뉴 이벤트

상황에 맞는 메뉴 확장이 트리거(Trigger)될 때마다 주 창의 이벤트 개체(external.menuArguments.event)는 사용자가 마우스를 누른 위치 및 표시된 상황에 맞는 메뉴에 대한 정보를 포함합니다. 마우스 좌표는 event.srcElement를 따라 유효합니다. event.type 값은 사용자에게 표시된 상황에 맞는 메뉴를 나타내는 아래 문자열 중 하나를 포함합니다.
MenuExtDefault
MenuExtImage
MenuExtControl
MenuExtTable
MenuExtTextSelect
MenuExtAnchor
MenuExtUnknown

위로 가기

기타 예제

이 예제에서는 기본 메뉴에 새로운 상황에 맞는 메뉴 항목을 만듭니다. 사용자가 새 창의 아무 곳이나 누르면 "Show in New Window"라는 이 항목이 시작됩니다. 따라서, 항목이 프레임셋에서 깊게 중첩되어 있는 경우 쉽게 특정 프레임을 고유한 창에서 시작할 수 있습니다. 아래에 올바른 레지스트리 설정을 삽입하기 위해 실행할 수 있는 .reg 파일의 내용이 있습니다. 이 파일의 이름은 Example2.reg입니다. 탐색기에서 이 파일을 두 번 누르면 레지스트리에 설정이 삽입됩니다.
   [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Show in
   &New Window]
   @="file://c:\\example2.htm"
   "Contexts"=dword:00000001
아래는 "C:\Example2.htm" 파일의 내용입니다.
   <SCRIPT LANGUAGE="JavaScript" defer>
      open(external.menuArguments.location.href);
   </script>

위로 가기

참조

인터넷 클라이언트 SDK: Internet Tools & Technologies; Reusing the Web Browser Control and MSHTML; Overview

위로 가기