2012-11-06 3 views
0

, 나는 나 자신이 내의 WinMain 파일에 HWND 변수의 큰 불편 스택을 만들 발견 - 예를 들어 메시지 루프 - 액세스 할 수 있어야합니다.WinAPI - 많은 HWND 개체를 구성하는 방법?</p> 물론 <pre><code>HWND foo; HWND bar; HWND baz; HWND etc; int WINAPI WinMain(...) {} </code></pre> <p>, 이러한 변수는 파일의 나머지 부분의 기능에 사용되는 : 나는 앞으로 내 첫 WINAPI UI를 밀어으로

비교적 작은 UI의 경우 30 개의 HWND가 겹쳐서 표시되는 범위에 있습니다. 이것은 내가 잘못하고 있다는 것을 매우 의심스럽게합니다.

이런 일이 발생해야합니까, 아니면 이것을 구성하는보다 실질적인 방법이 있습니까?

+1

나는'std :: map '와 함께 갈 것이다. 그렇게하면 각 그룹에 이름을 부여 할 수 있으므로 그룹화하면서 쉽게 식별 할 수 있습니다. – chris

+0

나는 hashmap과 같은 것이 유용 할 것이라고 생각했지만, 조금 주관적인 것 같습니다. 그것은 또 다른 수준의 복잡성 (핵심 이름 기억)을 추가하는 것처럼 보일뿐 아니라 매우 공공의 범위에서 큰 더미를 남깁니다. 이거 괜찮아? – Ben

+1

이 'HWND' 변수를 해당 객체를 제어하는 ​​클래스의 멤버로 만들지 않겠습니까? –

답변

1

프로그램에 따라 몇 가지 해결책이 있습니다.

  1. 모든 핸들을 std::vector과 같은 하나 이상의 컨테이너에 넣을 수 있습니다.
  2. chris가 제안한 것과 같이 맵핑 할 수 있습니다.
  3. 프로그램이 커지면 논리 단위로 구성하는 것이 좋습니다. 예를 들어, 그 중 15 개가 로직의 절반을, 나머지 15 개가 나머지 절반 (탭 내부의 컨트롤)이라면 어떤 방식 으로든 컨트롤을 그룹화 할 수 있습니다 (파일, 클래스, 가장 논리적으로 맞는 것은 무엇이든).).
0

기본 프로그램에는 하나의 HWND 만 있으면되며 기본 창용입니다.

API에는 단일 기본 창이 필요하지 않지만 가장 일반적입니다. 또한 사용자 관점에서 볼 때 응용 프로그램이 여러 개의 독립적 인 창을 제공한다고해도 프로그램에 기본 창을 표시하는 것이 좋습니다 (보이지 않지만 그룹화 할 수 있음).

다른 창은 기본 창의 자식이거나 기본 창에서 소유 한 창입니다. 일반적으로. 특히 최초의 Windows 프로그램입니다. :-) 따라서이 창에는 별도의 변수가 필요하지 않습니다. 윈도우가 무언가에 반응해야 할 때마다 윈도우에 대한 메시지입니다. 이는 관련 창 핸들을 인수로 사용하여 함수를 호출하는 것을 의미합니다.

모든 하위 창에는 고유 한 정수 ID가있을 수 있으며,이를 추적 할 수있는 방법 중 하나입니다.

하지만 앞에서와 같이 상태를 각 창에 연관 시키려면 가장 쉬운 방법은 Windows의 "서브 클래 싱"API를 사용하여 각 창에 포인터를 연결하는 것입니다. 그런 다음 윈도우 프로 시저 호출을 연결된 C++ 객체의 메서드로 라우트 할 수 있습니다. 서로 다른 메시지를 다른 메시지 처리 방법으로 더 라우트 할 수있는 곳에서는 각각 윈도우의 상태에 액세스 할 수 있습니다 (이 C++ 객체 만 있습니다).

+0

팁 주셔서 감사합니다. 모든 공통 컨트롤과 다양한 API가 모두'HWND' 객체를 생성/필요하기 때문에 "단지 하나의 HWND"라고 말할 때 약간 혼란 스럽습니다. 가능하다면 50 개의'HWND' 변수가 엔트리 포인트 앞에 쌓이는 것을 피하려고합니다. – Ben