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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-14 14:39   328   0

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 
} 


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP