2011-02-18 3 views
1

안녕하세요 누구든지이 기능이 무엇을하고 있는지 설명 할 수 있습니다. 현재 프로그래밍 책을 읽고이 기능을 수행하기 위해 고심하고 있습니다.C++ 대화 상자의 혼동 기능

함수를 수집 할 수있는 창 (이 경우 대화 상자)의 핸들을 가져 와서 정보는 두 번째 매개 변수에 전달되고 세 번째 매개 변수는 실제 개체에 대한 포인터가 전달됩니다.

일부 컨텍스트를 제공하기 위해 컴퓨터에있는 어댑터가있는 콤보 상자를 채우려고합니다.

for (UINT a=0; a<m_dwNumAdapters; a++) 
{ 
    AddItem(m_hADAPTER, m_xAdapterInfo[a].d3dAdapterIdentifier.Description, 
      &m_xAdapterInfo[a]); 
} 

감사 : 여기

void AddItem(HWND hWnd, char *ch, void *pData) 
{ 
    WPARAM nI = (WPARAM)((int)(DWORD)SendMessage(hWnd,CB_ADDSTRING,0,(LPARAM)ch)); 

    SendMessage(hWnd,CB_SETITEMDATA, nI, (LPARAM)pData); 
} 

는 예를 호출합니다.

답변

1

콤보 상자에 항목을 추가하기 위해 이전과 같이 사용 했으므로 도움이 될 수 있습니다. HWND 대화로 처리 할 것입니다

SendDlgItemMessage(hwnd, IDC_COMBOSTATUS, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) "Available"); 

는 IDC_COMBOSTATUS 자원 ID이며, 다른 하나는 거의 분명하다.

SendMessage 대신 SendDlgItemMessage 함수를 사용해보십시오.

감사합니다,

바즈

+0

아마도 현재 사용중인 것보다 더 유용 할 것입니다. – nhunston

+0

그것도 'CB_SETITEMDATA' 메시지를 보내는 Herly 함수와 완전히 똑같지는 않습니다. –

+0

@David 네, 맞습니다,하지만 방금 SendMessage 함수를 대체하는 부분을 썼습니다. 다른 부분은 모두 동일해야합니다. – Vajda

1

그것은 콤보 상자에 문자열 값과 관련된 정수를 추가합니다.

누락 된 부분은 목록 상자, 콤보 등이 텍스트 레이블 목록과 평행 한 목록에 정수 값 (포인터와 동일한 크기)을 저장한다는 것입니다. 정수 값에 원하는 것을 넣을 수 있습니다. 예를 들어 추가 정보가 들어있는 struct에 대한 포인터를 넣을 수 있습니다.

사용자 선택에 응답해야하는 경우 선택한 정수 값을 읽고 포인터로 전송 한 다음 해당 정보로 작업을 수행하기 만하면됩니다.

물론 많은 목록과 콤보에는이 중 아무 것도 필요하지 않습니다 (간단한 문자열로 충분합니다). 따라서 0이 일반적으로 전달됩니다.

+0

배열의 위치를 ​​통과 한 이유가 무엇인지 매개 변수 중 하나가 무엇을하는지 설명하는 데 도움이되어 주셔서 감사합니다. – nhunston