CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号 pWnd-> SetWindowPos ( NULL,X,Y,CX,CY,TRUE); //在窗口左上角显示一个宽100、高100的编辑控件
BOOL SetWindowPos ( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
对于x,y顶点坐标,对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。 也就是说这两个值都是相对值。
x、y控件位置;cx、cy控件宽度和高度;
子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。
有时SetWindowPos函数会无效,比如我在使用SetWindowPlacement将窗口设置为全屏后,再使用SetWindowPos根本没有作用,这时使用this->GetDlgItem(IDC_PROGRESS)->MoveWindow(rect.left,rect.bottom-50,rect.Width(),30,true);却能够实现,所以大家在SetWindowPos无效时,不要自认为的以为MoveWindow也会无效,试一下或许有用哦。
////////////////////////////////////////////////以下代码实现了子窗口中控件的定位////////////////////////////////////
CRect rect(45,117,195,141); CWnd *pwnd=GetDlgItem(IDC_DATETIMEPICKER3); pwnd->SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);
或
{rect.top=134;rect.bottom=149;rect.left=378;rect.right=398;} GetDlgItem(IDC_STATICSCORE)->SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);