实现这个功能的核心是调节控件的位置和大小,这里我采用了
CWnd
类的
SetWindowPos()
函数,使用该函数之前必须先获得控件的指针,使用
GetDlgItem()
来做到这一点。两个函数的原型如下:
CWnd* GetDlgItem(int nID)const; 返回值:指向给定控件或子窗口的指针; 参数: nID 为控件或子窗口的 ID 值。 |
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags); 功能:改变窗口的大小、位置和 Z 次序; 参数: 第一个参数我不会用,一般设为 NULL; x 、 y :窗口新位置; cx 、 cy :窗口新宽度和高度; nFlags 常用取值: SWP_NOZORDER :忽略第一个参数; SWP_NOMOVE :忽略 x 、 y ,维持位置不变; SWP_NOSIZE :忽略 cx 、 cy ,维持大小不变; |
这样,当需要重新设定某控件位置时,可采用:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); // 获取编辑控件指针
pWnd->SetWindowPos( NULL,x,y,0,0,SWP_NOZORDER | SWP_NOSIZE ); // 把控件移到窗口的 (x,y) 处,大小不变
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); // 获取编辑控件指针
pWnd->SetWindowPos( NULL,x,y,0,0,SWP_NOZORDER | SWP_NOSIZE ); // 把控件移到窗口的 (x,y) 处,大小不变
当需要重新设定某控件大小时,可采用:
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,cx,cy,SWP_NOZORDER | SWP_NOMOVE ); // 把控件的大小改为 (cx,cy) ,位置不变
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,cx,cy,SWP_NOZORDER | SWP_NOMOVE ); // 把控件的大小改为 (cx,cy) ,位置不变
当采用:
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,x,y,cx,cy,SWP_NOZORDER );
则控件的大小和位置都会改变。
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,x,y,cx,cy,SWP_NOZORDER );
则控件的大小和位置都会改变。