添加VC里的现成的控件,比如按钮,编辑框等等,但是这些控件的大小和位置都不会变,比如窗口变大的时候,按钮还是在那个位置,并没有按比例放缩和改变大小,现在想做成一个让控件可以随着窗口的大小变化而变化大小和位置的界面,就是要让界面的整体布局(按比例上讲)固定,不管分辨率和窗口大小,控件会随着窗口的大小变化自己的位置和大小。
我试了下,采用了MM_ANISOTROPIC映射模式,在ONDRAW()函数利用MOVEWINDOW函数移动按钮控件,不过还得每次都要自己计算下当前窗口里的客户区的大小,然后在计算按钮应该显示的相对位置和大小才能搞定,并且MOVEWINDOW里的数值好像不是逻辑坐标,仍然是象素坐标,这样就很麻烦~~~
应该更简单的方法实现吧,比如设置一个按钮的什么什么属性~
可是我看了CBUTTON类没发现类似的函数啊?
难道MFC里面没有考虑到用户的这种需求吗??请教高手
我试了下,采用了MM_ANISOTROPIC映射模式,在ONDRAW()函数利用MOVEWINDOW函数移动按钮控件,不过还得每次都要自己计算下当前窗口里的客户区的大小,然后在计算按钮应该显示的相对位置和大小才能搞定,并且MOVEWINDOW里的数值好像不是逻辑坐标,仍然是象素坐标,这样就很麻烦~~~
应该更简单的方法实现吧,比如设置一个按钮的什么什么属性~
可是我看了CBUTTON类没发现类似的函数啊?
难道MFC里面没有考虑到用户的这种需求吗??请教高手
利用MOVEWINDOW是可以
可是大小和坐标还是要计算才能保证整体布局
如果控件比较多也挺麻烦
我就是想知道是不是有简单的办法
控件大小和位置随窗口变化而发生改变这个需求应该比较普遍
难道MFC没有提供类似的操作和属性什么的?
能具体点吗我要实现的就是Huberhui 说的那样,谢谢
void MoveWindow(
int x,
int y,
int nWidth,
int nHeight,
BOOL bRepaint = TRUE
);
void MoveWindow(
LPCRECT lpRect,
BOOL bRepaint = TRUE
);
试一下
{
CDialog::OnSize(nType, cx, cy);
CWnd *pWnd = GetDlgItem( IDC_BUTTON_TEST ); CRect DlgRc; GetWindowRect( &DlgRc );
CRect BtnRc; if ( pWnd )
{
pWnd->GetWindowRect( &BtnRc ); pWnd->MoveWindow( DlgRc.Width()/2-BtnRc.Width()/2, DlgRc.Height()-50, BtnRc.Width(), BtnRc.Height() );
} pWnd = GetDlgItem( IDC_LIST );
if ( pWnd )
{
pWnd->GetWindowRect( &BtnRc ); pWnd->MoveWindow( 10, 10, DlgRc.Width()-20, DlgRc.Height()-70 );
}
}你自己修改修改
这个应该是你需要的
现成的类cdxCSizingDialog,以前我用过,挺方便的
你可以自己建个专门用来保存每个控件位置的类,并且这个类兼顾移动控件,就叫它"窗口布局类"吧.当然你也可以用全局或静态变量,或者变量都不用,但好象太乱了.当每次来了WM_SIZE消息就按保存的位置一个个控件给MoveWindow到合适的位置.精心设计好这个控件保存位置的类,你的主程序就会很整洁的.我一直这样做,对于控件的窗口这样做不失为一个好方法,C++的类一个很重要的方面不就是设计用来做这种琐事的么.