C++ MFC ComboBox 사이즈 조절 개발


콤보박스의 리스트 크기를 리소스 디자이너에서 조절하는 법은 간단하게 콤보박스의 아래 화살표를
클릭하여 표시 영역을 드래그로 조절해주면 된다.

하지만 OnSize나 기타 초기화 단계에서 콤보박스의 크기를 변경할 경우 해당 사항이 무효화돼서
리스트가 단 한줄만 표시되는 슬픈 상황이 오게 되는데, 이럴 경우 코드상에서 콤보박스 리스트의 크기를
조절하는 방법이 있다.


1) Designer - through the designer by default you can just resize the ComboBox width. If you want to resize the Drop Down List height you need to click on the dropdown arrow on the right, then you'll be able to resize the dropped control height. This seems so easy but if no-one tells you it's anything but intuitive. If you just need to statically fix height this'll save you a lot of bitchin'.

2) Programmatically - use the following function to programmatically resize you dropped control height. The function takes as input the number of items you want to display, but if you wanna modify it to take pixels or whatever as parameter it shouldn't be too hard (unless you're brain damaged as Scuffia is).

void SetDropDownHeight(CComboBox* pMyComboBox, int itemsToShow){  
  //Get rectangles
CRect rctComboBox, rctDropDown;
  //Combo rect  
pMyComboBox->GetClientRect(&rctComboBox);
  //DropDownList rect  
pMyComboBox->GetDroppedControlRect(&rctDropDown); //Get Item height int itemHeight = pMyComboBox->GetItemHeight(-1);
  //Converts coordinates  
pMyComboBox->GetParent()->ScreenToClient(&rctDropDown);
  //Set height  
rctDropDown.bottom = rctDropDown.top + rctComboBox.Height() + itemHeight*itemsToShow;
  //apply changes  
pMyComboBox->MoveWindow(&rctDropDown);
}