MFC combox动态调整下拉框大小

1、静态,点击Combox右侧小三角,下拉,确定下拉框长度。

2、动态,添加变量 CRect m_rect;

初始化函数中 添加:GetClientRect(&m_rect);  //获取对话框的大小

void CCommDlg::ChangeSize(UINT nID, int x, int y)  //nID为控件ID,x,y分别为对话框的当前长和宽
{
       CWnd *pWnd;
       pWnd=GetDlgItem(nID); 


	   if(pWnd!=NULL)     //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空 
	   {
		 if(nID == 1007|nID == 1008|nID == 1009|nID == 1010|nID == 1011)//Combox对应ID
		 {
			CRect rec; 
			pWnd->GetWindowRect(&rec);  //获取控件变化前的大小
			ScreenToClient(&rec);   //将控件大小装换位在对话框中的区域坐标
			rec.left=rec.left*x/m_rect.Width();  //按照比例调整空间的新位置
			rec.top=rec.top*y/m_rect.Height();
			rec.bottom=rec.bottom*y/m_rect.Height()+150;
			rec.right=rec.right*x/m_rect.Width();
			pWnd->MoveWindow(rec);   //伸缩控件
		  }
		 else
		 {
			CRect rec; 
			pWnd->GetWindowRect(&rec);  //获取控件变化前的大小
			ScreenToClient(&rec);   //将控件大小装换位在对话框中的区域坐标
			rec.left=rec.left*x/m_rect.Width();  //按照比例调整空间的新位置
			rec.top=rec.top*y/m_rect.Height();
			rec.bottom=rec.bottom*y/m_rect.Height();
			rec.right=rec.right*x/m_rect.Width();
		   pWnd->MoveWindow(rec);   //伸缩控件
		  }
	   }
}

void CCommDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	if(nType!=SIZE_MINIMIZED )  //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
          {
                  ChangeSize(IDC_BUTTON1,cx,cy); 
                 
                  ChangeSize(IDC_COMBO1,cx,cy); 
                  ChangeSize(IDC_COMBO2,cx,cy); 
<span style="white-space:pre">		</span>  GetClientRect(&m_rect);   //最后要更新对话框的大小,当做下一次变化的旧坐标;}<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<span style="white-space:pre">	</span>  }
}


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值