在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程。位置的调整包括坐标、长度和宽度的变化,一般在窗口类的OnSize函数中实现。控件位置的调整涉及的函数有:GetWindowRect()、ScreenToClient()、GetClientRect()、MoveWindow()或SetWindowPos(),功能意义如下:
例子:
窗口大小用setwindowpos();为1024*768
控件为 500*500(GetDlgItem(IDC_STATIC)->SetWindowPos(0, 0, 0, 500, 500, NULL);)
GetWindowRect():获得窗口在屏幕上的矩形坐标,调整控件位置时必须首先获得该屏幕坐标; 带四周边框 GetWindowRect(Rect rect);
得到的窗口为: {top=0 bottom=768 left=0 right=1024}
控件为: {top=30 bottom=530 left=8 right=508}
ScreenToClient():转换屏幕坐标到客户区坐标,如果为子窗口,转换后坐标为相对于父窗口的坐标,若为独立窗口,转换后客户区左上坐标为(0,0);调整子窗口时这一步也是必须的;
GetClientRect():获得窗口客户区坐标,左上坐标永远为(0,0); 不带边框 GetClientRect(Rect rect);
得到的窗口为: {top=0 bottom=730 left=0 right=1008}
控件为: {top=0 bottom=500 left=0 right=500}
MoveWindow():调整控件到指定位置;
MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE ); (有文件链接)
SetWindowPos():调整控件的位置,该函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况: 以客户区的起始坐标为原点
SetWindowPos(HWND hWndlnsertAfter, int X,int Y,int cX,int cY,UNIT Flags);(有文件链接)