控件大小随窗体大小变化

MFC中当我们添加了很多控件后,布局就是一个很难控制的方面,当程序运行在不能的PC上就会有不一样的布局,如何解决呢方法很多,我第一次是自己算出控件的位置,然后按照比例缩放,但是方法很麻烦,还不易控制,后来一个同事用如下代码很容易实现,非常不错分享给大家:

1. *.h 添加消息

[cpp] view plain copy print?

  1. public:
  2. afx_msg void OnSize(UINT nType, int cx, int cy);
  3. void ReSize(void);
  4. POINT old;

2.

[cpp] view plain copy print?

  1. BOOL CWVKeyAutoWRDlg::OnInitDialog()
  2. {
  3. CDialogEx::OnInitDialog();
  4. //此处代码
  5. CRect rect;
  6. GetClientRect(&rect);     //取客户区大小
  7. old.x=rect.right-rect.left;
  8. old.y=rect.bottom-rect.top;
  9. int cx = GetSystemMetrics(SM_CXFULLSCREEN);
  10. int cy = GetSystemMetrics(SM_CYFULLSCREEN);
  11. CRect rt;
  12. SystemParametersInfo(SPI_GETWORKAREA,0,&rt,0);
  13. cy = rt.bottom;
  14. MoveWindow(0, 0, cx, cy);
  15. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  16. }

3.

[cpp] view plain copy print?

  1. void CWVKeyAutoWRDlg::ReSize(void)
  2. {
  3. float fsp[2];
  4. POINT Newp; //获取现在对话框的大小
  5. CRect recta;
  6. GetClientRect(&recta);     //取客户区大小
  7. Newp.x=recta.right-recta.left;
  8. Newp.y=recta.bottom-recta.top;
  9. fsp[0]=(float)Newp.x/old.x;
  10. fsp[1]=(float)Newp.y/old.y;
  11. CRect Rect;
  12. int woc;
  13. CPoint OldTLPoint,TLPoint; //左上角
  14. CPoint OldBRPoint,BRPoint; //右下角
  15. HWND  hwndChild=::GetWindow(m_hWnd,GW_CHILD);  //列出所有控件
  16. while(hwndChild)
  17. {
  18. woc=::GetDlgCtrlID(hwndChild);//取得ID
  19. GetDlgItem(woc)->GetWindowRect(Rect);
  20. ScreenToClient(Rect);
  21. OldTLPoint = Rect.TopLeft();
  22. TLPoint.x = long(OldTLPoint.x*fsp[0]);
  23. TLPoint.y = long(OldTLPoint.y*fsp[1]);
  24. OldBRPoint = Rect.BottomRight();
  25. BRPoint.x = long(OldBRPoint.x *fsp[0]);
  26. BRPoint.y = long(OldBRPoint.y *fsp[1]);
  27. Rect.SetRect(TLPoint,BRPoint);
  28. GetDlgItem(woc)->MoveWindow(Rect,TRUE);
  29. hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);
  30. }
  31. old=Newp;
  32. }
时间: 2024-08-08 05:22:45

控件大小随窗体大小变化的相关文章

[改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题

问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修改如下: procedure TCustomChromiumFMX.Resize; var brws: ICefBrowser; b: TBitmap; begin inherited; if not (csDesigning in ComponentState) then begin brws :

WPF随笔之 控件根据设定的显示行数列数填充控件并自适应窗体大小(多绑定MVVM方式实现)

(效果图,如见最下面) 需求:根据设置的行数列数,控制展示控件个数,并且填充的控件们大小刚刚好自适应填充满固定的区域,并且调整窗体大小的时候控件动态自适应窗体大小,即自适应大小并不显示滚动条(比如,设置了1行1列,则第一页显示一个控件,如设置了2行2列,则第一页显示第一行2个控件,第二行2个控件). 解决方案,我总结有3 1.在cs代码里面动态生成Grid控件,根据设定的行列动态生成行列,将控件自适应宽高填充进去 2.固定Grid.使用WrapPanel排序,当Grid实际宽高发生改变时,动态计

winform中,如何控制控件位置随窗体的大小改变而改变

winform中,如何控制控件位置随窗体的大小改变而改变 有如下3种方法: 方法1 [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MarkPrint

C#实现窗体拖动时各个控件同比自动放缩大小

实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录, 然后根据窗体改变的大小同时放缩. 简要步骤如下: 1 创建C#窗体程序项目. 2  Panel放置到窗体. 3  设置属性dock为fill. 4  注意MinnumSize不能设置为0, 改成大于0都行. public partial class FrmDemo : Form { double dFrmWidth; double dFrmHeight; double dZoomHorizon; doubl

android 控制控件的位置和大小

方法一: Android的界面布局可以用两种方法,一种是在xml中布局,一种是和JAVA中Swing一样在JAVA代码中实现Ui界面的布局,用xml的布局管理器布局是很方便的,但是在一些代码中需要动态的显示界面,这个时候xml就缺少了一种灵活性,使用XML和JAVA代码中布局可以解决这样的问题.在此只对JAVA代码中的LoyoutParams方法进行理解及使用. LoyoutParams类中主要保存的是布局参数,元素或组件可以通过这个类实现对布局参数的设置.在xml中它对应的是元素的"空间位置&

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体,在无边框窗体及其友好的实现拖拽移动窗体 http://www.cnblogs.com/vonly/ only原创首发,vonly.net 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Configuration; 5 using System.Diagnostics; 6 using Sys

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage();          //  sAllPage.FormBorderStyle = FormBorderStyle.None;           // sAllPage.Dock = DockStyle.Fill;            sAllPage.TopLevel = false;            this.MainPanel.Controls.

C:\\MFC控件大小随窗体大小而改变

一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意if(nType==1) return;这一句必须添加,否则最小化恢复的时候会出错. [cpp]?view plaincopy void?CPaperManagementDlg::OnSize(UINT?nType,?int?cx,?int?cy)??? {?? ????CDialog::OnSiz

wpf 控件大小随窗体大小改变而改变

WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等比例的缩放显示到ViewBox的客户区 例: Button btn = new Button(); btn.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; btn.Ve