www.pudn.com > cygl.rar > JieMian.cpp


// JieMian.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "CYGLXT.h" 
#include "JieMian.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CJieMian dialog 
 
 
CJieMian::CJieMian(CWnd* pParent /*=NULL*/) 
	: CDialog(CJieMian::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CJieMian) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	m_ShowTitle = TRUE; 
	m_ReSizeFlag = FALSE; 
} 
 
 
void CJieMian::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CJieMian) 
		// NOTE: the ClassWizard will add DDX and DDV calls here 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CJieMian, CDialog) 
	//{{AFX_MSG_MAP(CJieMian) 
	ON_WM_NCMOUSEMOVE() 
	ON_WM_SYSCOMMAND() 
	ON_WM_NCLBUTTONDOWN() 
	ON_WM_PAINT() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CJieMian message handlers 
 
LRESULT CJieMian::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
{ 
	LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam); 
	 
	if (!::IsWindow(m_hWnd)) 
		return lrst; 
	 
	if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY) 
	{ 
		CDC* pWinDC = GetWindowDC(); 
		if (pWinDC) 
			DrawTitleBar(pWinDC); 
		ReleaseDC(pWinDC); 
	} 
	return lrst; 
} 
 
void CJieMian::OnNcMouseMove(UINT nHitTest, CPoint point)  
{ 
	CDC* pDC = GetWindowDC(); 
	CDC* pDisplayMemDC=new CDC; 
	pDisplayMemDC->CreateCompatibleDC(pDC); 
	CBitmap* pBitmap = new CBitmap; 
	CBitmap* pOldBitmap; 
	CRect rtWnd, rtButton; 
 
	if (pDC) 
	{ 
		GetWindowRect(&rtWnd); 
		//mouse坐标转化为本窗口坐标 重要 
		point.x = point.x-rtWnd.left; 
		point.y = point.y-rtWnd.top; 
		//判断mouse是否移到系统按钮上 
		if (m_rtButtExit.PtInRect(point)) 
		{ 
			pBitmap->LoadBitmap(IDB_EXIT_FOCUS); 
			 
		} 
		else 
		{ 
			pBitmap->LoadBitmap(IDB_NORMAL); 
		} 
			 
	 
 
		rtButton = m_rtButtMin; 
		BITMAP BmpInfo; 
		pBitmap->GetBitmap(&BmpInfo); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		pDC->BitBlt(rtButton.left-6, rtButton.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		CRect ShowTipRec; 
		ShowTipRec = m_rtButtMin; 
	} 
	ReleaseDC(pDisplayMemDC); 
	ReleaseDC(pDC); 
	delete pDisplayMemDC; 
	delete pBitmap; 
	CDialog::OnNcMouseMove(nHitTest, point); 
} 
 
 
void CJieMian::OnNcLButtonDown(UINT nHitTest, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	CRect rtWnd; 
 	GetWindowRect(&rtWnd); 
  
 	//mouse坐标转化为本窗口坐标 重要 
 	point.x = point.x - rtWnd.left; 
 	point.y = point.y - rtWnd.top; 
 	//检测各按钮是否按到 
 	if (m_rtButtExit.PtInRect(point)) 
 	{ 
 		SendMessage(WM_CLOSE); 
 	} 
	else 
 	{ 
 		if (!IsZoomed()) 
 		{ 
 			Default();						 
 		} 
	}	 
 	 
} 
void CJieMian::DrawTitleBar(CDC *pDC) 
{ 
	if (m_hWnd) 
	{ 
		CBrush Brush(RGB(0,100,255)); 
		CBrush* pOldBrush = pDC->SelectObject(&Brush); 
 
		CRect rtWnd, rtTitle, rtButtons; 
		GetWindowRect(&rtWnd);  
		//取得标题栏的位置 
		rtTitle.left = GetSystemMetrics(SM_CXFRAME); 
		rtTitle.top = GetSystemMetrics(SM_CYFRAME); 
		rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME); 
		rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE); 
 
		//计算最小化按钮的位置,位图大小为15X15 
		rtButtons.left = rtTitle.right-60; 
		rtButtons.top= rtTitle.top+2; 
		rtButtons.right = rtTitle.right-42; 
		rtButtons.bottom = rtTitle.top+20; 
		m_rtButtMin = rtButtons; 
		//计算最大化按钮的位置,位图大小为15X15 
	 
		//计算退出按钮的位置,位图大小为15X15 
		m_rtButtExit.left =m_rtButtMin.left + 36; 
		m_rtButtExit.top =  m_rtButtMin.top; 
		m_rtButtExit.right = m_rtButtMin.right + 32; 
		m_rtButtExit.bottom =m_rtButtMin.bottom; 
		//准备重画 
		CBitmap* pBitmap = new CBitmap; 
		BITMAP BmpInfo; 
		CBitmap* pOldBitmap; 
		CDC* pDisplayMemDC=new CDC; 
		pDisplayMemDC->CreateCompatibleDC(pDC); 
		//重画最小化button 
		 
		 
		 
		//顶部左边 
		POINT  DrawPonit; 
		DrawPonit.x =rtTitle.left-4; 
		DrawPonit.y =rtTitle.top-4; 
		pBitmap->LoadBitmap(IDB_TITLE_LEFT); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		pBitmap->GetBitmap(&BmpInfo); 
		pDC->BitBlt(rtTitle.left-4, rtTitle.top-4, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
		DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth; 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		//顶部中间 
		pBitmap->LoadBitmap(IDB_TOP); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		pBitmap->GetBitmap(&BmpInfo); 
		while(DrawPonit.x<= m_rtButtMin.left-66) 
		{ 
			pDC->BitBlt(DrawPonit.x, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
			DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth; 
		} 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
 
		pBitmap->LoadBitmap(IDB_TITLE_RIGHT); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		pBitmap->GetBitmap(&BmpInfo); 
		pDC->BitBlt(DrawPonit.x, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		//左边框 
		pBitmap->LoadBitmap(IDB_LEFTDOWN); 
		pBitmap->GetBitmap(&BmpInfo); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		int i ; 
		for (i= 20;i<=rtWnd.bottom;i=i+BmpInfo.bmHeight-3) 
		{ 
			pDC->BitBlt(0, rtButtons.top+i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
		} 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		//重画右边框 
		pBitmap->LoadBitmap(IDB_RIGHTDOWN); 
		pBitmap->GetBitmap(&BmpInfo); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		GetClientRect(&rtWnd); 
		for (i= 25;i<=rtWnd.bottom+50;i=i+BmpInfo.bmHeight-3) 
		{ 
			pDC->BitBlt(rtWnd.right, i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
		} 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		//重画底边框 
		pBitmap->LoadBitmap(IDB_DOWN); 
		pBitmap->GetBitmap(&BmpInfo); 
		pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); 
		GetClientRect(&rtWnd); 
		for (i=9; i<=rtWnd.right; i=i+2) 
		{ 
			GetClientRect(&rtWnd); 
			pDC->BitBlt(i,rtWnd.bottom+26, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); 
		} 
		pDisplayMemDC->SelectObject(pOldBitmap); 
		pBitmap->DeleteObject(); 
		ReleaseDC(pDisplayMemDC); 
		delete pDisplayMemDC; 
		delete pBitmap; 
	}	 
} 
void CJieMian::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if (nID == SC_CLOSE) 
		{ 
			AfxGetMainWnd()->DestroyWindow();//关闭应用程序 
			return; 
		} 
		if (nID == SC_RESTORE) 
		{ 
			ShowWindow(SW_NORMAL);//restore应用程序 
			m_ShowTitle = TRUE; 
			return; 
		} 
	 
	CDialog::OnSysCommand(nID, lParam); 
} 
void CJieMian::OnPaint()  
{ 
	CPaintDC dc(this);  
	CBitmap bit; 
	CDC mendc; 
	CRect rect; 
	this->GetWindowRect(&rect); 
	bit.LoadBitmap(IDB_BITMAP8); 
	mendc.CreateCompatibleDC(&dc); 
	mendc.SelectObject(&bit); 
	dc.BitBlt(0,0,rect.Width(),rect.Height(),&mendc,0,0,SRCCOPY); 
	mendc.DeleteDC(); 
	::DeleteObject(&bit); 
}