VCÖÐ×Ô¶¯¸Ä±ä¿Ø¼þλÖúʹóСµÄ¶Ô»°¿òÀà
À´Ô´£º»¥ÁªÍø
×÷ÕߣºÎ÷²¿ÊýÂë
ʱ¼ä£º2008-04-09
Î÷²¿ÊýÂë-È«¹úÐéÄâÖ÷»ú10Ç¿£¡40ÓàÏîÐéÄâÖ÷»ú¹ÜÀí¹¦ÄÜ,È«¹úÁìÏÈ!Ë«Ïß¶àÏßÐéÄâÖ÷»úÄϱ±·ÃÎʳ©Í¨ÎÞ×è!Ãâ·ÑÔùËÍÆóÒµÓʾÖ,.CNÓòÃû,×ÔÖú½¨Õ¾480ÔªÆð,Ãâ·ÑÊÔÓÃ7Ìì,ÂúÒâÔÙ¸¶¿î! P4Ö÷»ú×âÓÃ799Ôª/ÔÂ.Ô¸¶Ãâѹ½ð!
// ×÷ÕߣºStarLee(coolstarlee@sohu.com)
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "lxDialog.h"
// ±íʾ¿É¸Ä±ä´óСµÄͼ±êID
#ifndef OBM_SIZE
#define OBM_SIZE 32766
#endif
ClxDialog::ClxDialog(UINT nID, CWnd* pParent /*=NULL*/)
: CDialog(nID, pParent)
, m_iClientWidth(0)
, m_iClientHeight(0)
, m_iMinWidth(0)
, m_iMinHeight(0)
, m_pControlArray(NULL)
, m_iControlNumber(0)
, m_bShowSizeIcon(TRUE)
{}
BEGIN_MESSAGE_MAP(ClxDialog, CDialog)
¡¡ON_WM_SIZE()
¡¡ON_WM_SIZING()
END_MESSAGE_MAP()
BOOL ClxDialog::OnInitDialog()
{
¡¡CDialog::OnInitDialog();
¡¡// ÉèÖöԻ°¿òΪ¿É±ä´óСµÄ
¡¡ModifyStyle(0, WS_SIZEBOX);
¡¡// ÒÔ¶Ô»°¿òµÄ³õʼ´óС×÷Ϊ¶Ô»°¿òµÄ¿í¶ÈºÍ¸ß¶ÈµÄ×îСֵ
¡¡CRect rectDlg;
¡¡GetWindowRect(rectDlg);
¡¡m_iMinWidth = rectDlg.Width();
¡¡m_iMinHeight = rectDlg.Height();
¡¡// µÃµ½¶Ô»°¿òclientÇøÓòµÄ´óС
¡¡CRect rectClient;
¡¡GetClientRect(rectClient);
¡¡m_iClientWidth = rectClient.Width();
¡¡m_iClientHeight = rectClient.Height();
¡¡// Loadͼ±ê
¡¡m_bmpSizeIcon.LoadOEMBitmap(OBM_SIZE);
¡¡m_bmpSizeIcon.GetBitmap(&m_bitmap);
¡¡// ´´½¨ÏÔʾͼ±êµÄ¾²Ì¬¿Ø¼þ²¢·ÅÔÚ¶Ô»°¿òÓÒϽÇ
¡¡m_wndSizeIcon.Create(NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP, CRect(0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight), this, 0);
¡¡m_wndSizeIcon.SetBitmap(m_bmpSizeIcon);
¡¡m_wndSizeIcon.MoveWindow(m_iClientWidth - m_bitmap.bmWidth, m_iClientHeight - m_bitmap.bmHeight, m_bitmap.bmWidth, m_bitmap.bmHeight);
¡¡// ÏÔʾͼ±ê
¡¡m_wndSizeIcon.ShowWindow(m_bShowSizeIcon);
¡¡return TRUE;
}
void ClxDialog::OnSize(UINT nType, int cx, int cy)
{
¡¡CDialog::OnSize(nType, cx, cy);
¡¡// ¶Ô»°¿ò¿í¶ÈºÍ¸ß¶ÈµÄÔöÁ¿
¡¡int iIncrementX = cx - m_iClientWidth;
¡¡int iIncrementY = cy - m_iClientHeight;
¡¡// ×îС»¯Ê±ÔöÁ¿Îª0
¡¡if (nType == SIZE_MINIMIZED)
¡¡{
¡¡¡¡iIncrementX = iIncrementY = 0;
¡¡}
¡¡for (int i = 0; i < m_iControlNumber; i )
¡¡{
¡¡¡¡CWnd *pWndCtrl = NULL;
¡¡¡¡int iId = m_pControlArray[i].iId;
¡¡¡¡int iFlag = m_pControlArray[i].iFlag;
¡¡¡¡int iPercent = m_pControlArray[i].iPercent;
¡¡¡¡// ÎÞЧֵ
¡¡¡¡if ((iPercent < 0) || (iPercent > 100))
¡¡¡¡¡¡continue;
¡¡¡¡// µÃµ½¿Ø¼þÖ¸Õë
¡¡¡¡pWndCtrl = GetDlgItem(iId);
¡¡¡¡if ((NULL != pWndCtrl) && IsWindow(pWndCtrl->GetSafeHwnd()))
¡¡¡¡{
¡¡¡¡¡¡CRect rectCtrl;
¡¡¡¡¡¡pWndCtrl->GetWindowRect(rectCtrl);
¡¡¡¡¡¡ScreenToClient(rectCtrl);
¡¡¡¡¡¡int iLeft = rectCtrl.left;
¡¡¡¡¡¡int iTop = rectCtrl.top;
¡¡¡¡¡¡int iWidth = rectCtrl.Width();
¡¡¡¡¡¡int iHeight = rectCtrl.Height();
¡¡¡¡¡¡switch (iFlag)
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡case MOVEX: // X·½ÏòÒÆ¶¯
¡¡¡¡¡¡¡¡¡¡iLeft = (iIncrementX * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡case MOVEY: // Y·½ÏòÒÆ¶¯
¡¡¡¡¡¡¡¡¡¡iTop = (iIncrementY * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡case MOVEXY: // X·½ÏòºÍY·½ÏòÍ¬Ê±ÒÆ¶¯
¡¡¡¡¡¡¡¡¡¡iLeft = (iIncrementX * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡iTop = (iIncrementY * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡case ELASTICX: // X·½Ïò¸Ä±ä´óС
¡¡¡¡¡¡¡¡¡¡iWidth = (iIncrementX * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡case ELASTICY: // Y·½Ïò¸Ä±ä´óС
¡¡¡¡¡¡¡¡¡¡iHeight = (iIncrementY * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡case ELASTICXY: // X·½ÏòºÍY·½Ïòͬʱ¸Ä±ä´óС
¡¡¡¡¡¡¡¡¡¡iWidth = (iIncrementX * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡iHeight = (iIncrementY * iPercent / 100);
¡¡¡¡¡¡¡¡¡¡break;
¡¡¡¡¡¡¡¡default:
¡¡¡¡¡¡¡¡¡¡;
¡¡¡¡¡¡}
¡¡¡¡¡¡// °Ñ¿Ø¼þÒÆ¶¯µ½ÐÂλÖÃ
¡¡¡¡¡¡pWndCtrl->MoveWindow(iLeft, iTop, iWidth, iHeight);
¡¡¡¡}
¡¡}
¡¡// °Ñͼ±êÒÆ¶¯µ½¶Ô»°¿òÓÒϽÇ
¡¡if (IsWindow(m_wndSizeIcon.GetSafeHwnd()))
¡¡¡¡m_wndSizeIcon.MoveWindow(cx - m_bitmap.bmWidth, cy - m_bitmap.bmHeight, m_bitmap.bmWidth, m_bitmap.bmHeight);
¡¡// ¼Ç¼¶Ô»°¿òclientÇøÓòµÄ´óС
¡¡if (nType != SIZE_MINIMIZED)
¡¡{
¡¡¡¡m_iClientWidth = cx;
¡¡¡¡m_iClientHeight = cy;
¡¡}
}
void ClxDialog::OnSizing(UINT nSide, LPRECT lpRect)
{
¡¡CDialog::OnSizing(nSide, lpRect);
¡¡// ¶Ô»°¿ò²»ÄÜСÓÚ³õʼ´óС
¡¡int iWidth = lpRect->right - lpRect->left;
¡¡int iHeight = lpRect->bottom - lpRect->top;
¡¡if (iWidth <= m_iMinWidth)
¡¡¡¡lpRect->right = lpRect->left m_iMinWidth;
¡¡if(iHeight <= m_iMinHeight)
¡¡¡¡lpRect->bottom = lpRect->top m_iMinHeight;
}
BOOL ClxDialog::SetControlProperty(PDLGCTLINFO lp, int nElements)
{
¡¡// ÉèÖÿؼþÊý×éÐÅÏ¢
¡¡if (NULL == lp)
¡¡¡¡return FALSE;
¡¡if (nElements <= 0)
¡¡¡¡return FALSE;
¡¡m_pControlArray = lp;
¡¡m_iControlNumber = nElements;
¡¡return TRUE;
}
void ClxDialog::ShowSizeIcon(BOOL bShow /*=NULL*/)
{
¡¡m_bShowSizeIcon = bShow;
}
ÎÄÕÂÕûÀí£ºÎ÷²¿ÊýÂë--רҵÌṩÓòÃû×¢²á¡¢ÐéÄâÖ÷»ú·þÎñ
http://www.west263.com
ÒÔÉÏÐÅÏ¢ÓëÎÄÕÂÕýÎÄÊDz»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúÒª×ªÔØ±¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»!



