2013-09-30 2 views
2

이것은 기본적으로 질문 here의 확장입니다.MFC 리소스 ID 고유성

resource.h 파일이 수동으로 편집되어 지저분 해 보이는 오래된 MFC 응용 프로그램에서 작업하고 있습니다. 거기에 충돌하는 ID가 있음을 알았습니다.

다른 유형의 동일한 ID로 두 개의 자원을 가질 수 있는지 확인하고 싶습니다. 예를 들어 , 나는

IDD_1  101 
IDS_2  101 

또는

IDR_1  102 
IDS_2  102 

기본적으로 동일한 ID로 정의 된 리소스가 같은 것을 가지고 있지만, 다른 유형의.

원래 질문에 대한 답변은 Resources of the same type don't share identifiers입니다. 맞으면 IDR_xxxx ID에도 유효합니까?

모든 ID가 고유해야한다고 생각하는 것으로 보이는 Resource ID Organiser을 사용하고 있기 때문에 문의하고 있습니다.

답변

2

권장되지는 않지만 다른 유형에서도 정상적으로 작동합니다. API FindResource은 ID 및 유형을 사용하여 자원을 식별합니다. MFC가 리소스 ID를 사용하여 다른 리소스를 참조하는 방식을 중심으로 충돌 가능성이 큰 문제가 발생합니다. 툴바 버튼의 도움말 텍스트. 이런 종류의 버그는 매우 시간이 많이 걸릴 수 있으므로 지금 총알을 물고 다시 번호를 매기려고 리소스 ID를 고유하게 만들 수 있습니다.

0

코드가 컨트롤을 사용하는 방법에 따라 다릅니다. 예를 들어, 컨트롤이 중복 ID가있는 버튼이면 사용하는 데 문제가 없습니다. 반면에 컨트롤이 메뉴의 항목이면 사용자가 관련 이벤트를 클릭하면 사용 가능한 첫 번째 ID를 찾습니다. 중복 ID를 다시 정렬하는 것이 더 좋습니다.

0

리소스 리 넘버링 도구가 필요한 것 같습니다. https://sourceforge.net/projects/resrenum/

도움말 파일에서 : 여기에 무료 & 오픈 소스 하나입니다 는 "ResRenum 비주얼 스튜디오 C++ 프로젝트에 자원 ID를 매 깁니다 그것은 콘솔 응용 프로그램, 그리고 외부 도구로 IDE에 통합하기위한 것입니다.. MFC 6.0 이상 버전의 Visual Studio와 호환됩니다 ... 리소스는 각 리소스 유형 내에서 사전 순으로 정렬되며 리소스 유형은 Windows 규칙에 따라 정렬됩니다. "

이 방법은 리소스 ID가 Microsoft 규칙 (예 : 대화 ID는 IDD_ 등으로 시작해야합니다. TN020 ID 이름 지정 및 번호 매기기 규칙을 참조하십시오. https://msdn.microsoft.com/en-us/library/t2zechd4.aspx