2012-08-31 1 views
1

받는 std :: string 값에 따라 특정 작업을 수행하는 함수가 있습니다.MFC 메시지 맵 함수에 값을 전달하는 방법 on_command

예 :

무효 performTaskOnStringValue (표준 : : 문자열);

이제 버튼 클릭시 해당 텍스트를 값으로 전달하여이 함수를 호출해야하는 리본 버튼 집합 (CMFCRibbonButton)이 있습니다.

이 버튼의 id를 버튼 id가있는 on_command라는 메시지 맵 매크로에 매핑했습니다. 예 - - 모든 버튼은 하나 개의 공통 ID를 공유

ID_RIBBON_BUTTON_ID

ON_COMMAND (ID_RIBBON_BUTTON_ID, & MyClass에 :: performTaskOnStringValue)를 다음과 같이 메시지 맵입니다;

ButtonClick의이 함수에 매개 변수로 버튼 텍스트를 전달하려면 어떻게해야합니까?

답변

5

버튼이 모두 동일한 ID를 가지고있을 때 버튼을 다른 조작으로 만들 수 없습니다. 명령 핸들러는 어떤 버튼이 눌 렸는지 표시하지 않습니다.

버튼에 연속적인 ID를 할당 할 수 있으면 대신 ON_COMMAND_RANGE를 사용할 수 있습니다. 그러면 GetDlgItemText에 전달하여 버튼에서 텍스트를 가져올 수있는 버튼의 ID가 전달됩니다.

+0

버튼을 추가하는 것이 즉석에서 이루어지기 때문에 내가 만드는 데 필요한 버튼의 수를 손에서 미리 알지 못합니다. 내가 알아야 할 이유는 ID를 ON_COMMAND_RANGE와 연결하고 리소스 파일에 삽입하여 올바른 ID로 인식되도록하는 것입니다. –

+0

@EternalLearner, 즉석에서 버튼을 만들면 리소스 파일에 버튼을 넣을 필요가 없습니다. 사용 가능한 최소 및 최대 값을 정의하고 현재 버튼을 추적하고 새 버튼을 만들 때마다 증가시킵니다. –

+0

내가 추가 한 요소가 CMFCRibbonButton 유형 이었기 때문에 모든 것이 GetDlgItemText를 제외하고 작동했습니다. 필자는 FindByID (uint ID) 메서드를 사용했습니다. 감사. –

2

먼저 각 버튼에 인접한 범위의 다른 ID를 지정하십시오.

두 번째로 ON_COMMAND_RANGE을 사용하여 id를 매개 변수로받는 하나의 핸들러에 모든 버튼을 매핑합니다.

셋째, 해당 처리기에서 id를 사용하여 단추 텍스트를 가져옵니다. 그런 다음 performTaskOnStringValue 메소드를 호출 할 수 있습니다.

관련 문제