最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

VC控件随窗口大小变化而变化的方法

来源:动视网 责编:小OO 时间:2025-10-01 19:42:38
文档

VC控件随窗口大小变化而变化的方法

注意:IDR_MENU1是菜单ID,ID_CONTROL_MUTE是需要被打勾的子菜单,加粗部分为核心部分一在对话框头文件中 POINTOld;//存放对话框的宽和高。在方法OnInitDialog中加入//计录宽和高。 CRectrect;   GetClientRect(&rect);    //取客户区大小 Old.x=rect.right-rect.left; Old.y=rect.bottom-rect.top;二添加WM_SIZE消息: if(nType==SIZE_RESTORE
推荐度:
导读注意:IDR_MENU1是菜单ID,ID_CONTROL_MUTE是需要被打勾的子菜单,加粗部分为核心部分一在对话框头文件中 POINTOld;//存放对话框的宽和高。在方法OnInitDialog中加入//计录宽和高。 CRectrect;   GetClientRect(&rect);    //取客户区大小 Old.x=rect.right-rect.left; Old.y=rect.bottom-rect.top;二添加WM_SIZE消息: if(nType==SIZE_RESTORE
注意:

IDR_MENU1是菜单ID,ID_CONTROL_MUTE是需要被打勾的子菜单, 加粗部分为核心部分

一 在对话框头文件中  POINT Old;//存放对话框的宽和高。

在方法 OnInitDialog 中加入 //计录宽和高。

 CRect rect;  

 GetClientRect(&rect);     //取客户区大小

 Old.x=rect.right-rect.left;

 Old.y=rect.bottom-rect.top;

二 添加 WM_SIZE消息:

 if(nType==SIZE_RESTORED || nType==SIZE_MAXIMIZED) //窗体大小发生变动。处理函数resize

 {

     resize();

 }

三 添加reseze函数

void CDialogDlg::resize()

{

 float fsp[2]; //用于分别记录窗口发生变化的长宽新旧比

 POINT Newp; //获取现在对话框的大小

 CRect recta;  

 GetClientRect(&recta);     //取客户区大小

 Newp.x=recta.right-recta.left;

 Newp.y=recta.bottom-recta.top;

 fsp[0]=(float)Newp.x/Old.x;  //计算长度的新旧比

 fsp[1]=(float)Newp.y/Old.y;  //计算高度的新旧比

 CRect Rect;

 int woc;

 CPoint OldTLPoint,TLPoint; //左上角

 CPoint OldBRPoint,BRPoint; //右下角

 HWND  hwndChild=::GetWindow(m_hWnd,GW_CHILD);  //取得第一个控件的句柄,用于遍历所有控件

 while(hwndChild)  

 {  

  woc=::GetDlgCtrlID(hwndChild);//取得ID

  GetDlgItem(woc)->GetWindowRect(Rect); //获得相对于屏幕左上角的坐标

  ScreenToClient(Rect); //将屏幕坐标转换成相对客户窗口左上角的坐标

  OldTLPoint = Rect.TopLeft(); 

  TLPoint.x = long(OldTLPoint.x*fsp[0]); //用比例得出左上角的x坐标

  TLPoint.y = long(OldTLPoint.y*fsp[1]); //用比例得出左上角的y坐标

  OldBRPoint = Rect.BottomRight();

  BRPoint.x = long(OldBRPoint.x *fsp[0]); //用比例得出右下角的x坐标

  BRPoint.y = long(OldBRPoint.y *fsp[1]); //用比例得出右下角的y坐标

  Rect.SetRect(TLPoint,BRPoint); //设置最新的Rect

  GetDlgItem(woc)->MoveWindow(Rect,TRUE);

  hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);  //获得下一个控件的句柄

 }

 Old=Newp;

}

文档

VC控件随窗口大小变化而变化的方法

注意:IDR_MENU1是菜单ID,ID_CONTROL_MUTE是需要被打勾的子菜单,加粗部分为核心部分一在对话框头文件中 POINTOld;//存放对话框的宽和高。在方法OnInitDialog中加入//计录宽和高。 CRectrect;   GetClientRect(&rect);    //取客户区大小 Old.x=rect.right-rect.left; Old.y=rect.bottom-rect.top;二添加WM_SIZE消息: if(nType==SIZE_RESTORE
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top