MFC项目背景:
由于项目需要支持多分辨率,需要窗口适应大小,发现只要改变COMBOBOX控件大小改变之后
就会不显示下拉选项
解决方法:
需要设置组合框的高度
使用方法:
如果动态创建控件或者控件随窗口的大小改变,最好使用消息CB_SETITEMHEIGHT
该消息定义为
CB_SETITEMHEIGHT
wParam = (WPARAM) index; // item index
lParam = (LPARAM) (int) height; // item height
如果index参数为-1,则设置按钮的高度。如果index参数为0,则修改列表项的高度。
下面的例子是窗口调整大小下拉列表框也调整大小
void CDlg3Dlg::ReSize(void)
{
SIZE Newp; //获取现在对话框的大小
CRect recta;
GetClientRect(&recta); //取客户区大小
Newp.cx= recta.Width();
Newp.cy = recta.Height();
double fxZoom = (double)Newp.cx/(double)old.cx;
double fyZoom = (double)Newp.cy/(double)old.cy;
HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件
while(hwndChild)
{
CRect Rect;
::GetWindowRect(hwndChild, &Rect);
ScreenToClient(&Rect);
Rect.left = (int)(Rect.left * fxZoom + 0.5);
Rect.right = (int)(Rect.right * fxZoom + 0.5);
Rect.top = (int)(Rect.top * fyZoom + 0.5);
Rect.bottom = (int)(Rect.bottom * fyZoom + 0.5);
::MoveWindow(hwndChild, Rect.left, Rect.top, Rect.Width(), Rect.Height(), TRUE);
//修改COMBOBOX 高度
TCHAR szClass[64+1]={0};
if(GetClassName(hwndChild, szClass, 64)
&& _tcsicmp(szClass, _T("COMBOBOX")) == 0) //判断是否是COMBOBOX控件
{
::SendMessage(hwndChild, CB_SETITEMHEIGHT, -1, Rect.Height());
}
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);
}
old=Newp; //SIZE old
}