如何让FormView上的控件在FormView大小改变时,根据对话框原有的相对位置,调整控件大小?

时间:2023-02-12 03:48:02
如题,我看到以前的帖子都是说重载OnSize,需要自己一个一个控件去修改具体位置,有没有
简单的方法,让控件根据原始的相对位置进行调整。
那位大侠写过这样的程序?还可以加分

8 个解决方案

#1


以前有人提过相同的问题,OnSize中,一个个改变的确很麻烦,有过解答,好像是从codeproject下载一个类吧,你再搜搜看.

#2


你需要在文档或者其他地方储存下每个控件的位置、长、宽(建议使用CObList储存),
然后在FormVIew大小改变时,依据这些信息改变每个控件的大小和位置。

#3


to xindao_wang(小日本都是猪) :
codeproject老是上不去,你有吗?能不能发给我

#4


http://search.csdn.net/Expert/topic/2549/2549129.xml?temp=.6776697

#5


响应WM_SIZE消息,一个例子:
void COracleAssistView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

CRect rect;
GetClientRect(&rect);

int nWidth = rect.Width();
int nLeight = rect.Height();


if(m_edit.GetSafeHwnd())
{

m_edit.SetWindowPos(this,rect.left + nWidth/100,rect.top +nLeight/100,nWidth-nWidth/100*2,nLeight/100*45,SWP_SHOWWINDOW|SWP_NOZORDER);
}

if(m_btnExec.GetSafeHwnd())
{
m_btnExec.SetWindowPos(this,rect.left + nWidth/100*40,
rect.top + nLeight/100*47,nWidth/15,nLeight/100*5 ,SWP_SHOWWINDOW|SWP_NOZORDER);

}

if(m_ctrList.GetSafeHwnd()) //m_ctrlList是listctrl的变量
{

 m_ctrList.SetWindowPos(this,rect.left + nWidth/100,
rect.top + nLeight/100*58,nWidth-nWidth/100*2,nLeight/100*52,SWP_SHOWWINDOW|SWP_NOZORDER);

}

}

#6


http://www.vcshare.net/bbs/ShowPost.asp?id=1137

#7


自己搞定了,参考一个可以自动调整对话框上控件位置的类CResiableDialog,
修改了一个CResiableFormView类,只需要把重载CFormView改为CResiableFormView,
然后在OnInitialUpdate中设置控件的调整位置的基准点
AddAnchor(IDC_BUTTON1,TOP_LEFT,BOTTOM_RIGHT);
AddAnchor(IDC_STATIC_TEXT,TOP_LEFT,BOTTOM_RIGHT);
就可以自动调整控件位置

#8


mark

#1


以前有人提过相同的问题,OnSize中,一个个改变的确很麻烦,有过解答,好像是从codeproject下载一个类吧,你再搜搜看.

#2


你需要在文档或者其他地方储存下每个控件的位置、长、宽(建议使用CObList储存),
然后在FormVIew大小改变时,依据这些信息改变每个控件的大小和位置。

#3


to xindao_wang(小日本都是猪) :
codeproject老是上不去,你有吗?能不能发给我

#4


http://search.csdn.net/Expert/topic/2549/2549129.xml?temp=.6776697

#5


响应WM_SIZE消息,一个例子:
void COracleAssistView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

CRect rect;
GetClientRect(&rect);

int nWidth = rect.Width();
int nLeight = rect.Height();


if(m_edit.GetSafeHwnd())
{

m_edit.SetWindowPos(this,rect.left + nWidth/100,rect.top +nLeight/100,nWidth-nWidth/100*2,nLeight/100*45,SWP_SHOWWINDOW|SWP_NOZORDER);
}

if(m_btnExec.GetSafeHwnd())
{
m_btnExec.SetWindowPos(this,rect.left + nWidth/100*40,
rect.top + nLeight/100*47,nWidth/15,nLeight/100*5 ,SWP_SHOWWINDOW|SWP_NOZORDER);

}

if(m_ctrList.GetSafeHwnd()) //m_ctrlList是listctrl的变量
{

 m_ctrList.SetWindowPos(this,rect.left + nWidth/100,
rect.top + nLeight/100*58,nWidth-nWidth/100*2,nLeight/100*52,SWP_SHOWWINDOW|SWP_NOZORDER);

}

}

#6


http://www.vcshare.net/bbs/ShowPost.asp?id=1137

#7


自己搞定了,参考一个可以自动调整对话框上控件位置的类CResiableDialog,
修改了一个CResiableFormView类,只需要把重载CFormView改为CResiableFormView,
然后在OnInitialUpdate中设置控件的调整位置的基准点
AddAnchor(IDC_BUTTON1,TOP_LEFT,BOTTOM_RIGHT);
AddAnchor(IDC_STATIC_TEXT,TOP_LEFT,BOTTOM_RIGHT);
就可以自动调整控件位置

#8


mark