win32 listbox 예제

보내는 메시지는 각 컨트롤마다 매우 다양하며 각 컨트롤에는 고유한 메시지 집합이 있습니다. 가끔은 동일한 메시지가 둘 이상의 컨트롤에 사용되지만 일반적으로 는 의도한 컨트롤에서만 작동합니다. 이것은 목록 상자와 콤보 박스 메시지 (LB_* 및 CB_*)와 함께 특히 성가신 그들은 거의 동일한 작업을 수행 하지만, 교환 할 수 없습니다, 그리고 내가 실수로 내가 인정 하 고 싶은 것 보다 더 혼합 얻을:) 다음 C++ 코드 예제에서는 플레이어에 대한 정보가 구조의 배열에 저장됩니다. 초기화하는 동안 대화 상자 프로시저는 LB_ADDSTRING 메시지를 사용하여 팀 멤버의 이름을 목록 상자(IDC_LISTBOX_EXAMPLE)에 한 번에 하나씩 추가합니다. 또한 LB_SETITEMDATA 메시지를 사용하여 목록 상자에 플레이어의 배열 인덱스를 항목 데이터로 추가합니다. 나중에 사용자가 목록 상자에서 플레이어를 선택하면 대화 상자 프로시저가 LB_GETITEMDATA 메시지를 사용하여 해당 배열 인덱스를 검색합니다. 그런 다음 배열 인덱스를 사용하여 배열에서 플레이어 정보를 검색합니다. 목록 상자로 가장 먼저 해야 할 일은 항목을 추가하는 것입니다. 다음은 이 예제의 편집 컨트롤과 인터페이스하는 데 사용되는 코드입니다. 이렇게하려면 listbox가 우리에게 전달하는 알림 메시지를 처리해야합니다.

이 경우 사용자가 선택 항목을 수정했다는 LBN_SELCHANGE에 관심이 있습니다. LBN_SELCHANGE는 WM_COMMAND를 통해 전송되지만 일반적으로 클릭에 대한 응답으로만 WM_COMMAND를 처리하는 것과 달리 목록 상자는 여러 가지 이유로 WM_COMMAND를 전송하며, WM_COMMAND를 통해 알려줄 수 있습니다. 알림 코드는 wParam의 HIWORD로 전달되며, 매개 변수의 나머지 절반은 처음에 컨트롤 ID를 제공했습니다. 데이터가 다른 유형의 값(32비트인 모든 값)인 경우 적절한 유형으로 캐스팅하기만 하면 됩니다. 예를 들어 ints 대신 HBITMAPs를 저장한 경우… 예제 코드에서는 목록 상자에서 선택한 항목의 데이터를 표시하기 위해 하나를 사용하며 하나만 선택된 다고 가정합니다. 이 예제에서 buf[0]는 첫 번째 인덱스이며, buf[count – 1]까지입니다. 목록 상자의 전체 목적은 사용자가 목록에서 항목을 선택할 수 있도록 하는 것입니다. 예를 들어 제거 버튼과 같은 작업을 수행할 때는 사용자가 단추를 활성화할 때 선택 사항이 바로 변경될 때 알 필요가 없는 경우도 있습니다.

이 예제에서는 탭 컨트롤 1개, 편집 컨트롤 1개, 단추 3개를 사용합니다. 탭 컨트롤에서 탭을 동적으로 만들고 삭제합니다. 이 항목의 C++ 코드 예제에는 스포츠 팀의 플레이어에 대한 정보가 포함된 목록 상자를 채우는 대화 상자 절차가 포함되어 있습니다. 사용자가 목록에서 플레이어 이름을 선택하면 플레이어에 대한 정보가 대화 상자에 표시됩니다. 목록 상자의 창 스타일에는 LBS_SORT가 포함되며, 이로 인해 정렬된 항목 목록이 생성됩니다. 다음 스크린샷에는 대화 상자가 표시됩니다. 이 예제에서는 다중 선택 목록 상자를 사용했기 때문에 선택한 항목 목록을 가져오는 것이 조금 까다롭습니다. 단일 선택 목록 상자인 경우 LB_GETCURSEL을 보내 항목 인덱스를 검색할 수 있습니다. 나는 이미 이전 예제에서 단추를 사용했기 때문에 이미 그 단추에 대해 더 잘 알고 있어야하지만이 예제에서 단추를 사용했기 때문에 완료를 위해 제목에 추가 할 수도 있다고 생각했습니다. 이 항목에서는 간단한 목록 상자에서 항목을 초기화하고 검색하는 방법을 보여 줍니다. 이 메시지는 어느 쪽이든 새 항목의 인덱스를 반환하며 이 메시지를 사용하여 일부 데이터를 항목과 연결하는 등의 다른 작업을 수행할 수 있습니다.