C++ Builder中保持控件的位置及大小[VC/C++编程]
本文“C++ Builder中保持控件的位置及大小[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
C++ Builder/Delphi是Inprise(原Borland)公司广受欢送的可视化C++/Pascal开辟工具,操纵它可极大地加快利用程序的开辟速度.但是,也正因为其是可视化编程工具,将控件拖放到Form后,控件的位置就固定死了.随着Form的大小或屏幕辨别率的改变,控件和Form本身的位置常常变得非常混乱.本文将介绍一些正肯定位控件及Form的办法.
操纵OnResize事件改变控件位置及大小
C++ Builder/Delphi中的Form控件有一个OnResize事件,Form的全部与大小改变有关的行动可以触发这个事件,包含Form的成立、最大化/最小化/复原、用鼠标拖动改变大小等.因此,在此事件中动态地改变各个控件的位置可以确保其在Form中的相对位置精确.因为CBuilder与Delphi的程序有很多共同之处,所以这里只列出CBuilder的代码.
下面的代码将确保控件在任何情形下都居中.
程序一:
void __fastcall TForm1::FofmResize(TObject*Sender)
{
int midLoc=Width/2; //取Form的中点
Label1->Left=midLoc-Label1->Width/2; //设置Label1的位置为Form居中
Button1->Left=midLoc-Button1->Width/2; //设置Button1的位置为Form居中
}
略微改正这段代码,可以使控件保持在任何想要的位置.一样,也可以操纵OnResize事件改变控件的大小.当Form中控件很多时,辨别对每一个控件单独调整位置是件非常麻烦的事,在TFrom类中有一个Controls数组保护全部From中的控件,操纵它可便利地对全部控件举行操作.下面是其源代码:
程序二:
void __fastcall TForm1::FormResize(TObject*Sender)
{
int midLoc=Width/2;
TControl * ChildControl;
fof(int i=0; i<ControlCount; i++)
{//遍历Controls数组,ControlCount是数组元素个数
ChildControl = Controls[i];
ChildCotrol->Left = midLoc-ChildControl->Width/2;
}
}
操纵“容器”掌握成组控件位置
上面的代码对保持全部掌握到统一位置非常便利,但不利于对成组控件举行操作.
在C++Builder中供应了一些能安设别的控件的“容器”控件,如TPanel、TGroupBox等,可以将控件放在“容器”控件中:然后对“容器”控件举行操作,从而到达成组掌握控件的目的.操纵“容器”控件掌握控件位置的后果,全部控件都自动居中,但是在GroupBox1控件中的子控件却没有居中,这是因为Controls数组只保护Form的直接子控件,对Form中控件的子控件则无能为力.因此,GroupBox1控件中的子控件仍旧在初始位置,必须编写呼应代码动态掌握其位置及大小.这种技术非常重要,分外是在动态改变“容器”控件大小时.其实,“容器”控件与From一样有Controls数组,只要对其举行与程序2近似的操作便可.代码见程序3
程序三
void __fastcall TForm1::FormResize(TObject*Sender)
{
int midLoc=Width/2;
TControl * ChildControl;
for(int i=0;i<ControlConnt; i++)
{//遍历Controls数组,ControlCount是数组元素个数
ChildControl = Controls[i];
ChildControl->Left = midLoc-ChildControl->Width/2;
if (ChildControl ==GroupBox1)
{//若控件是GroupBox,对其子控件举行操作
int SubMidLoc=GroupBox1->Width/2;
for(int j=0;j<GroupBox1->ControlCount;j++)
{//遍历GroupBox1的Controls数组.ControlCount是数组元素个数
ChildControl=GroupBox1->Controls[j];
ChildContro1->Left=SubMidLoc-ChildControl->Width/2;
}
}
}
}
在差别辨别率下保护窗体位置及大小
商业程序普通要在各种辨别率下运行,精确判断当前辨别率就显得很重要.Windows函数GetDeviceCaps可以返回肆意设备描写表中设备大小.
GetDeviceCaps有两个参数,第一个是要查询的设备描写表句柄,第二个是要查询参数的范例,此中HORZRES,VERTRES辨别代表屏幕水暖和垂直辨别率.程序4是获得当前屏幕辨别率的代码.普通可将这段代码放在“工程文件”(如Project1.cpp)中,并将i、j定义为全局变量,然后可以操纵前面介绍的技术掌握各种屏幕元素的大小及位置.
程序四:
HDC hdc=GetDC(NULL); //得到屏幕设备描写表句柄
int i=GetDeviceCaps(hdc,HORZRES); //查询屏幕水平辨别率,并返回在变量i中
int j=GetDeviceCaps(hdc,VERTRES); //查询屏幕水平辨别率,并返回在变量j中
ReleaseDC(NULL,hdc); //释放屏幕设备描写表
用一样的办法,可以对差别大小纸张的打印举行掌握,在这里不再赘述,有爱好的朋友可查看GetDevice Caps帮忙及打印帮忙.
以上是“C++ Builder中保持控件的位置及大小[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |