窗口大小变化后下拉列表框COMBOBOX控件不显示下拉选项

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 
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值