하십시오 슬라이더 구성된 컨트롤의 삼중, 숫자 편집 상자를 해당 숫자 입력란에 대해 회 전자입니다.MFC 슬라이더 + 편집 + 스피너 내가보고 "손잡이"행동과 유사의 무리가 외부 장치 제어 내 대화 상자 기반 UI에서 패턴
값이 변경되면 해당 외부 장치로 왕복하므로 자연스럽게 "변경"당 한 번 긴 API를 호출하려고합니다. 변경 사항은 3 개의 컨트롤 중 하나에서 가져올 수 있으며 분명히 동기화되어야합니다. 실제로 편집 상자가 변경되면 슬라이더의 위치를 변경해야한다는 것을 의미합니다. 그리고 그 반대도 마찬가지입니다.
API 호출은 값 변경이 UI 프레임 워크에 의해보고 될 때마다 호출되는 별도의 함수로 구현됩니다.
문제 : 컨트롤 외모의 (a bool m_processingUserInput;
처럼) 재귀 가드를 소개 서로
- 은 "에서 동기화"패러다임의 솔직 순진 구현은 자연스럽게 재귀 호출을 발생 그리고 솔직히, 꽤 못생긴 느낌이 들다.
- 더 많은 컨트롤이 추가 될 때 한 가지 유형의 컨트롤에서만 API 호출을하고 다른 유형에서는 (예 : 슬라이더에서만) API 오류를 발생시키는 경향이있다. 게다가이 방법을 사용하면 코드가 복잡해질뿐만 아니라 (자체적으로) 재귀 문제도 해결되지 않습니다.
내 질문은 여기 있습니다. 사람들이이 UI를 코딩하는 데 사용하는 잘 정립 된 패턴이 없습니다. 상호 작용? 이것을 우아하고 효율적으로하는 방법을 알려주십시오.
이되지 않습니다 : 당신은 기본적으로 Model-View-Controller 패턴의 구현 인 MFC에 내장 된 문서보기 아키텍처, 윈도우 API의 상단에이를 구축하거나 사용할 수 있습니다 프로그래밍 방식으로 변경 될 때 언급 한 컨트롤 중 어느 것도 "변경된"알림을 보내지 않으므로 재귀가 발생합니다. 알림은 * 사용자 * 수정에 대한 것입니다. – zett42
'SetDlgItemInt (ID, val)'가 "변경시"처리기를 확실히 트리거합니다. – YePhIcK
좋습니다. 그것은 필자 자신을 테스트하는 대신 MS 문서를 그대로 읽음으로써 나온다. 재귀 경비원은 그렇게 나쁘지 않습니다. 예외 핸들러와 정적 변수를 생성자에서'true'로 설정하고 예외 안전성과 사용 용이성을 위해 소멸자에서'false'로 설정하는 RAII 클래스의 로컬 변수를 사용하여이 작업을 수행 할 수 있습니다. – zett42