怎样使控件的大小随窗体的改变而改变,就是控件的停靠

Loken 2005-02-26 10:40:09
同上
...全文
159 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwanany 2010-06-05
  • 打赏
  • 举报
回复
刚刚找到一种方法 很强大

public Form1()
{
InitializeComponent();
int count = this.Controls.Count * 2+2;
float[] factor = new float[count];
int i = 0;
factor[i++] = Size.Width;
factor[i++] = Size.Height;
foreach(Control ctrl in this.Controls)
{
factor[i++] = ctrl.Location.X / (float)Size.Width;
factor[i++] = ctrl.Location.Y / (float)Size.Height;
ctrl.Tag = ctrl.Size;
}
Tag = factor;
}

private void Form1_Resize(object sender, EventArgs e)
{
float[] scale = (float[])Tag;
int i = 2;

foreach (Control ctrl in this.Controls)
{
ctrl.Left = (int)(Size.Width * scale[i++]);
ctrl.Top = (int)(Size.Height * scale[i++]);
ctrl.Width = (int)(Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);
ctrl.Height = (int)(Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);

//每次使用的都是最初始的控件大小,保证准确无误。
}
}

wwanany 2010-06-05
  • 打赏
  • 举报
回复
期待正确的答案。。。。。
fanqing 2005-02-26
  • 打赏
  • 举报
回复
OnSize用MoveWindow改变控件的大小
Kudeet 2005-02-26
  • 打赏
  • 举报
回复
在WM_SIZE消息里用MoveWindow/SetWindowPos改变控件的大小,如果直接这么用可能会发生闪烁现象,你最好设置一个度,窗口改变的大小超过了这个度再改控件大小
Onega 2005-02-26
  • 打赏
  • 举报
回复
不需要自己实现,
用这个库就好了
http://sourceforge.net/projects/resizablelib/
ericbu 2005-02-26
  • 打赏
  • 举报
回复
在WM_SIZE中调用MoveWindow函数,参数与窗口大小相关就行了吧!
WM_SIZE :
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
cyChar = HIWORD (GetDialogBaseUnits ()) ;
MoveWindow (hwndScroll,
2 * cyChar, (2 * cyClient / 14,
cxClient - 4 * cyChar, cyClient / 14, TRUE) ;

superhandsome 2005-02-26
  • 打赏
  • 举报
回复
这个问题也困饶小弟很久了,,一直没很好的解决。。。
GZ,,
最好能给段代码,,就在WM_SIZE里面处理,,不要用别的类。,让所有的都了解一下。。
等待大虾~~~~^_^

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧