
打开资源视图,在对话框上点右键,选择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,d出类向导对话框,选择响应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
)
效果一样。
设动态添加的tabpage的name为:tabpage_t,则:TabPage tp = (TabPage)tabControl1.Controls.Find("tabpage_t",false)[0]
int w = tp.Height
int h = tp.Width
w,h就是动态添加的tabpage的宽、高。find函数是用名称找控件。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)