,c++builder中有没有简单,效率高的控件自适应窗体的方法
各位高手,c++builder中有没有简单,效率高的控件自适应窗体的方法
我在窗体的OnResize()事件中调用了一个自己写的函数,由于我的窗体中GroupBox下有PageControl,PageControl下有TabSheet,TabSheet下有ScollBox,ScollBox下有Image,所以我的代码会进行多次嵌套循环,导致效率很低。调用的函数代码如下:
bool __fastcall TFormResize::ResizeAll(TForm* pForm)
{
if(pForm->Align == alClient)
{
exit(0);
return false;
}
/*保存缩放后的窗体尺寸*/
pNewFormSize->formWidth = pForm->Width;
pNewFormSize->formHeight = pForm->Height;
pNewFormSize->formLeft = pForm->Left;
pNewFormSize->formTop = pForm->Top;
/*缩放比例因子计算*/
pRatio->heightRatio = pNewFormSize->formHeight /
(1.0 * pOldFormSize->formHeight);
pRatio->widthRatio = pNewFormSize->formWidth /
(1.0 * pOldFormSize->formWidth);
for(int i = 0; i < pForm->ControlCount; i++)
{
TControl* pCtrl = pForm->Controls[i];
//对单个控件进行缩放操作
ControlSize * pCtrlSize = new ControlSize;
/*保存控件的原始尺寸*/
pCtrlSize->controlHeight = pCtrl->Height;
pCtrlSize->controlWidth = pCtrl->Width;
pCtrlSize->controlLeft = pCtrl->Left;
pCtrlSize->controlTop = pCtrl->Top;
/*按比例缩放控件*/
pCtrl->Height = (floor)(pCtrlSize->controlHeight * pIn->heightRatio);
pCtrl->Width = (floor)(pCtrlSize->controlWidth * pIn->widthRatio);
pCtrl->Left = (floor)(pCtrlSize->controlLeft * pIn->widthRatio);
pCtrl->Top = (floor)(pCtrlSize->controlTop * pIn->heightRatio);
delete pCtrlSize;
/*对控件类型进行判断*/
if(pCtrl->ClassType() == __classid(TGroupBox))
{
TGroupBox* pBox;
for(int i = 0; i < pBox->ControlCount; i++)
{
TControl* pChild = pBox->Controls[i];
pChild->Width = (floor)(pChild->Width * pIn->widthRatio);
pChild->Height = (floor)(pChild->Height * pIn->heightRatio);
pChild->Left = (floor)(pChild->Left * pIn->widthRatio);
pChild->Top = (floor)(pChild->Top * pIn->heightRatio);
/*对控件类型进行判断*/
if(pChild->ClassType() == __classid(TPageControl))
{
for(int i = 0; i < pPage->ControlCount; i++)
{
TControl* pChild = pPage->Controls[i];
pChild->Width = (floor)(pChild->Width * pIn->widthRatio);
pChild->Height = (floor)(pChild->Height * pIn->heightRatio);
pChild->Left = (floor)(pChild->Left * pIn->widthRatio);
pChild->Top = (floor)(pChild->Top * pIn->heightRatio);
}
}
}
}
//pNewFormSize->formFontSize = ResizeFormFont(pOldFormSize->formFontSize, pRatio);
//pForm->Font->Size = pNewFormSize->formFontSize;
/*保存现在窗体状态为原始状态*/
pOldFormSize->formWidth = pNewFormSize->formWidth;
我在窗体的OnResize()事件中调用了一个自己写的函数,由于我的窗体中GroupBox下有PageControl,PageControl下有TabSheet,TabSheet下有ScollBox,ScollBox下有Image,所以我的代码会进行多次嵌套循环,导致效率很低。调用的函数代码如下:
bool __fastcall TFormResize::ResizeAll(TForm* pForm)
{
if(pForm->Align == alClient)
{
exit(0);
return false;
}
/*保存缩放后的窗体尺寸*/
pNewFormSize->formWidth = pForm->Width;
pNewFormSize->formHeight = pForm->Height;
pNewFormSize->formLeft = pForm->Left;
pNewFormSize->formTop = pForm->Top;
/*缩放比例因子计算*/
pRatio->heightRatio = pNewFormSize->formHeight /
(1.0 * pOldFormSize->formHeight);
pRatio->widthRatio = pNewFormSize->formWidth /
(1.0 * pOldFormSize->formWidth);
for(int i = 0; i < pForm->ControlCount; i++)
{
TControl* pCtrl = pForm->Controls[i];
//对单个控件进行缩放操作
ControlSize * pCtrlSize = new ControlSize;
/*保存控件的原始尺寸*/
pCtrlSize->controlHeight = pCtrl->Height;
pCtrlSize->controlWidth = pCtrl->Width;
pCtrlSize->controlLeft = pCtrl->Left;
pCtrlSize->controlTop = pCtrl->Top;
/*按比例缩放控件*/
pCtrl->Height = (floor)(pCtrlSize->controlHeight * pIn->heightRatio);
pCtrl->Width = (floor)(pCtrlSize->controlWidth * pIn->widthRatio);
pCtrl->Left = (floor)(pCtrlSize->controlLeft * pIn->widthRatio);
pCtrl->Top = (floor)(pCtrlSize->controlTop * pIn->heightRatio);
delete pCtrlSize;
/*对控件类型进行判断*/
if(pCtrl->ClassType() == __classid(TGroupBox))
{
TGroupBox* pBox;
for(int i = 0; i < pBox->ControlCount; i++)
{
TControl* pChild = pBox->Controls[i];
pChild->Width = (floor)(pChild->Width * pIn->widthRatio);
pChild->Height = (floor)(pChild->Height * pIn->heightRatio);
pChild->Left = (floor)(pChild->Left * pIn->widthRatio);
pChild->Top = (floor)(pChild->Top * pIn->heightRatio);
/*对控件类型进行判断*/
if(pChild->ClassType() == __classid(TPageControl))
{
for(int i = 0; i < pPage->ControlCount; i++)
{
TControl* pChild = pPage->Controls[i];
pChild->Width = (floor)(pChild->Width * pIn->widthRatio);
pChild->Height = (floor)(pChild->Height * pIn->heightRatio);
pChild->Left = (floor)(pChild->Left * pIn->widthRatio);
pChild->Top = (floor)(pChild->Top * pIn->heightRatio);
}
}
}
}
//pNewFormSize->formFontSize = ResizeFormFont(pOldFormSize->formFontSize, pRatio);
//pForm->Font->Size = pNewFormSize->formFontSize;
/*保存现在窗体状态为原始状态*/
pOldFormSize->formWidth = pNewFormSize->formWidth;