2017-10-20 14 views
2

내 질문은 Windows MFC 응용 프로그램의 콤보 상자에 관한 것입니다.MFC 응용 프로그램의 콤보 상자

콤보 상자의 드롭 다운 부분에는 비트 맵과 문자열로 구성된 항목이 들어 있습니다.

때때로 문자열이 너무 길어서 CComboBox::SetDroppedWidth() 메서드를 사용하여 콤보 상자의 드롭 다운 부분의 너비를 조정해야합니다.

내 문제는 콤보 상자가 컴퓨터 화면의 오른쪽 가장자리 근처에 있으면 드롭 다운의 오른쪽 부분이 숨겨져 있다는 것입니다 (아래 image_1image_2 참조).

Excel에서처럼 (아래의 image_3 참조) 드롭 다운 목록을 적절히 이동하여 모든 항목을 잘리지 않고 볼 수있게하려는 것입니다.

어떻게 달성 할 수 있습니까?

IMAGE_1 : 드롭 다운의 오른쪽 부분은 right part of the dropdown is NOT hidden

IMAGE_2 숨겨진되지 않습니다 : 컴퓨터 오른쪽 가장자리 근처에 드롭 다운의 오른쪽 부분이 숨겨져 right part of the dropdown is hidden

image_3 : Excel 콤보 상자 Excel combo box

=========================================== ======================

EDIT 1 handles are null

================ ===================================

수정 2

확인. 나는 m_cbXmodelsCComboBoxEx이라는 것을 잊어 버렸습니다. 이것이 핸들이 NULL 인 이유입니다. GetComboBoxCtrl()을 통해 핸들을 얻을 수 있습니다 ...

+3

아래의 "드롭 다운"대신에 아래의 "드롭 다운"을 누르십시오. (https://stackoverflow.com/questions/36307412/forcing-a-combobox-to-dropdown-above-instead-of-below) –

답변

3

핸들 CBN_DROPDOWN을 처리하십시오.

GetComboBoxInfo으로 목록 컨트롤의 핸들을 가져옵니다.

이제 MoveWindow를 사용하여 필요에 따라 창을 조정하십시오.

현재 화면 크기를 얻는 방법은 MonitorFromWindow과 함께 사용 가능합니다. MONITORINFOrcWork 회원을 참조하십시오. 왼쪽 및 오른쪽 좌표를 조정하면됩니다.

편집 : 의견에서 읽을 수있는 것처럼 : CBN_DROPDOWN을 사용한 나의 접근 방식은 zett42 덕분에 조만간 이루어집니다.) 여기서 콤보 상자 목록 부분의 크기를 조정할 수 없습니다.
그러나 동일한 창에 사용자 정의 메시지를 게시하고 창 위치를 변경하는 것이 가능합니다.

+0

감사합니다. GetComboBoxInfo()를 호출하면 목록 컨트롤의 핸들이 NULL임을 알게됩니다 (hwndCombo, hwndItem 및 hwndList가 NULL 임). –

+0

cbSize 멤버를 미리 설정해야합니다! – xMRi

+0

새로운 문제 : 드롭 다운 목록이 이동하지 않습니다. 코드는 다음과 같습니다. HWND hwndList = info.hwndList; :: MoveWindow (hwndList, 40, 40, 100, 100, 1); –