2014-10-24 6 views
1

MFC에서 콤보 상자로 미리 설정된 드롭 다운 설정이 있습니다. 코드는 0에서 15 사이의 값을 필요로하지만,이 값은 실제로 시간을 나타냅니다. 거기 콤보 상자의 표시 시간 (문자열) 표시하지만 여전히 자리에 대한 정수 값을 반환하는 방법이 있나요?Visual Studio MFC에서 콤보 상자에 텍스트를 넣을 수 있지만 코드에서 int를 가져올 수 있습니까?

문자열 값의 드롭 다운을 만든 다음 switch 문을 사용하여 반환 된 문자열 값을 기반으로하는 int 값을 선택할 수 있지만 이미 내장되어있는 것처럼 보입니다.

저는 MFC에 처음 접했고, 대부분 방해가되었습니다. 그래서 확실한 해결책을 찾지 못했을 것입니다.

답변

4

SetItemData을 사용하여 콤보 상자의 모든 항목에 부호없는 정수 값을 설정할 수 있습니다.

switch 문은 문자열에서 작동하지 않으므로 switch 문이 작동하지 않습니다. 그래도 std::map 또는 std::unordered_map을 사용할 수 있습니다.

+0

내가 다른 모음으로 MFC 수집을 혼합하지 것이다 ... 나는 다른 컬렉션과 MFC 컬렉션을 혼합 제안 flaviu2 마크의 응답 soesn't @ CMAP 대신에 표준 : :지도 ... – flaviu2

+0

를 사용하는 것이 좋습니다. CCoboBox는 컬렉션이 아니라 WIN32 콤보 상자의 래퍼입니다. 따라서 CMap 또는 std :: map을 사용하면 여기 metter되지 않습니다. –

+0

이렇게하면 효과가 있었지만, 테스트하는 동안 나는 다른 방법을 찾은 것 같습니다. (나는 이전에 시도하지 않은 바보입니다.) CComboBox에서 int를 호출하는 코드를 남겨 뒀지만 리소스 뷰의 대화 상자로 가서 상자의 속성을 편집하여 표시된 값을 나열했습니다. 이렇게하면 원하는 값이 표시되지만 호출 될 때 정수가 출력됩니다. 편도가 좋든 나쁘 든 확실하지는 않지만 두 번째 방법을 찾았다 고 말할 수 있습니다. –

0
You need to convert the integer to string and then put in the combo box . 

Put the following code in the OnInitDialog function 



CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO); 
CWnd* pComboEdit = pCombo->GetWindow(GW_CHILD); 
if (pComboEdit != NULL) 
    pComboEdit->ModifyStyle(0, ES_NUMBER); 
((CEdit*)pComboEdit)->LimitText(2); 

CString str; 
for (int i = 0; i <= 12; i++) 
{ 
    str.Format(L"%d", i); 
    pCombo->AddString(str); 
}