永发信息网

VC 怎么动态改变控件大小

答案:4  悬赏:40  手机版
解决时间 2021-03-20 02:35
  • 提问者网友:佞臣
  • 2021-03-19 12:55
VC 怎么动态改变控件大小
最佳答案
  • 五星知识达人网友:行路难
  • 2021-03-19 13:22
首先创建一个基于对话框的MFC工程,为了让对话框可以通过拖拽边框自由改变大小,需要设置对话框的属性。
  打开资源视图,在对话框上点右键,选择Properties->Styles->Border,在下拉框中选择Resizing,这样就可以动态改变对话框的大小了。
  有两个函数可以实现这个功能:
(1) MoveWindow():
void MoveWindow(int x,int y,int nWidth,int nHeight);
x, y为控件位置;nWidth、nHeight为控件宽度和高度
(2) SetWindowPos():
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一个参数一般设为NULL;
x、y为控件位置;cx、cy为控件宽度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一个参数;
SWP_NOMOVE:忽略x、y,维持位置不变;
SWP_NOSIZE:忽略cx、cy,维持大小不变;
SWP_SHOWWINDOW:显示窗口
  下面分别介绍如何使用这两个函数:
首先同时按下Ctrl+W,弹出类向导对话框,选择响应WM_SIZE消息。在消息响应函数OnSize()中添加如下代码:
void COnSizeTestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
//创建对话框时,控件还没有创建,因此不能改变其大小(必须加上这两行代码)
if(!IsWindowVisible())
return;

//获取客户区矩形
CRect rect;
GetClientRect(&rect);
//动态改变控件大小
CWnd *pButton = GetDlgItem(IDC_BUTTON1);
pButton->MoveWindow(
rect.right/5, //x轴1/5处
rect.bottom/5, //y轴1/5处
rect.right/5*2, //x轴的2/5宽度
rect.bottom/5*2 //y轴的2/5高度
);
}
  把MoveWindow()函数换成SetWindowPos():
pButton->SetWindowPos(
NULL,
rect.right/5,
rect.bottom/5,
rect.right/5*2,
rect.bottom/5*2,
SWP_NOZORDER|SWP_SHOWWINDOW
);
效果一样。
全部回答
  • 1楼网友:一秋
  • 2021-03-19 16:19
响应WM_SIZE啊
不过通常处理都不是真正的等比例缩放 而是一个方向上 某写控件如Edit宽度在变化
  • 2楼网友:像个废品
  • 2021-03-19 15:45
用MoveWindow函数。SDK的话,得到控件句柄之后,用它调用MoveWindow函数。如果是MFC的话,可用CWnd类的MoveWindow的方法。
  • 3楼网友:鱼忧
  • 2021-03-19 14:38
处理WM_SIZW消息,消息函数是OnSize。

在OnSize里计算控件的Rect,然后MoveWindow。

如:

void CDlg::OnSize(int ntype, int cx, int cy)
{
CDialog::OnSize(..); // 调用基类的

CRect rc;
... // 计算rc

GetDlgItem(IDC_...)->MoveWindow(&rc); // 移动控件
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯