三種隨著對話方塊的大小更新改變控制元件大小
阿新 • • 發佈:2019-02-06
.h檔案中新增程式碼
private:
POINT Old;
CRect m_rect; public: afx_msg void OnSize(UINT nType, int cx, int cy);
//void ReSize();
}; BOOL CDeviceParameter::OnInitDialog()
{
CDialog::OnInitDialog(); ClearDeviceView(&m_ListView);
InitDeviceTree(&m_TreeView,&g_Manager.m_Conf,g_Manager.m_Index); //CRect rect;
//GetClientRect(&rect); //取客戶區大小
//Old.x=rect.right-rect.left;
//Old.y=rect.bottom-rect.top;
GetClientRect(&m_rect); return TRUE;
} void
CDeviceParameter::OnSize(
UINT nType,
int cx,
int cy
)
{
CWnd *pWnd;
CRect rect;
CDialog::OnSize(nType, cx, cy);
//窗體大小發生變動。處理函式ReSize
/*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
ReSize();
}*/ /*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_STATIC_TREE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_LISTVIEW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
}
pWnd = GetDlgItem(IDC_CLOSE);
if (pWnd)
{ pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} GetClientRect(&m_rect);
}
if (nType == SIZE_MAXIMIZED)
{
pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right = 200;
rect.top = 35;
rect.bottom = 630;
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_STATIC_TREE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right = 220;
rect.top = 10;
rect.bottom = 650;
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_LISTVIEW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = 250;
rect.right = 1260;
rect.top = 10;
rect.bottom = 650;
pWnd->MoveWindow(rect);
}
pWnd = GetDlgItem(IDC_CLOSE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = 1100;
rect.right = 1260;
rect.top = 670;
rect.bottom = 700;
pWnd->MoveWindow(rect);
} GetClientRect(&m_rect);
}*/
pWnd = GetDlgItem(IDC_STATIC_TREE); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
//rect.left = cx - rect.Width() - cWidth;
//rect.right = cx - cWidth;
rect.left = 10;
rect.right = 210;
//rect.top = cy - rect.Height() - cHeight;
//rect.bottom = cy - cHeight; rect.top = 10;
rect.bottom = cy - 80;
pWnd->MoveWindow(rect);//設定控制元件大小
} pWnd = GetDlgItem(IDC_TREEVIEWSHOW); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = 15;
rect.right = 205;
rect.top = 35;
rect.bottom = cy - 100;
pWnd->MoveWindow(rect);//設定控制元件大小
} pWnd = GetDlgItem(IDC_LISTVIEW); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = 250;
rect.right = cx - 10;
rect.top = 10;
rect.bottom = cy - 70;
pWnd->MoveWindow(rect);//設定控制元件大小
}
pWnd = GetDlgItem(IDC_CLOSE); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = cx - 90;
rect.right = cx - 10;
rect.top = cy - 50;
rect.bottom = cy - 20;
pWnd->MoveWindow(rect);//設定控制元件大小
} GetClientRect(&m_rect);//將變化後的對話方塊大小設為舊大小
}
/*void
CDeviceParameter::ReSize()
{
float fsp[2];
POINT Newp; //獲取現在對話方塊的大小
CRect recta;
CRect Rect;
int woc;
CPoint OldTLPoint;
CPoint TLPoint; //左上角
CPoint OldBRPoint;
CPoint BRPoint; //右下角
HWND hwndChild; GetClientRect(&recta); //取客戶區大小
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
fsp[0] = (float)Newp.x / Old.x;
fsp[1] = (float)Newp.y / Old.y;
hwndChild = ::GetWindow(m_hWnd,GW_CHILD); //列出所有控制元件 while(hwndChild)
{
woc = ::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect); ScreenToClient(Rect); OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x * fsp[0]);
TLPoint.y = long(OldTLPoint.y * fsp[1]); OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x * fsp[0]);
BRPoint.y = long(OldBRPoint.y * fsp[1]); Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
} Old = Newp;
}*/
CRect m_rect; public: afx_msg void OnSize(UINT nType, int cx, int cy);
//void ReSize();
}; BOOL CDeviceParameter::OnInitDialog()
{
CDialog::OnInitDialog(); ClearDeviceView(&m_ListView);
InitDeviceTree(&m_TreeView,&g_Manager.m_Conf,g_Manager.m_Index); //CRect rect;
//GetClientRect(&rect); //取客戶區大小
//Old.x=rect.right-rect.left;
//Old.y=rect.bottom-rect.top;
GetClientRect(&m_rect); return TRUE;
} void
CDeviceParameter::OnSize(
UINT nType,
int cx,
int cy
)
{
CWnd *pWnd;
CRect rect;
CDialog::OnSize(nType, cx, cy);
//窗體大小發生變動。處理函式ReSize
/*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
ReSize();
}*/ /*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_STATIC_TREE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_LISTVIEW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
}
pWnd = GetDlgItem(IDC_CLOSE);
if (pWnd)
{ pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = rect.left * cx / m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy / m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
pWnd->MoveWindow(rect);
} GetClientRect(&m_rect);
}
if (nType == SIZE_MAXIMIZED)
{
pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right = 200;
rect.top = 35;
rect.bottom = 630;
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_STATIC_TREE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.right = 220;
rect.top = 10;
rect.bottom = 650;
pWnd->MoveWindow(rect);
} pWnd = GetDlgItem(IDC_LISTVIEW);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = 250;
rect.right = 1260;
rect.top = 10;
rect.bottom = 650;
pWnd->MoveWindow(rect);
}
pWnd = GetDlgItem(IDC_CLOSE);
if (pWnd)
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left = 1100;
rect.right = 1260;
rect.top = 670;
rect.bottom = 700;
pWnd->MoveWindow(rect);
} GetClientRect(&m_rect);
}*/
pWnd = GetDlgItem(IDC_STATIC_TREE); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
//rect.left = cx - rect.Width() - cWidth;
//rect.right = cx - cWidth;
rect.left = 10;
rect.right = 210;
//rect.top = cy - rect.Height() - cHeight;
//rect.bottom = cy - cHeight; rect.top = 10;
rect.bottom = cy - 80;
pWnd->MoveWindow(rect);//設定控制元件大小
} pWnd = GetDlgItem(IDC_TREEVIEWSHOW); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = 15;
rect.right = 205;
rect.top = 35;
rect.bottom = cy - 100;
pWnd->MoveWindow(rect);//設定控制元件大小
} pWnd = GetDlgItem(IDC_LISTVIEW); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = 250;
rect.right = cx - 10;
rect.top = 10;
rect.bottom = cy - 70;
pWnd->MoveWindow(rect);//設定控制元件大小
}
pWnd = GetDlgItem(IDC_CLOSE); //獲取控制元件控制代碼
if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
rect.left = cx - 90;
rect.right = cx - 10;
rect.top = cy - 50;
rect.bottom = cy - 20;
pWnd->MoveWindow(rect);//設定控制元件大小
} GetClientRect(&m_rect);//將變化後的對話方塊大小設為舊大小
}
/*void
CDeviceParameter::ReSize()
{
float fsp[2];
POINT Newp; //獲取現在對話方塊的大小
CRect recta;
CRect Rect;
int woc;
CPoint OldTLPoint;
CPoint TLPoint; //左上角
CPoint OldBRPoint;
CPoint BRPoint; //右下角
HWND hwndChild; GetClientRect(&recta); //取客戶區大小
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
fsp[0] = (float)Newp.x / Old.x;
fsp[1] = (float)Newp.y / Old.y;
hwndChild = ::GetWindow(m_hWnd,GW_CHILD); //列出所有控制元件 while(hwndChild)
{
woc = ::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect); ScreenToClient(Rect); OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x * fsp[0]);
TLPoint.y = long(OldTLPoint.y * fsp[1]); OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x * fsp[0]);
BRPoint.y = long(OldBRPoint.y * fsp[1]); Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
} Old = Newp;
}*/