KR101238550B1 - 명령을 내리는 방법 및 컴퓨터 판독가능 매체 - Google Patents

명령을 내리는 방법 및 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR101238550B1
KR101238550B1 KR1020087004028A KR20087004028A KR101238550B1 KR 101238550 B1 KR101238550 B1 KR 101238550B1 KR 1020087004028 A KR1020087004028 A KR 1020087004028A KR 20087004028 A KR20087004028 A KR 20087004028A KR 101238550 B1 KR101238550 B1 KR 101238550B1
Authority
KR
South Korea
Prior art keywords
binding
instruction
command
input
computer
Prior art date
Application number
KR1020087004028A
Other languages
English (en)
Other versions
KR20080041211A (ko
Inventor
나미타 ?타
마이클 제이. 힐버그
제프리 엘. 보그단
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20080041211A publication Critical patent/KR20080041211A/ko
Application granted granted Critical
Publication of KR101238550B1 publication Critical patent/KR101238550B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

여기에서 개시된 주제의 실시양상은 명령을 생성하여 전달하는 것에 관한 것이다. 실시양상에서, 그래픽 사용자 인터페이스의 요소는 제스처를 명령과 관련시키는 입력 바인딩을 포함한다. 제스처가 수신되면, 명령은 요소가 포커스를 갖는 지에 의존하여 생성된다. 또한, 그래픽 사용자 인터페이스의 요소는 명령이 수신될 때 호출하기 위한 메소드를 정의할 수도 있다. 이벤트 또는 명령이 수신될 때, 그래픽 사용자 인터페이스 상에 나타낼 수 있는 요소의 계층적 데이터 구조는 이벤트 또는 명령에 응답하기 위해 자세히 고찰될 수 있다.
명령, 계층적 데이터 구조, 입력 바인딩, 시각적 트리, 입력 이벤트

Description

명령을 내리는 방법 및 컴퓨터 판독가능 매체{METHOD AND COMPUTER-READABLE MEDIUM FOR COMMANDING}
본 발명은 명령을 생성하여 전달하는 것에 관한 것이다.
사용자가 애플리케이션을 열 때, 사용자는 애플리케이션 내의 다양한 기능을 사용자가 수행할 수 있게 하는 명령으로 액세스를 할 수 있다. 예를 들어, 사용자는 애플리케이션으로부터 텍스트 또는 기타 객체를 잘라내거나 복사할 수 있으며, 텍스트 또는 기타 객체를 다른 애플리케이션으로 붙여넣을 수 있다.
이들 명령은 다양한 방식으로 호출될 수 있다. 예를 들어, 사용자는 메뉴 도구모음을 선택하고, 잘라내기 또는 복사하기 명령을 찾기 위해 메뉴를 통해 탐색할 수 있다. 다른 예로서, 사용자는 애플리케이션으로부터 객체를 잘라내기 위해 단축키(예를 들어, [control]-x)를 입력할 수 있다. 또 다른 예로서, 사용자는 마우스로 텍스트를 선택하고 그 텍스트를 다른 위치로 끌어서, 잘라내기 및 붙여넣기 명령을 시작할 수 있다.
명령을 사용할 필요가 있을 수 있는 각종 입력 장치 및 애플리케이션을 이용하여, 명령 아키텍처를 구현하고 사용하는 것은 더욱 복잡해지고 있다. 이러한 복잡도는 명령을 사용하는 프로그램 개발시에 애플리케이션 개발자 및 다른 사람들에 의해 수행될 필요가 있는 작업을 증가시키고 있다.
간단히 설명하면, 여기에서 설명된 주제의 실시양상은 명령을 생성하여 전달하는 것에 관한 것이다. 실시양상에서, 그래픽 사용자 인터페이스의 요소는 제스처(gesture)를 명령과 관련시키는 입력 바인딩을 포함할 수 있다. 제스처가 수신될 때, 명령은 요소가 포커스를 갖는지에 의존하여 생성된다. 또한, 그래픽 사용자 인터페이스의 요소는 명령이 수신될 때 호출하기 위한 메소드를 정의할 수도 있다. 이벤트 또는 명령이 수신될 때, 그래픽 사용자 인터페이스 상에 나타낼 수 있는 요소의 계층적 데이터 구조는 이벤트 또는 명령에 응답하기 위해 자세히 고찰될 수 있다.
이 요약은 아래의 상세한 설명에서 더욱 설명되는 주제의 몇 가지 실시양상을 간략하게 식별하기 위해 제공된다. 이 요약은 청구된 주제의 중요한 또는 본질적인 특징을 식별하고자 하는 것도 아니고, 청구된 주제의 범위를 제한하는데 사용되고자 하는 것도 아니다.
"여기에서 설명된 주제"라는 말은 문맥이 명백하게 다르게 나타내지 않는 한 상세한 설명 부분에서 설명된 주제를 나타낸다. "실시양상"이라는 용어는 "하나 이상의 실시양상"으로 해석되어야 한다. 상세한 설명 부분에서 설명된 주제의 실시양상을 식별하는 것은 청구된 주제의 중요한 또는 본질적인 특징을 식별하고자 하는 것이 아니다.
상술된 실시양상 및 그외 다른 실시양상은 도면과 함께 다음의 상세한 설명으로부터 명백해질 것이다.
도 1은 여기에서 설명된 주제의 실시양상이 구체화될 수 있는 컴퓨터 시스템을 나타낸 블록도.
도 2A-6B는 여기에서 설명된 주제의 실시양상에 따라 작동할 수 있는 예시적인 애플리케이션 프로그래밍 인터페이스를 일반적으로 나타낸 블록도.
도 7 및 8은 여기에서 설명된 주제의 실시양상에 따라 컴파일러 또는 인터프리터가 하나 이상의 인터페이스를 하나 이상의 다른 인터페이스로 변환할 수 있는 방법을 일반적으로 나타낸 블록도.
도 9는 여기에서 설명된 주제의 실시양상에 따라 제어 템플릿으로서 사용된 스크롤 막대 컨트롤을 나타낸 블록도.
도 10은 여기에서 설명된 주제의 실시양상에 따라 시각적 트리를 일반적으로 나타낸 블록도.
도 11은 여기에서 설명된 주제의 실시양상에 따라 InputEvent의 수신에 응답하여 명령을 생성할 때 발생할 수 있는 동작을 일반적으로 나타낸 흐름도.
도 12는 여기에서 설명된 주제의 실시양상에 따라 명령과 관련된 동작을 실행할 때 발생할 수 있는 동작을 일반적으로 나타낸 흐름도.
도 13은 여기에서 설명된 주제의 실시양상이 동작할 수 있는 환경을 일반적으로 나타낸 블록도.
예시적인 운영 환경
도 1은 여기에서 설명된 주제의 실시양상이 구현될 수 있는 적합한 컴퓨팅 시스템 환경(100)의 예를 도시한 것이다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 일례에 불과하며, 여기에서 설명된 주제의 실시양상의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
여기에서 설명된 주제의 실시양상은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 여기에서 설명된 주제의 실시양상에서 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
여기에서 설명된 주제의 실시양상은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 인스트럭션와 관련하여 기술될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 여기에서 설명된 주제의 실시양상은 또한 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시되도록 설계된다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘 다에 위치할 수 있다.
도 1과 관련하여, 여기에서 설명된 주제의 실시양상을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 인스트럭션, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 인스트럭션, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매체를 포함한다. 단지 예로서, 도 1은 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(140), 이동식·비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 도시하고 있다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)에 대한 컴퓨터 판독가능 인스트럭션, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(162), 및 마우스, 트랙볼(trackball) 또는 터치 패드와 같은 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너, 핸드헬드 PC의 접촉식 화면 또는 기타 라이팅 태블릿(writing tablet) 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터(191) 외에, 컴퓨터는 또한 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리 적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 도 1에는 메모리 저장 장치(181)만이 도시되어 있지만, 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 1에 도시된 논리적 접속으로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
인터페이스
프로그래밍 인터페이스(또는 더욱 단순하게, 인터페이스)는 코드의 하나 이상의 세그먼트(들)이 코드의 하나 이상의 다른 세그먼트(들)과 통신할 수 있게 하거나 또는 코드의 하나 이상의 다른 세그먼트(들)에 의해 제공된 기능을 액세스할 수 있게 하는 임의의 메카니즘, 프로세스 또는 프로토콜로서 간주될 수 있다. 대안적으로, 프로그래밍 인터페이스는 다른 컴포넌트(들)의 하나 이상의 메카니즘(들), 메소드(들), 함수 호(들), 모듈(들) 등에 통신적으로 결합할 수 있는 시스템의 한 컴포넌트의 하나 이상의 메카니즘(들), 메소드(들), 함수 호(들), 모듈(들), 객체(들) 등으로서 간주될 수 있다. "코드의 세그먼트"라는 용어는 적용된 용어에 관계없이, 또는 코드 세그먼트가 따로따로 컴파일되었는 지의 여부, 또는 코드 세그먼트가 소스로서, 중간자로서, 아니면 객체 코드로서 제공되었는 지의 여부, 또는 코드 세그먼트가 런타임 시스템에서 이용되는지 아니면 프로세스에서 이용되는 지의 여부, 또는 코드 세그먼트가 동일한 기계 상에 또는 상이한 기계 상에 위치하는지, 아니면 다수의 기계를 가로질러 분산되었는 지의 여부, 또는 코드 세그먼트에 의해 나타내진 기능이 전체적으로 소프트웨어로 구현되는지, 전체적으로 하드웨어로 구현되는지, 아니면 하드웨어와 소프트웨어의 조합으로 구현되는 지의 여부에 관계없이, 코드의 하나 이상의 인스트럭션 또는 라인을 포함하기 위한 것으로, 예를 들어 코드 모듈, 객체, 서브루틴, 함수 등을 포함한다.
개념적으로, 프로그래밍 인터페이스는 일반적으로 도 2A 또는 2B에 도시된 바와 같이 간주될 수 있다. 도 2A는 제1과 제2 코드 세그먼트가 통신하는 연결로로서 인터페이스(205)를 도시하고 있다. 도 2B는 시스템의 제1과 제2 코드 세그먼트가 매체(220)를 통해 통신할 수 있게 하는 인터페이스 객체(210 또는 215)(제1 및 제2 코드 세그먼트의 일부일 수도 있고 아닐 수도 있음)를 포함하는 인터페이스를 도시하고 있다. 도 2B의 도면에서, 우리는 인터페이스 객체(210 및 215)를 동일한 시스템의 분리된 인터페이스로서 간주할 수 있고, 우리는 또한 객체(210 및 215)와 매체(220)가 인터페이스를 구성하는 것으로 간주할 수 있다. 도 2A 및 2B는 양방향 흐름을 도시하고, 각 흐름 측에 인터페이스가 있는 것으로 도시하고 있지만, 소정의 구현은 한 방향의 정보 흐름만을 가질 수도 있고(또는 후술되는 바와 같이 정보 흐름이 없을 수도 있음), 또는 한쪽에만 인터페이스 객체가 있을 수도 있다. 예로서. 애플리케이션 프로그래밍 인터페이스(API), 진입점, 메소드, 함수, 서브루틴, 원격 절차 호 및 컴포넌트 객체 모델(COM) 인터페이스와 같은 용어는 프로그래밍 인터페이스의 정의 내에 포함된다.
그러한 프로그래밍 인터페이스의 실시양상은 제1 코드 세그먼트가 정보(여기에서 "정보"는 가장 넓은 의미에서 사용되고, 데이터, 명령, 요청 등을 포함함)를 제2 코드 세그먼트로 전송하는 메소드; 제2 코드 세그먼트가 정보를 수신하는 메소드; 및 정보의 구조, 시퀀스, 구문, 조직, 스키마, 타이밍 및 내용을 포함할 수 있다. 이와 관련하여, 하위 전송 매체 자체는 정보가 인터페이스에 의해 정의된 방식으로 전송되는 한, 매체가 유선이든 무선이든, 아니면 그 둘의 조합이든지 간에, 인터페이스의 작동에 중요하지 않을 수 있다. 어떤 상황에서, 한 코드 세그먼트가 단순히 제2 코드 세그먼트에 의해 실행된 기능을 액세스할 때처럼, 정보 전송이 다른 매체를 통하거나(예를 들어, 코드 세그먼트들 사이의 정보 흐름과 분리된 버퍼, 파일 등에 배치된 정보), 존재하지 않을 수 있기 때문에, 정보는 종래의 의미에서 한 방향 또는 양방향으로 보내지지 않을 수도 있다. 이들 실시양상의 임의의 또는 모든 실시양상은, 예를 들어 코드 세그먼트가 느슨하게 결합된 또는 단단하게 결합된 구성으로 된 시스템이 일부인 지의 여부에 따라, 주어진 상황에서 중요할 수 있고, 따라서 이 목록은 예시적이고 비제한적인 것으로 간주되어야 한다.
이러한 프로그래밍 인터페이스의 개념은 본 분야에 숙련된 기술자들에게 알려져 있고, 상기 상세한 설명으로부터 명백하다. 그러나, 프로그래밍 인터페이스를 구현하는 다른 방식이 있으며, 분명하게 제외되지 않는 한, 이들 역시 이 명세서의 끝에서 설명된 청구범위에 의해 포함되게 하고자 한다. 그러한 다른 방식은 도 2A 및 2B의 매우 단순한 도면보다 더욱 정교하거나 복잡하게 보일 수 있지만, 그럼에도 불구하고, 동일한 전체 결과를 달성하기 위해서는 유사한 함수를 실행한다. 아래 설명은 프로그래밍 인터페이스의 몇몇 예시적인 대안 구현이다.
A. 분해(FACTORING)
한 코드 세그먼트에서 다른 코드 세그먼트로의 통신은 통신을 다수의 분리된 통신으로 나눔으로써 간접적으로 달성될 수 있다. 이것은 도 3A 및 3B에 개략적으로 도시된다. 도시된 바와 같이, 몇몇 인터페이스는 나눌 수 있는 기능 집합의 관점에서 설명될 수 있다. 그러므로, 도 2A 및 2B의 인터페이스 기능은 우리가 수학적으로 24를 2 x 2 x 3 x 2로서 제공하는 것처럼, 동일한 결과를 달성하기 위해 분해될 수 있다. 따라서, 도 3A에 도시된 바와 같이, 인터페이스(205)에 의해 제공된 함수는 동일한 결과를 달성하면서 인터페이스의 통신을 다수의 인터페이스(305, 306, 307 등)로 변환하기 위해 세분화될 수 있다.
도 3B에 도시된 바와 같이, 인터페이스(210)에 의해 제공된 함수는 동일한 결과를 달성하면서 다수의 인터페이스(310, 311, 312 등)로 세분화될 수 있다. 이와 유사하게, 제1 코드 세그먼트로부터 정보를 수신하는 제2 코드 세그먼트의 인터페이스(215)는 다수의 인터페이스(320, 321, 322 등)로 분해될 수 있다. 분해시, 제1 코드 세그먼트와 함께 포함된 인터페이스의 수는 제2 코드 세그먼트와 함께 포함된 인터페이스의 수와 일치할 필요는 없다. 도 3A 및 3B의 어느 경우든, 인터페이스(205 및 210)의 함수적 정신은 각각 도 2A 및 2B에서와 여전히 동일하다.
인터페이스의 분해는 분해가 인지하기 어려울 정도로 연합적이고 교환가능하며 기타 수학적인 특성을 따를 수 있다. 예를 들어, 연산의 순서는 중요하지 않을 수 있고, 따라서 인터페이스에 의해 실행된 함수는 코드 또는 인터페이스의 다른 부분에 의해 인터페이스에 도달하기 전에 잘 실행되거나, 또는 시스템의 분리된 컴포넌트에 의해 실행될 수 있다. 게다가, 프로그래밍 분야에 숙련된 기술자는 동일한 결과를 달성하는 상이한 함수 호를 작성하는 여러 가지 방법이 있다는 것을 이해할 수 있다.
B. 재정의(REDEFINITION)
몇몇 경우에, 의도한 결과를 여전히 달성하면서 프로그래밍 인터페이스의 소정의 실시양상(예를 들어, 파라미터)를 무시하거나 추가하거나 재정의할 수 있다. 이것은 도 4A 및 4B에 도시된다. 예를 들어, 도 2A의 인터페이스(205)는 제1 코드 세그먼트에서 제2 코드 세그먼트로 발행되고 3개의 파라미터인 입력, 정밀도 및 출 력을 포함하는 함수 호인 제곱(입력, 정밀도, 출력)을 포함한다고 하자. 중간 파라미터인 정밀도가 주어진 시나리오에서 관련 없으면, 도 4A에 도시된 바와 같이, 그 중간 파라미터는 무시되거나, 심지어 의미 없는(이 상황에서) 파라미터로 대체되는 편이 더 나을 것이다. 관련 없는 추가 파라미터가 또한 추가될 수 있다. 어느 경우든, 입력이 제2 코드 세그먼트에 의해 제곱된 후에 출력이 반환되는 한, 제곱의 기능은 달성될 수 있다.
정밀도는 물론 컴퓨팅 시스템의 소정의 다운스트림 또는 다른 부분에 대한 의미있는 파라미터일 수 있지만; 일단 정밀도가 제곱을 계산하는 한정된 목적에 필요하지 않으면, 그것은 대체되거나 무시될 수 있다. 예를 들어, 유효한 정밀도 값을 보내는 대신에, 생일과 같은 의미 없는 값은 결과에 나쁜 영향을 미치지 않고 보내질 수 있다. 이와 유사하게, 도 4B에 도시된 바와 같이, 인터페이스(210)는 인터페이스(210')로 대체되어, 파라미터를 무시하거나 인터페이스에 추가하도록 재정의된다. 인터페이스(215)는 이와 유사하게 인터페이스(215')로서 재정의되어, 불필요한 파라미터, 또는 다른 곳에서 처리될 수 있는 파라미터를 무시하도록 재정의될 수 있다. 알 수 있는 바와 같이, 몇몇 경우에, 프로그래밍 인터페이스는 어떤 목적에 필요없는 파라미터와 같은 실시양상을 포함할 수 있고, 따라서 그들 파라미터는 무시되거나 재정의될 수 있고, 또는 그외 다른 목적을 위해 다른 곳에서 처리될 수 있다.
C. 인라인 코딩(INLINE CODING)
또한, 코드 모듈들 사이의 "인터페이스"가 폼(form)을 변경하도록 2개의 분 리된 코드 모듈들 기능의 일부 또는 전부를 합병하는 것이 실행될 수 있다. 예를 들어, 도 2A 및 2B의 기능은 각각 도 5A 및 5B의 기능으로 변환될 수 있다. 도 5A에서, 도 2A의 이전의 제1 및 제2 코드 세그먼트는 그들 둘 다를 포함하는 모듈로 합병된다. 이 경우에, 코드 세그먼트는 여전히 서로 통신할 수 있지만, 인터페이스는 단일 모듈에 더욱 적합한 폼으로 적응될 수 있다. 그러므로, 예를 들어, 형식적인 Call 및 Return 문(statement)은 더 이상 필요 없지만, 인터페이스(205)에 따른 유사한 처리 또는 응답(들)은 여전히 실행될 수 있다. 이와 유사하게, 도 5B에 도시된 바와 같이, 도 2B로부터의 인터페이스(215)의 일부(또는 전부)는 인터페이스(210")를 형성하도록 인터페이스(210) 내로 인라인 기입될 수 있다. 도시된 바와 같이, 인터페이스(215)는 참조부호(215A" 및 215B")로 나누어지고, 인터페이스 부분((215A")은 인터페이스(210")를 형성하기 위해 인터페이스(210)와 인라인 코딩되었다.
구체적인 예를 위해, 도 2B로부터의 인터페이스(210)가 인터페이스(215)에 의해 수신된 함수 호인 제곱(입력, 출력)을 실행할 수 있는 경우를 고려하는데, 이때 인터페이스(210)는 제2 코드 세그먼트에 의해 (제곱하기 위해) 입력으로 보내진 값을 처리한 후에, 제곱한 결과를 출력으로 다시 보낸다. 그러한 경우에, 제2 코드 세그먼트에 의해 실행된 처리(입력 제곱)는 인터페이스로의 호 없이 제1 코드 세그먼트에 의해 실행될 수 있다.
D. 분리(DIVORCE)
한 코드 세그먼트에서 다른 코드 세그먼트로의 통신은 그 통신을 다수의 분 리된 통신으로 나눔으로써 간접적으로 달성될 수 있다. 이것은 도 6A 및 6B에 개략적으로 도시된다. 도 6A에 도시된 바와 같이, 미들웨어(middleware)의 하나 이상의 부분(들)(이들이 오리지널 인터페이스로부터 기능 및/또는 인터페이스 함수를 분리하기 때문에, 분리 인터페이스(들)이라 함)은 제1 인터페이스(605) 상의 통신이 상이한 인터페이스, 이 경우에 인터페이스(610, 615 및 620)에 따르도록, 제1 인터페이스(605) 상의 통신을 변환시키기 위해 제공된다. 이것은, 예를 들어 제1 인터페이스(605)의 프로토콜에 따라, 이를테면 운영 체제와 통신하도록 설계된 애플리케이션의 설치된 베이스가 있는 경우에 행해질 수 있는데, 이때 운영 체제는 상이한 인터페이스, 이 경우에 인터페이스(610, 615 및 620)를 사용하도록 변경된다. 제2 코드 세그먼트에 의해 사용된 오리지널 인터페이스는 제1 코드 세그먼트에 의해 사용된 인터페이스와 더 이상 호환하지 않을 정도로 변경되고, 따라서 중간자가 기존의 인터페이스와 새로운 인터페이스를 호환하게 하기 위해 사용된다.
이와 유사하게, 도 6B에 도시된 바와 같이, 제3 코드 세그먼트는 인터페이스(630)로부터의 통신을 수신하기 위한 분리 인터페이스(635), 및 분리 인터페이스(640)와 함께 작업하지만 동일한 함수 결과를 제공하도록 재설계된 인터페이스, 예를 들어 인터페이스(650 및 655)에 인터페이스 기능을 전송하기 위한 분리 인터페이스(640)와 함께 도입될 수 있다. 이와 유사하게, 인터페이스(635 및 640)는 동일하거나 유사한 함수 결과를 제공하면서, 도 2B의 인터페이스(210 및 215)의 기능을 새로운 운영 체제로 변환하기 위해 함께 작업할 수 있다.
E. 다시 쓰기(REWRITING)
또 다른 가능한 변형은 인터페이스 기능을, 동일한 전체 결과를 달성하는 다른 어떤 것으로 대체하기 위해 코드를 동적으로 다시 쓰는 것이다. 예를 들어, 중간 언어(예를 들어, Microsoft IL, JavaByteCode 등)로 나타낸 코드 세그먼트가 (.NET 프레임워크, Java런타임 환경, 또는 기타 유사한 런타임형 환경에 의해 제공된 것과 같은) 실행 환경에서 JIT(Just-in-Time) 컴파일러 또는 인터프리터에 제공되는 시스템이 있을 수 있다. JIT 컴파일러는 통신을 제1 코드 세그먼트에서 제2 코드 세그먼트로 동적으로 변환하도록, 즉 통신을 제2 코드 세그먼트(오리지널 또는 상이한 제2 코드 세그먼트)에 의해 요구될 수 있는 상이한 인터페이스에 따르게 하도록 쓰여질 수 있다. 이것은 도 7 및 8에 도시된다.
도 7에서 알 수 있는 바와 같이, 이 방법은 상술된 분리(Divorce) 시나리오와 유사하다. 이것은, 예를 들어 애플리케이션의 설치된 베이스가 제1 인터페이스 프로토콜에 따라 운영 체제와 통신하도록 설계되는 경우에 행해질 수 있는데, 이때 운영 체제는 상이한 인터페이스를 사용하도록 변경된다. JIT 컴파일러는 설치된 베이스 애플리케이션으로부터 실행중인 통신을 운영 체제의 새로운 인터페이스에 따르게 하기 위해 사용될 수 있다. 도 8에 도시된 바와 같이, 인터페이스(들)를 동적으로 다시 쓰는 이 방법은 또한 인터페이스(들)를 동적으로 분해하거나, 이와 다르게 변경하기 위해 적용될 수 있다.
또한, 주의할 점은 대안적인 실시예를 통해 인터페이스와 동일하거나 유사한 결과를 달성하는 상술된 시나리오가 다양한 방식으로, 즉 직렬로 및/또는 병렬로 결합되거나, 또는 기타 인터브닝 코드와 결합될 수도 있다는 점이다. 그러므로, 상기 대안적인 실시예는 상호 배타적이지 않고, 도 2A 및 2B에 나타낸 일반적인 시나리오와 동일하거나 대등한 시나리오를 생성하도록 혼합되고, 매칭되며, 결합될 수 있다. 또한, 주의할 점은 대부분의 프로그래밍 구성체에서와 같이, 여기에서 설명될 수는 없지만, 그럼에도 불구하고 여기에서 설명된 주제의 정신 및 범위에 의해 나타내지는 인터페이스의 동일하거나 유사한 기능을 달성하는 기타 유사한 방식이 있다는 것이고, 즉 주의할 점은 그것이 최소한 부분적으로, 인터페이스 가치의 기초가 되는 인터페이스에 의해 나타내진 기능, 및 그 인터페이스에 의해 가능해진 유리한 결과라는 것이다.
명령 내리기
명령은 다양한 시나리오에서 사용될 수 있다. 예를 들어, 명령은 볼드(bold), 이탤릭(italics) 및 밑줄과 같은 텍스트 속성을 추가하고, 잘라내고, 복사하고, 붙여넣는 등의 편집시에 사용될 수 있다.
이들 명령은 각종 소스로부터 생성될 수 있다. 예를 들어, 잘라내기 명령은 기타 입력 장치, 기타 프로그램 코드 등에 의해 키보드 단축키(예를 들어, [control]-x), 핸드헬드 장치 상의 소정의 동작(예를 들어, 가볍게 치기(flick)), 음성 명령을 입력하여 메뉴로부터 잘라내기 명령을 선택하는 것에 응답하여 생성될 수 있다.
명령은 상이한 객체에 적용될 때 상이한 것을 의미할 수 있다. 예를 들어, 텍스트 박스에서, 잘라내기 명령은 선택된 텍스트를 잘라내는 것을 의미할 수 있는 반면, 선택된 행이 있는 데이터 그리드에서, 잘라내기 명령은 전체 행을 삭제하는 것을 의미할 수 있다.
다른 시나리오에서, 명령은 제어 템플릿에서 사용될 수 있다. 예를 들어, 도 9에 나타낸 스크롤 막대(905)에서, 라인 업 단추(910), 라인 다운 단추(920) 및 트랙(915)이 있을 수 있다. 제어 템플릿은 사용자 또는 소프트웨어 개발자가 제어 기능을 변경시키지 않고 제어의 룩 앤드 필(look and feel)을 제어할 수 있게 할 수 있다. 예를 들어, 마크업 언어에서, 소프트웨어 또는 페이지 개발자는 다음과 같이 스크롤 막대의 템플릿을 정의할 수 있다:
Figure 112008012536234-pct00001
스크롤 막대(905)의 단추가 활성화될 때마다, 적절한 명령이 생성된다. 스크롤 막대(905)는 실제로 무엇이 LineUp 또는 LineDown 명령을 생성했는지 알 필요가 없다. 예를 들어, 명령은 단추(910 또는 920) 중의 하나를 선택하는 사용자에 의해, 음성 인식 소프트웨어에 의해, 키보드 입력 등에 의해 생성되었을 수 있다.
명령이 사용될 수 있는 다른 시나리오는 동작 또는 이벤트가 발생할 때마다 애플리케이션 개발자가 동작 또는 메소드를 실행하기를 바라는 경우이다. 애플리케이션 개발자는 제어형 단추 상의 이벤트 또는 동작과 명령을 관련시킴으로써 이것이 발생하게 할 수 있다. 예를 들어, 파일 객체는 FileOpen 및 FileEdit 동작을 정의할 수 있다. FileOpen 동작은 사용자가 엔터를 누르거나 선택된 항목 위에서 더블 클릭할 때 실행될 수 있다. 명령의 사용은 예를 들어, 애플리케이션 개발자가 UI 로직을 비즈니스 로직에서 분리할 수 있게 할 수 있다.
명령은 ICommand 인터페이스를 통해 구현될 수 있다. ICommand 인터페이스는 Execute 메소드 및 CanExecute 메소드를 포함할 수 있다. Execute 메소드는 명령이 실행될 때 취할 동작을 컴포넌트가 정의할 수 있게 할 수 있다. 예를 들어, 텍스트 박스가 포커스를 갖는 동안에 잘라내기 명령이 실행되면, 텍스트 박스 컴포넌트는 선택된 박스를 버퍼 내로 잘라낼 수 있다.
명령은 그 동작을 실행하기 위한 파라미터를 필요로 할 수 있다. 예를 들어, FileOpen 또는 Print 명령은 정확하게 작업하기 위해 파일 이름을 필요로 할 수 있다. 한 실시예에서, Execute 메소드는 파라미터 또는 일반 데이터가 의미하는 것을 명령의 소비자 또는 작성자가 정의하는 경우에, 유형 객체의 일반 데이터 또는 파라미터를 받아들인다. 명령이 파라미터를 필요로 하지 않으면, 그 명령은 임의의 패스된 파라미터를 무시할 수 있다.
CanExecute 메소드는 명령이 판독가능 인스트럭션한 지의 여부를 나타낼 수 있다. 예를 들어, 포커스가 스크롤 막대에 설정되지 않으면, 잘라내기 명령은 판독가능 인스트럭션하게 될 수 없다. 컴포넌트는 Execute 메소드를 실행할 수 있는지 판정하기 위해 CanExecute 메소드를 호출할 수 있다. CanExecute 메소드는 또한 필요 없다면 무시될 수 있는 파라미터를 받아들일 수 있다.
또한, 이벤트가 ICommand 인터페이스와 관련될 수 있다. 이벤트는 명령의 실행 능력이 변경되었을 때, 또는 ICommand 인터페이스에 따라 인스턴스화된 객체가 여전히 실행 가능한지 판정하기 위해 CanExecute를 호출해야 하는 때를 나타낼 수 있다. 이때, 객체는, 예를 들어 실행하기 위한 현재의 능력을 나타내기 위해 객체와 관련된 시각적 요소를 사용 가능하게 하거나 불가능하게 할 수 있다.
ICommand 인터페이스를 구현하는 예시적인 인터페이스는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00002
이 인터페이스에서, ICommand.Execute는 명령이 실행될 때 실행되어야 하는 메소드를 정의하고, ICommand.CanExecute는 부울(Boolean)을 반환하고, 명령이 실행될 것인 지의 여부를 나타내며, CanExecuteChangeEvent는 실행하기 위한 그 능력이 변경될 때마다 명령에 의해 불러내진다.
인터페이스를 사용할 수 있는 객체의 한 예는 폼(form) 상의 단추이다. 단추는 서브밋(submit) 명령과 관련될 수 있다. 단추가 클릭될 때, 예를 들어 정보를 서버에 제출하는 것이 요구될 수 있다. 이것이 허용되는 지의 여부에 관한 표시를 제공하기 위해, 단추는 정보가 특정 시점에서 제출될 수 있는 지의 여부에 기초하여 사용 가능하게 되거나 불가능하게 될 수 있다. 예를 들어, 정보는 제출하기 위한 모든 데이터가 이용가능한 지의 여부(예를 들어, 폼 상에 채워져 있는 지의 여부), 서버로의 연결이 이용가능한 지의 여부, 폼이 서버에 연결되었는 지의 여부 등에 기초하여 제출가능하게 되거나 되지 않을 수 있다. 서버로의 연결이 변경되면, CanExecuteChangeEvent 이벤트는 단추가 그것의 사용 가능하게 된/불가능하게 된 상태를 변경할 수 있도록 일어날 수 있다.
상술된 단추는 CommandSource의 한 예(이후 "CommandSource")이다. 일반적으로, CommandSource는 명령을 호출할 수 있는 임의의 요소를 포함할 수 있다. 기타 예시적인 CommandSource는 MenuItem, ListBoxItem, Hyperlink 및 기타 제어를 포함하는 기타 요소를 포함한다. CommandSource 클래스의 예시적인 인터페이스는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00003
CommandSource는 CommandSource가 호출될 때마다 ICommand.Execute를 호출함으로써 명령을 불러낼 수 있다. CommandSource는 호출되는 것이 의미하는 것을 정의할 수 있다. 예를 들어, 단추와 같은 CommandSource는 단추가 클릭될 때 명령을 불러낼 수 있다. CommandSource는 또한 ICommand.Execute 메소드에 CommandSource의 CommandParameter의 값을 보낼 수 있다.
또한, CommandSource는 명령 상의 CanExecute 상태에 기초하여 그 자신을 사용 가능하게 하거나 불가능하게 할 수 있다. 그렇게 하기 위해, CommandSource는 ICommand.CanExecute 메소드를 불러내서, 그 메소드에 CommandParameter의 값을 보 낼 수 있다. 이때, CommandSource는 CommandSource의 상태를 사용 가능 또는 불가능으로 설정하기 위해 반환된 부울을 사용할 수 있다.
CommandSource는 또한 ICommand.CanExecuteChangedEvent를 등록하여 신청할 수 있고, 그 다음에, CommandSource가 CanExecuteChangedEvent를 수신할 때마다 ICommand.CanExecute 메소드를 다시 불러낼 수 있다. ICommand.CanExecute로부터 반환된 값에 기초하여, CommandSource는 그에 따라 사용 가능하게 되거나 불가능하게 된 상태를 갱신할 수 있다.
명령을 불러내기 위해 사용될 수 있는 객체의 다른 예는 InputBinding 객체(이후 "InputBinding")이다. InputBinding은 입력을 명령과 관련시킨다. 후술되는 바와 같이 그리고 소정의 조건에 따라, InputBinding에 의해 식별된 입력이 수신될 때, 명령이 생성된다. 상술된 바와 같이, 입력은 키보드, 스타일러스, 마우스, 음성 입력 등을 포함하는 많은 소스로부터 발생할 수 있다. InputBinding 클래스의 예시적인 클래스 정의는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00004
InputGesture 객체(이후 "InputGesture")는 InputGesture가 듣기를 원하는, 마우스 클릭, 스타일러스 두드리기 또는 키보드 입력과 같은 이벤트의 하나 이상의 이벤트들 집합을 정의한다. 이 집합은 InputGesture의 InputEvents 속성을 사용하여 정의될 수 있다. 이벤트에 대응하는 이벤트 리스너(listener)는 임의의 이벤트가 발생할 때 InputGesture 객체가 통지받도록 등록될 수 있다.
InputGesture는 또한 Matches 메소드를 정의할 수 있는데, 이 Matches 메소드는 InputEventArgs를 받아들이고, InputEventArgs가 InputGesture와 관련된 이벤트 집합에 일치하는 지의 여부를 나타내는 값을 반환한다.
또한, ValidateCallback 메소드는 InputGesture 클래스의 서브클래스에 의해 제공될 수 있다. ValidateCallback은 일치를 찾기 위해 InputGesture에 대응하는 모든 가능한 InputBindings를 대조하기 전에 유효 인수가 수신되었는지 판정하기 위해 이벤트가 수신될 때 호출될 수 있다. InputGesture 클래스는 InputGesture의 더욱 특정된 유형(예를 들어, 마우스, 키보드, 스타일러스 등등)을 위한 부모 클래스로서 쓰일 수 있다.
InputGesture 클래스를 위한 예시적인 인터페이스는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00005
Figure 112008012536234-pct00006
InputBinding은 InputGesture를 명령과 관련시킨다. 예를 들어, InputBinding 객체는 [control]-c를 "복사하기" 명령과 관련시킬 수 있다. 다른 InputBinding 객체는 스타일러스 두드리기를 "잘라내기" 명령과 관련시킬 수 있다. InputBinding 객체가 (적절한 이벤트 집합에 의해 나타내지는) InputGesture를 얻을 때마다, 관련된 명령이 실행될 수 있다. InputBinding 클래스는 InputBinding의 더욱 특정된 유형(예를 들어, 마우스, 키보드, 스타일러스 등등)을 위한 부모 클래스로서 쓰일 수 있다.
도 10은 여기에서 설명된 주제의 실시양상에 따른 시각적 트리를 일반적으로 나타낸 블록도이다. (도 12와 함께 설명된 것과 같은) 그래픽스 프레임워크는 시각적 요소를 디스플레이하기 위해 시각적 트리를 사용할 수 있다. 시각적 트리는 디스플레이하기 위한 요소를 나타내는 시각적 요소(1005-1014)를 포함할 수 있다. 그러한 요소는 윈도우, 그리드, 목록 상자, 콤보 상자, 단추, 텍스트, 그래픽스, 패널 등을 포함할 수 있다. 시각적 트리 내의 몇몇 요소는 시각적 트리 내의 그외 다른 요소를 포함할 수 있다. 예를 들어, 윈도우 요소는 패널 및 그리드를 포함할 수 있다. 다른 예로서, 단추 요소는 텍스트 요소 및 직사각형 요소를 포함할 수 있다. 몇 가지 점에서, 시각적 트리는 계층 데이터 구조의 한 형태로서 생각될 수 있다.
상술된 바와 같이, InputBinding은 InputBinding에 의해 지정된 입력(예를 들어, InputGesture)이 수신될 때 명령을 생성한다. 일반적으로, 요소는 그것과 관련된 InputBinding의 컬렉션(즉, 0, 1, 또는 그 이상)을 가질 수 있다. 이들 InputBindings는 때로 "인스턴스" InputBindings라 칭해진다. 또한, InputBinding은 클래스 레벨에서 그리고 글로벌 레벨에서 등록될 수 있다.
도 11은 여기에서 설명된 주제의 실시양상에 따라 InputEvent의 수신에 응답 하여 명령을 생성할 때 발생할 수 있는 동작을 일반적으로 나타낸 흐름도이다, 블록(1105)에서, 동작이 시작된다.
블록(1110)에서, InputEvent가 수신된다. 예를 들어, 키보드 상의 키가 눌러지거나 , 마우스 단추가 눌러진다. 블록(1110)에서, 포커스가 있는 요소가 선택된다. 예를 들어, 텍스트 박스가 포커스를 가진 동안에 InputEvent가 수신되었으면, 그 텍스트박스가 선택된다.
블록(1120)에서, 요소가 InputEvent를 위해 정의된 인스턴스 InputBinding을 갖고 있는 지의 여부에 관해 판정이 이루어진다. 블록(1125)에서, 요소가 InputEvent를 위해 정의된 InputBinding을 갖고 있으면, 동작은 블록(1160)으로 계속되고; 그렇지 않으면, 동작은 블록(11130)으로 계속된다.
블록(1130)에서, 요소가 InputEvent를 위해 정의된 클래스 InputBinding을 갖고 있는 지의 여부에 관해 판정이 이루어진다. 블록(1135)에서, 요소가 InputEvent를 위해 정의된 클래스 InputBinding을 갖고 있으면, 동작은 블록(1160)으로 계속되고; 그렇지 않으면, 동작은 블록(11140)으로 계속된다.
몇 가지 구현에서, 클래스 InputBinding이 InputEvent를 위해 정의되지 않으면, InputEvent는 요소에 입력으로서 보내질 수 있다. 요소는 일련의 키 스트로크 또는 기타 입력에 "귀기울이고" 있을 수 있다. 요소가 그러한 입력에 귀기울이고 있고, 그 입력을 처리하면, 동작은 정지하고; 그렇지 않으면 동작은 블록(1140)으로 계속된다.
블록(1140)에서, 부모 요소가 현재의 요소에 대해 존재하는 지의 여부에 관 해 판정이 이루어진다. 존재하면, 동작은 블록(1145)으로 계속되고; 그렇지 않으면, 동작은 블록(1150)으로 계속된다.
블록(1145)에서, (예를 들어, 부모 요소에 관한 InputEvent를 불러냄으로써) 부모 요소가 선택된다. 그 다음, 블록(1120-1140)과 관련된 동작은 조상이 InputEvent를 위해 정의된 인스턴스 또는 클래스 InputBinding을 포함할 때까지, 또는 그러한 InputBinding을 포함하는 조상이 하나도 발견되지 않을 때까지 반복될 수 있다.
인스턴스 또는 클래스 InputBinding이 하나도 발견되지 않으면, 블록(1150)에서, 글로벌 InputBinding이 InputEvent을 위해 정의되었는 지의 여부에 관해 판정이 이루어진다. 블록(1155)에서, 글로벌 InputBinding이 InputEvent를 위해 정의되면, 동작은 블록(1160)으로 계속되고; 그렇지 않으면, 동작은 블록(1165)으로 계속된다.
블록(1160)에서, 발견된 InputBinding과 관련된 명령이 실행된다. 블록(1165)에서, 동작이 종료된다.
상기 동작은 명령의 생성과 관련하여 상당한 유연성을 제공한다는 것을 알 수 있을 것이다. 예를 들어, 글로벌 명령이 등록될 수 있는데, 이 글로벌 명령은 클래스 명령에 의해 무효화될 수 있고, 클래스 명령은 더 나아가 인스턴스 명령에 의해 무효화될 수 있다.
RoutedCommand 객체(이후 "RoutedCommand")는 시각적 트리 또는 기타 데이터 구조를 통해, 명령을 처리하는 요소에 명령을 발송하기 위해 사용될 수 있다. RoutedCommand는 명령의 대상이 포커스에 따라 바뀌는 경우에, 예를 들어, 잘라내기, 복사하기, 붙여넣기 등과 같은 명령과 함께 사용될 수 있다.
RoutedCommand는 특정 대상 요소 상에서 이벤트를 일으킴으로써, 또는 명령이 발생할 때 포커스를 갖는 요소 상에서 이벤트를 일으킴으로써 명령을 발송할 수 있다. 요소가 (예를 들어, 후술되는 CommandBinding를 통해) 명령에 바인딩되면, CommandBinding에 의해 정의된 핸들러(handler)는 명령을 처리하기 위해 호출될 수 있다. 요소가 명령에 바인딩되지 않으면, 이벤트는 요소의 부모 상에서 일어날 수 있다. 요소의 부모가 명령에 바인딩되면, 부모 요소를 위해 CommandBinding에 의해 정의된 핸들러는 명령을 처리한다. 요소의 부모가 명령에 바인딩되지 않으면, 이벤트가 그 부모 상에서 일어날 수 있는 등등으로 될 수 있다. 결국, 명령에 바인딩되는 요소가 발견되거나, 명령이 임의의 요소에 의해 처리되지 않고 시각적 트리의 상부에 도달한다.
몇 가지 구현에서, 클래스 및 글로벌 CommandBindings는 등록되어 사용될 수 있다. 그러한 구현에서, 적절한 CommandBinding의 선택은 InputBindings와 관련하여 도 11과 함께 설명된 것과 유사한 방식으로 진행될 수 있다.
CommandBinding 객체(이후 "CommandBinding")는 RoutedCommand와, 그 RoutedCommand를 위한 이벤트와 관련된 이벤트 핸들러에서 호출하기 위한 델리게이트(deligate)(예를 들어, 메소드) 사이의 관련성을 정의한다. 명령 객체는 실행될 때, 포커스가 있는 요소 상에서 PreviewCommandExecuteEvent 및 CommandExecuteEvent를 발생시켜, 명령을 파라미터로서 보낼 수 있다. 이와 유사하게, 명령의 IsEnabled 메소드는 호출될 때, 포커스가 있는 요소 상에서 CommandQueryEnabled 및 PreviewCommandQueryEnabledEvent를 불러낼 수 있다. CommandBinding 클래스의 예시적인 정의는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00007
도 12는 여기에서 설명된 주제의 실시양상에 따라 명령과 관련된 동작을 실행할 때 발생할 수 있는 동작을 일반적으로 나타낸 흐름도이다. 블록(1205)에서, 동작이 시작된다.
블록(1210)에서, Execute 메소드가 호출된다. 예를 들어, 사용자는 폼 상의 단추를 누른다. 블록(1210)에서, 포커스가 있는 요소가 선택된다. 명령이 대상 요소와 관련되면, 그 요소가 선택된다. 예를 들어, 대상이 된 텍스트박스와 관련된 Execute 메소드가 호출되었으면, 그 텍스트박스가 선택된다.
블록(1220)에서, 요소가 명령을 위해 정의된 인스턴스 CommandBinding을 갖고 있는 지의 여부에 관해 판정이 이루어진다. 블록(1225)에서, 요소가 명령을 위해 정의된 CommandBinding을 갖고 있으면, 동작은 블록(1260)으로 계속되고; 그렇 지 않으면, 동작은 블록(1230)으로 계속된다.
블록(1230)에서, 요소가 명령을 위해 정의된 클래스 CommandBinding을 갖고 있는 지의 여부에 관해 판정이 이루어진다. 블록(1235)에서, 요소가 명령을 위해 정의된 클래스 CommandBinding을 갖고 있으면, 동작은 블록(1260)으로 계속되고; 그렇지 않으면, 동작은 블록(1240)으로 계속된다.
블록(1240)에서, 현재의 요소에 대한 부모 요소가 존재하는 지의 여부에 관해 판정이 이루어진다. 존재하면, 동작은 블록(1245)으로 계속되고; 그렇지 않으면, 동작은 블록(1250)으로 계속된다.
블록(1245)에서, 부모 요소는 (예를 들어, 부모 요소 상에서 이벤트를 일으킴으로써) 선택된다. 이때, 블록(1220-1240)과 관련된 동작은 조상이 명령을 위해 정의된 인스턴스 또는 클래스 CommandBinding을 포함할 때까지, 또는 그러한 CommandBinding을 포함하는 조상이 하나도 발견되지 않을 때까지, 반복될 수 있다.
인스턴스 또는 클래스 CommandBinding이 하나도 발견되지 않으면, 블록(1250)에서, 글로벌 CommandBinding이 명령을 위해 정의되는 지의 여부에 관해 판정이 이루어진다. 블록(1255)에서, 글로벌 CommandBinding이 명령을 위해 정의되면, 동작은 블록(1260)으로 계속되고; 그렇지 않으면, 동작은 블록(1265)으로 계속된다.
블록(1260)에서, 발견된 CommandBinding에 의해 식별된 핸들러가 실행된다. 블록(1265)에서, 동작이 종료된다.
또한, CanExecute 쿼리는 RoutedCommand와 동일한 메카니즘을 통해 처리될 수 있다. 예를 들어, 요소가 CanExecute 메소드를 포함하면, 그 요소의 CanExecute 메소드는 그 요소에 포커스가 맞춰져 있을 때 호출된다. 그렇지 않으면, 검색은 CanExecute 메소드를 찾기 위해 요소의 조상들로 이루어진다. CanExecute 쿼리를 실행할 때, RoutedCommand는 포커스가 있는 요소 또는 선택된 요소 상에서 CanExecuteEvent를 일으킬 수 있다. RoutedCommand에 대한 예시적인 인터페이스는 다음과 같이 이루어질 수 있다:
Figure 112008012536234-pct00008
주의할 점은, InputElement 대상은 애플리케이션 개발자가 포커스가 있는 요소 대신에 특정 요소에 대한 RoutedCommand를 직접 대상으로 삼을 수 있게 한다는 것이다. 이것은, 예를 들어 애플리케이션 개발자가 단추 옆에 있는 텍스트박스 상의 "서브밋" 명령을 항상 실행해주는 버튼을 원할 때, 또는 그외 다른 어떤 특정 행위를 수행할 때, 유용할 수 있다.
더욱이, RoutedCommand는 RequerySuggested 이벤트에 귀기울일 수 있다. RequerySuggested 이벤트는 여러 가지 이유로 발생할 수 있다. 예를 들어, 포커스가 텍스트박스 내의 선택된 텍스트에 설정될 때, 잘라내기, 복사하기 및 붙여넣기 명령 (및 관련된 단추, 메뉴 항목 등)는 사용 가능하게 될 필요가 있을 수 있다. 그러나, 포커스가 스크롤 막대에 설정될 때, 이들 단추 및 제어는 잘라내기, 복사 하기 및 붙여넣기가 이용 불가능하게 될 수 있으므로, 사용 불가능하게 될 필요가 있을 수 있다. 그러므로, RequerySuggested 이벤트는 하나의 예로서 포커스가 바뀔 때마다 하나 이상의 요소 상에서 일어날 수 있다.
RequerySuggested 이벤트가 수신되면, RoutedCommand는 CommandSource가 듣고 있는 CanExecuteChangeEvent를 일으킬 수 있다. 그 다음, CommandSource는 그 상태를 갱신하기 위해 그 CanExecute 메소드를 호출할 수 있다.
RoutedCommand는 또한 IsRMEnabled 속성을 포함할 수 있다. IsRMEnabled 속성이 거짓으로 설정되면, 요소는 CanExecute가 참일지라도 사용가능하게 되지 않을 수 있다. 이것은, 예를 들어 다양한 명령을 실행하는 권한이 제한될 수 있는 디지털 권한 관리(DRM) 시스템과 함께 작업하기 위해 사용될 수 있다.
RoutedProperty는 애플리케이션 개발자가 대상이 포커스에 따라 바뀌므로 대상 위에서 직접 정의될 수 없게 할 수 있는 속성을 정의할 수 있게 할 수 있다. 예를 들어, 도구모음은 볼드, 이탤릭, 밑줄 등과 같은 도구모음 항목을 포함할 수 있다. 또한, 도구모음은 텍스트박스와 관련될 수 있고, 텍스트는 텍스트박스로부터 선택될 수 있다. 예를 들어, 볼드 도구모음 항목이 선택될 때, 선택된 텍스트의 볼딩은 토글될 수 있다. 볼드 도구모음 항목은 선택된 텍스트가 볼드를 지원하면 사용가능하게 될 수 있다. 또한, 도구모음 항목은 선택된 텍스트가 도구모음 항목과 관련된 특성(예를 들어, 볼딩, 이탤릭, 밑줄)을 포함하는 지의 여부에 관해 현재의 상태를 표시할 수 있다.
RoutedProperty에 대한 예시적인 인터페이스는 다음과 같이 이루어져 있다:
Figure 112008012536234-pct00009
RoutedProperty와 관련된 요소는 Command 및 RoutedCommand와 관련하여 이전에 설명된 메카니즘을 사용하여 그 사용 가능/불가능 상태를 설정할 수 있다. 또한, RoutedProperty는 포커스가 있는 요소의 현재 값을 얻기 위해 사용될 수 있으므로, 그에 따라 상태를 표시할 수 있다. 이 값은 값을 반환하는 포커스가 있는 요소 상에서 GetValueEvent를 발생시킴으로써 얻어질 수 있다. RoutedProperty는 또한, 예를 들어 명령을 통해 포커스가 있는 요소의 현재 값을 (예를 들어, 볼드에서 정상으로) 설정하기 위해 사용될 수 있다. 이 값은 포커스가 있는 요소 상에서 SetValueEvent를 발생시키고, 값을 설정하기 위한 값의 파라미터를 보냄으로써, 설정될 수 있다. 이들 이벤트는 상술된 바와 같이 RoutedCommand와 관련하여 설명된 것과 동일한 방식으로 전달될 수 있다.
도 13은 여기에서 설명된 주제의 실시양상이 동작할 수 있는 환경을 일반적으로 나타낸 블록도이다. 환경은 프로그램(1305), 프레젠테이션 프레임워크(1310), 프레젠테이션 코어(1315), 밀코어(milcore)(1320), 런타임 컴포넌트(1345), 코덱 컴포넌트(1325), 다이렉트 X(DirectX) 컴포넌트(1330), GDI(graphics device interface)(1335), 드라이버(1340) 및 런타임 모듈(1345)을 포함할 수 있다.
프레젠테이션 프레임워크(1310)는 소프트웨어 개발자에게 노출되고, 다양한 요청이 이루어질 수 있는 API를 포함한다. 단추, 목록 상자, 콤보 상자, 스크롤 막대, 스플리터(splitter) 등과 같은 그래픽스 프레임워크의 상위 레벨 객체는 프레젠테이션 프레임워크(1310) 내에 상주할 수 있다.
프레젠테이션 코어(1315)는 또한 다양한 요청이 이루어질 수 있는 API를 통해 소프트웨어 개발자에게 노출된다. 상술된 인터페이스는 프레젠테이션 코어(1315)를 통해 노출될 수 있다. ImageSource 객체, 브러시(brush), 펜, 형상, 애니메이션 지원, 텍스트 등과 같은 그래픽스 프레임워크의 상위 레벨 객체의 속성은 프레젠테이션 코어(1315) 또는 프레젠테이션 프레임워크(1310) 내에 상주할 수 있다.
밀코어(1320)는 프레젠테이션 프레임워크(1310) 및 프레젠테이션 코어(1315)의 API에 의해 제공된 기능을 구현한다. 밀코어(1320)는 프레젠테이션 코어(1315) 및 프레젠테이션 프레임워크(1310)에 의해 액세스될 수 있다.
런타임 컴포넌트(1345)는 하나 이상의 프로그래밍 언어로부터 생성된 중간 언어를 실행하는 환경을 제공할 수 있다. 예를 들어, 런타임 컴포넌트는 프레젠테이션 코어(1315), 프레젠테이션 프레임워크(1310) 및 프로그램(1305)을 구현하는 코드로부터 생성된 중간 언어를 실행하기 위해 사용될 수 있다.
코덱(1325)은 이미지의 인코딩 및 디코딩과 같은 이미징 작업을 위해 프레젠 테이션 코어(1315) 및 밀코어(1320)에 의해 사용될 수 있다.
다이렉트 X 컴포넌트(1330)는 소프트웨어 개발자가 하드웨어-특정 코드를 쓸 필요 없이 (비디오 및 사운드 하드웨어 특징과 같은) 특수 하드웨어 특징을 액세스할 수 있게 하기 위해 API를 제공할 수 있다. 프로그램(1305) 및 밀코어(1320)는 특징을 액세스하기 위해 다이렉트 X 컴포넌트(1330)를 사용할 수 있다.
GDI(1335)는 프로세스가 그래픽스 및 포맷된 텍스트를 비디오 디스플레이 상에 표시할 수 있게 하고, 그러한 프로세스를 위해 그래픽스 및 포맷된 텍스트를 표시하는 장치 드라이버와 상호작용할 수 있다.
드라이버(1340)는 하드웨어와 인터페이스하기 위해 사용될 수 있는 반면, 런타임(1345)은 다양한 프로그래밍 언어로부터 생성된 중간 코드를 실행하기 위해 사용될 수 있다.
도 13의 환경의 다양한 컴포넌트들 사이에 몇 개의 선을 그려서 이들 컴포넌트들 사이에서 통신하는 능력을 나타내고 있지만, 여기에서 설명된 주제의 정신 및 범위를 벗어나지 않고서, 더 많거나, 더 적거나, 그외 다른 통신 경로가 존재할 수 있다. 더욱이, 환경의 다양한 컴포넌트가 설명되었지만, 여기에서 설명된 주제의 정신 및 범위를 벗어나지 않고서, 더 많거나, 더 적거나, 그외 다른 컴포넌트가 기타 구성에서 사용되거나 구성될 수 있다는 것을 알 수 있을 것이다.
여기에서 설명된 주제의 실시양상이 입력을 추상하기 위해, 즉 구현을 추상하기 위해 사용될 수 있다는 것을 알 수 있을 것이다. 이것은 애플리케이션 개발자가 메뉴, 도구모음 및 기타 UI 요소를 더욱 용이하게 생성할 수 있게 한다. 예 를 들어, 애플리케이션 개발자는 마크업 언어로 메뉴 항목 또는 도구모음 항목을 명령과 관련시킴으로써 메뉴 또는 도구모음을 더욱 용이하게 생성할 수 있다. 더욱이, 표준 명령(예를 들어, 잘라내기, 복사하기, 붙여넣기 등등)을 정의하는 명령 라이브러리가 생성될 수 있다. 구현이 추상되기 때문에, 명령이 발행될 때, 요소 또는 그 조상에 적절한 핸들러가 자동으로 호출된다.
상기 상세한 설명으로부터 알 수 있는 바와 같이, 실시양상은 사용자 인터페이스에 관해 설명될 수 있다. 여기에서 설명된 주제의 실시양상은 다양한 변경 및 대안적인 구성을 할 수 있는데, 그에 관한 소정의 예시적인 실시예가 도면에 도시되고, 상세하게 위에서 설명되었다. 그러나, 청구된 주제의 실시양상을 개시된 특정 형태로 제한하고자 하는 것이 아니라, 오히려 여기에서 설명된 주제의 다양한 실시양상의 정신 및 범위 내에 속하는 모든 변경, 대안적인 구성 및 등가물을 포함하고자 하는 것이라는 것을 이해할 것이다.

Claims (20)

  1. 컴퓨터에 의해 실행될 때, 동작들을 실행하는 인스트럭션(instructions)을 포함하는 최소한 하나의 컴퓨터-판독가능 매체에 있어서,
    상기 동작들은,
    인터페이스에서, 명령어(command)를 실행하기 위한 인스트럭션을 수신하는 동작;
    그에 응답하여, 계층적 데이터 구조에 걸쳐(traversing) 상기 명령어와 관련된 명령어 바인딩 객체(command binding object)를 찾고자 시도하는 동작;
    제1의 상위 레벨 명령어 바인딩 객체가 상기 명령어와 관련 있음을 판정하는 동작- 상기 제1의 상위 레벨 명령어 바인딩 객체는 상기 명령어를 제1 인스트럭션에 관련시키는 바인딩 정보를 포함함 -;
    제2의 하위 레벨 명령어 바인딩 객체가 상기 명령어와 관련 있음을 판정하는 동작- 상기 제2의 하위 레벨 명령어 바인딩 객체는 상기 명령어를 제2의 다른 인스트럭션에 관련시키는 바인딩 정보를 포함함 -; 및
    상기 제2의 하위 레벨 명령어 바인딩 객체의 상기 바인딩 정보가 사용되도록 상기 제1의 상위 레벨 명령어 바인딩 객체의 상기 바인딩 정보를 상기 제2의 하위 레벨 명령어 바인딩 객체의 상기 바인딩 정보로 오버라이드하는(overriding) 동작
    을 포함하는 최소한 하나의 컴퓨터-판독가능 매체.
  2. 제1항에 있어서,
    계층적 데이터 구조에 걸쳐 상기 명령어와 관련된 객체를 찾고자 시도하는 상기 동작은 포커스가 있는 요소를 선택하는 동작, 및 명령어 바인딩 객체가 상기 요소를 상기 명령어와 관련시키는지 여부를 판정하는 동작을 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  3. 제2항에 있어서,
    계층적 데이터 구조에 걸쳐 상기 명령어와 관련된 객체를 찾고자 시도하는 상기 동작은 포커스가 있는 요소의 조상(ancestor)을 선택하는 동작, 및 명령 바인딩 객체가 상기 조상을 상기 명령어와 관련시키는지 여부를 판정하는 동작을 더 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  4. 제2항에 있어서,
    계층적 데이터 구조에 걸쳐 상기 명령어와 관련된 객체를 찾고자 시도하는 상기 동작은 명령 바인딩 객체가 상기 요소를 포함하는 클래스를 상기 명령어와 관련시키는지 여부를 판정하는 동작을 더 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  5. 제2항에 있어서,
    계층적 데이터 구조에 걸쳐 상기 명령어와 관련된 객체를 찾고자 시도하는 상기 동작은 글로벌 명령어 바인딩 객체가 상기 명령어와 관련되는지 판정하는 동작을 더 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  6. 제2항에 있어서,
    상기 계층적 데이터 구조는 복수의 요소들 사이의 관계들을 포함하는 시각적 트리를 포함하고, 상기 요소들의 각각은 그래픽 사용자 인터페이스 내에 나타낼 수 있는
    최소한 하나의 컴퓨터-판독가능 매체.
  7. 컴퓨터에 의해 실행될 때, 동작들을 실행하는 인스트럭션을 포함하는 최소한 하나의 컴퓨터-판독가능 매체에 있어서,
    상기 동작들은,
    인터페이스에서, 입력 이벤트를 수신하는 동작;
    그에 응답하여, 그래픽 사용자 인터페이스 내에 나타낸 요소가 상기 입력 이벤트에 대해 정의된 인스턴스 클래스 바인딩을 갖고 있는지 여부를 판정하는 동작;
    또한 클래스 명령어 바인딩 객체가 명령어와 관련 있음을 판정하는 동작- 상기 클래스 명령어 바인딩 객체는 상기 명령어를 클래스 인스트럭션에 관련시키는 바인딩 정보를 포함함 -;
    또한 인스턴스 명령어 바인딩 객체가 상기 명령어와 관련 있음을 판정하는 동작- 상기 인스턴스 명령어 바인딩 객체는 상기 명령어를 인스턴스 인스트럭션에 관련시키는 바인딩 정보를 포함함 -; 및
    상기 인스턴스 명령어 바인딩 객체의 상기 바인딩 정보가 사용되도록 상기 클래스 명령어 바인딩 객체의 상기 바인딩 정보를 상기 인스턴스 명령어 바인딩 객체의 상기 바인딩 정보로 오버라이드하는(overriding) 동작
    을 포함하는 최소한 하나의 컴퓨터-판독가능 매체.
  8. 제7항에 있어서,
    상기 입력 이벤트에 응답하여, 상기 요소가 상기 입력 이벤트에 대해 정의된 클래스 입력 바인딩을 갖고 있는지 여부를 판정하는 동작을 더 포함하고, 상기 클래스 입력 바인딩은 상기 클래스 입력 바인딩의 유형을 갖는 요소들을 불러내기 위한 메소드들을 정의하는
    최소한 하나의 컴퓨터-판독가능 매체.
  9. 제8항에 있어서,
    상기 입력 이벤트에 응답하여, 상기 요소의 부모가 상기 입력 이벤트에 대해 정의된 인스턴스 입력 바인딩을 갖고 있는지 여부를 판정하는 동작을 더 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  10. 제9항에 있어서,
    상기 요소의 어떤 조상도 상기 입력 이벤트에 대해 정의된 인스턴스 또는 클래스 입력 바인딩을 갖고 있지 않으면, 상기 입력 이벤트에 대해 글로벌 입력 바인딩이 정의되었는지 판정하는 동작을 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  11. 제7항에 있어서,
    상기 입력 이벤트는 입력 소스에 응답하여 생성되고, 상기 입력 소스는 최소한, 키보드, 마우스, 스타일러스, 또는 음성 명령들을 캡처하는 마이크로 구성되는
    최소한 하나의 컴퓨터-판독가능 매체.
  12. 제7항에 있어서,
    상기 요소가 상기 입력 이벤트와 관련된 입력 바인딩을 갖고 있으면, 상기 입력 바인딩과 관련된 명령어를 실행하는 동작을 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  13. 제12항에 있어서,
    상기 입력 바인딩과 관련된 명령을 실행하는 상기 동작은 상기 명령어를 핸들러(handler)와 관련시키는 명령어 바인딩을 갖는 요소에 대한 시각적 표현을 갖는 요소들의 시각적 트리를 검색하는 동작을 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  14. 제7항에 있어서,
    상기 입력 바인딩은 입력 제스처(gesture)를 명령어와 관련시키고, 상기 입력 제스처는 하나 이상의 이벤트들의 집합과 관련되며, 상기 입력 제스처는 상기 하나 이상의 이벤트들 중의 어느 한 이벤트가 발생하면 통지되는
    최소한 하나의 컴퓨터-판독가능 매체.
  15. 컴퓨팅 환경에서,
    입력 이벤트를 수신하는 단계;
    상기 입력 이벤트를 향하게 하기 위한 시각적 요소를 선택하는 단계;
    상기 시각적 요소가 상기 입력 이벤트를 포함하는 입력 제스처를 명령어와 관련시키는 바인딩 정보를 포함하는 바인딩 객체를 포함하는지 여부를 판정하는 단계;
    제1의 상위 레벨 명령어 바인딩 객체가 상기 명령어와 관련 있음을 판정하는 단계- 상기 제1의 상위 레벨 명령어 바인딩 객체는 상기 명령어를 제1 인스트럭션에 관련시키는 바인딩 정보를 포함함 -;
    또한 제2의 하위 레벨 명령어 바인딩 객체가 상기 명령어와 관련 있음을 판정하는 단계- 상기 제2의 하위 레벨 명령어 바인딩 객체는 상기 명령어를 제2의 다른 인스트럭션에 관련시키는 바인딩 정보를 포함함 -;
    발송 명령어(route command)을 사용하여 상기 명령어를 상기 제2의 다른 인스트럭션으로 발송하는 단계- 상기 발송 명령어는 명령어들이 포커스에 따라 변하는 명령어 타겟에 사용되도록 함 -; 및
    상기 제2의 하위 레벨 명령어 바인딩 객체의 상기 바인딩 정보가 사용되도록 상기 제1의 상위 레벨 명령어 바인딩 객체의 상기 바인딩 정보를 상기 제2의 하위 레벨 명령어 바인딩 객체의 상기 바인딩 정보로 오버라이드하는(overriding) 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 시각적 요소가 상기 입력 제스처를 상기 명령어와 관련시키는 바인딩을 포함하지 않으면, 상기 요소가 상기 입력 제스처를 명령어와 관련시키는 클래스 바인딩과 관련되는지 여부를 판정하는 단계를 더 포함하는 방법.
  17. 제16항에 있어서,
    상기 시각적 요소들의 부모의 바인딩이 상기 입력 제스처를 명령어와 관련시키는지는 여부를 판정하는 단계를 더 포함하는 방법.
  18. 제15항에 있어서,
    발송된(routed) 명령어 객체를 통해 상기 명령어를 실행하는 단계를 더 포함하고, 상기 발송된 명령어 객체는 상기 명령어와 관련된 메소드를 갖는 요소를 찾기 위해 계층적 데이터 구조를 검색하는데 사용되는 방법.
  19. 제7항에 있어서,
    그래픽 사용자 인터페이스 내에 나타낸 요소가 상기 입력 이벤트에 대해 정의된 인스턴스 바인딩을 갖고 있는지 여부를 판정하는 단계는 포커스를 갖는 요소를 선택하는 단계와 명령어 바인딩 객체가 상기 요소를 상기 명령어와 관련시키는지 여부를 판정하는 단계를 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
  20. 제19항에 있어서,
    그래픽 사용자 인터페이스 내에 나타낸 요소가 상기 입력 이벤트에 대해 정의된 인스턴스 바인딩을 갖고 있는지 여부를 판정하는 단계는 포커스를 갖는 상기 요소의 조상을 선택하는 단계와 명령어 바인딩 객체가 상기 조상을 상기 명령어와 관련시키는지 여부를 판정하는 단계를 포함하는
    최소한 하나의 컴퓨터-판독가능 매체.
KR1020087004028A 2005-08-30 2006-08-29 명령을 내리는 방법 및 컴퓨터 판독가능 매체 KR101238550B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/215,575 2005-08-30
US11/215,575 US7568035B2 (en) 2005-08-30 2005-08-30 Command binding determination and implementation
PCT/US2006/033926 WO2007027815A1 (en) 2005-08-30 2006-08-29 Method and computer-readable medium for commanding

Publications (2)

Publication Number Publication Date
KR20080041211A KR20080041211A (ko) 2008-05-09
KR101238550B1 true KR101238550B1 (ko) 2013-03-04

Family

ID=37805656

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087004028A KR101238550B1 (ko) 2005-08-30 2006-08-29 명령을 내리는 방법 및 컴퓨터 판독가능 매체

Country Status (6)

Country Link
US (1) US7568035B2 (ko)
EP (1) EP1922610A4 (ko)
JP (1) JP4420968B2 (ko)
KR (1) KR101238550B1 (ko)
CN (1) CN101253474A (ko)
WO (1) WO2007027815A1 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707255B2 (en) 2003-07-01 2010-04-27 Microsoft Corporation Automatic grouping of electronic mail
US8255828B2 (en) 2004-08-16 2012-08-28 Microsoft Corporation Command user interface for displaying selectable software functionality controls
US8146016B2 (en) 2004-08-16 2012-03-27 Microsoft Corporation User interface for displaying a gallery of formatting options applicable to a selected object
US9015621B2 (en) 2004-08-16 2015-04-21 Microsoft Technology Licensing, Llc Command user interface for displaying multiple sections of software functionality controls
US7703036B2 (en) 2004-08-16 2010-04-20 Microsoft Corporation User interface for displaying selectable software functionality controls that are relevant to a selected object
US20060253831A1 (en) * 2005-05-03 2006-11-09 Microsoft Corporation Validation architecture
US8627222B2 (en) 2005-09-12 2014-01-07 Microsoft Corporation Expanded search and find user interface
US9727989B2 (en) 2006-06-01 2017-08-08 Microsoft Technology Licensing, Llc Modifying and formatting a chart using pictorially provided chart elements
US7844915B2 (en) 2007-01-07 2010-11-30 Apple Inc. Application programming interfaces for scrolling operations
US20080168402A1 (en) * 2007-01-07 2008-07-10 Christopher Blumenberg Application Programming Interfaces for Gesture Operations
US20080168478A1 (en) * 2007-01-07 2008-07-10 Andrew Platzer Application Programming Interfaces for Scrolling
US8436815B2 (en) * 2007-05-25 2013-05-07 Microsoft Corporation Selective enabling of multi-input controls
US8484578B2 (en) 2007-06-29 2013-07-09 Microsoft Corporation Communication between a document editor in-space user interface and a document editor out-space user interface
US8762880B2 (en) 2007-06-29 2014-06-24 Microsoft Corporation Exposing non-authoring features through document status information in an out-space user interface
US9071623B2 (en) 2007-09-28 2015-06-30 Xcerion Aktiebolag Real-time data sharing
US8645827B2 (en) 2008-03-04 2014-02-04 Apple Inc. Touch event model
US8174502B2 (en) 2008-03-04 2012-05-08 Apple Inc. Touch event processing for web pages
US8416196B2 (en) * 2008-03-04 2013-04-09 Apple Inc. Touch event model programming interface
US8717305B2 (en) 2008-03-04 2014-05-06 Apple Inc. Touch event model for web pages
US9588781B2 (en) * 2008-03-31 2017-03-07 Microsoft Technology Licensing, Llc Associating command surfaces with multiple active components
US9665850B2 (en) 2008-06-20 2017-05-30 Microsoft Technology Licensing, Llc Synchronized conversation-centric message list and message reading pane
US8566044B2 (en) * 2009-03-16 2013-10-22 Apple Inc. Event recognition
US9311112B2 (en) * 2009-03-16 2016-04-12 Apple Inc. Event recognition
US8566045B2 (en) 2009-03-16 2013-10-22 Apple Inc. Event recognition
US9684521B2 (en) 2010-01-26 2017-06-20 Apple Inc. Systems having discrete and continuous gesture recognizers
US8285499B2 (en) 2009-03-16 2012-10-09 Apple Inc. Event recognition
US20100325565A1 (en) * 2009-06-17 2010-12-23 EchoStar Technologies, L.L.C. Apparatus and methods for generating graphical interfaces
US9268404B2 (en) * 2010-01-08 2016-02-23 Microsoft Technology Licensing, Llc Application gesture interpretation
US10216408B2 (en) 2010-06-14 2019-02-26 Apple Inc. Devices and methods for identifying user interface objects based on view hierarchy
CN103109258B (zh) * 2010-09-22 2017-05-24 日本电气株式会社 信息显示装置、显示方法、终端装置
US20120198353A1 (en) * 2011-01-28 2012-08-02 Microsoft Corporation Transferring data using a physical gesture
US9298363B2 (en) 2011-04-11 2016-03-29 Apple Inc. Region activation for touch sensitive surface
US9733716B2 (en) 2013-06-09 2017-08-15 Apple Inc. Proxy gesture recognizer
US11590098B2 (en) 2016-09-06 2023-02-28 Mayo Foundation For Medical Education And Research Methods of treating triple-negative breast cancer using compositions of antibodies and carrier proteins
JP6651275B1 (ja) * 2019-08-01 2020-02-19 株式会社ディスコ 加工装置
CN113126992A (zh) * 2021-05-11 2021-07-16 南京炫佳网络科技有限公司 一种控件元素的控制方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040111692A1 (en) 2000-12-21 2004-06-10 Mentor Graphics Corp. Interactive interface resource allocation in a behavioral synthesis tool
US20050108735A1 (en) 2003-11-18 2005-05-19 Dwayne Need Extension of commanding to control level

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5237654A (en) * 1990-04-17 1993-08-17 International Business Machines Corporation Hierarchical inter-panel process flow control
US5761656A (en) * 1995-06-26 1998-06-02 Netdynamics, Inc. Interaction between databases and graphical user interfaces
JP4558255B2 (ja) * 2002-01-28 2010-10-06 三菱電機インフォメーションテクノロジー株式会社 エミュレータ端末への表示データダウンロード方法
JP2004334332A (ja) * 2003-04-30 2004-11-25 Ricoh Co Ltd 多次元データベース参照プログラム
US7721254B2 (en) * 2003-10-24 2010-05-18 Microsoft Corporation Programming interface for a computer platform

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040111692A1 (en) 2000-12-21 2004-06-10 Mentor Graphics Corp. Interactive interface resource allocation in a behavioral synthesis tool
US20050108735A1 (en) 2003-11-18 2005-05-19 Dwayne Need Extension of commanding to control level

Also Published As

Publication number Publication date
WO2007027815A1 (en) 2007-03-08
JP4420968B2 (ja) 2010-02-24
EP1922610A1 (en) 2008-05-21
CN101253474A (zh) 2008-08-27
EP1922610A4 (en) 2011-09-21
JP2009506465A (ja) 2009-02-12
US7568035B2 (en) 2009-07-28
KR20080041211A (ko) 2008-05-09
US20070050469A1 (en) 2007-03-01

Similar Documents

Publication Publication Date Title
KR101238550B1 (ko) 명령을 내리는 방법 및 컴퓨터 판독가능 매체
US7437715B2 (en) System and method for generating a set of robot commands based on user entry events in a user interface
US8924844B2 (en) Object annotation
US8745581B2 (en) Method and system for selectively copying portions of a document contents in a computing system (smart copy and paste
US10255045B2 (en) Graphical representation of data in a program code editor
US8201143B2 (en) Dynamic mating of a modified user interface with pre-modified user interface code library
US9524176B2 (en) Method and system for binding graphical interfaces to textual code
US20060253831A1 (en) Validation architecture
US9449112B2 (en) Extension activation for related documents
US20040145601A1 (en) Method and a device for providing additional functionality to a separate application
US11947443B2 (en) Robotic process automation (RPA) debugging systems and methods
US6707469B1 (en) Synchronous execution in a medical imaging system
KR20080001706A (ko) 애플리케이션 윈도우 그룹화 및 관리를 위한 방법 및 장치
US20150317288A1 (en) Method and system to maintain a web page
US11635977B2 (en) Enhanced target selection for robotic process automation
US7631272B2 (en) Focus scope
KR20130105287A (ko) 클라이언트 어플리케이션 및 웹 페이지 통합
CN113032273B (zh) 一种应用程序的调试方法、装置、计算机设备和存储介质
CN113590123A (zh) Wpf界面切换方法、装置、计算机设备及存储介质
Yao et al. . NET compact framework programming with C#
US20220164183A1 (en) Code review system with development environment integration
US20070124686A1 (en) Locating graphical elements for an object
Coquand et al. An Emacs interface for type directed support constructing proofs and programs
Pavlidis Text and Dialog Widgets
Collins Communicating with the Host Application

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160119

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170119

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 8