根据屏幕分辨率动态改变控件位置
该函数用于枚举所有子窗口,根据动态获得的屏幕分辨率。
缺点是目前只能在初始化的时候进行。不能在运行过程中动态改变,要动态改变首先要截获消息:WM_DISPLAYCHANGE,然后要动态改变,还要保存上一次的分辨率作为一个变化的标准。下面的1024和768在此就是一个变量代替。
void CDlgClsVideo::ChildAutoSuit(int cx,int cy)
{
HWND hwnd = ::GetWindow(m_hWnd,GW_CHILD);
while( hwnd != NULL ) {
CWnd *child = CWnd::FromHandle(hwnd);
CRect rect;
child->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx/1024;
rect.right = rect.right * cx/1024;
rect.top = rect.top * cy/768;
rect.bottom = rect.bottom * cy/768;
child->MoveWindow(&rect,TRUE);
hwnd = ::GetWindow(hwnd,GW_HWNDNEXT);
}
}
动态改变主窗口。
void CDlgClsVideo::FatherAutoSuit(int cx,int cy)
{
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left*cx/1024;
rect.right = rect.right*cx/1024;
rect.bottom = rect.bottom*cy/768;
MoveWindow(&rect,TRUE);
CenterWindow();
}