⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtdialog.cpp

📁 vc++编写的界面源代码,对C++爱好者是很发的帮助。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	for(int i = 0; i < 5; i ++)
	{
		m_RestoreButtonBitmap[i] = RestoreButtonBitmap[i];
		m_RestoreButtonBitmapDrawMode[i] = DrawMode[i];
	}
	return TRUE;
}
BOOL CRTDialog::SetExitButtonBitmap(CBitmap* ExitButtonBitmap[],UINT DrawMode[])
{
	for(int i = 0; i < 5; i ++)
	{
		m_ExitButtonBitmap[i] = ExitButtonBitmap[i];
		m_ExitButtonBitmapDrawMode[i] = DrawMode[i];
	}
	return TRUE;
}


BOOL CRTDialog::RTDrawTitleBarButtons(CDC* pDC)
{	
	//取得标题栏的位置
	CRect rtWnd;
	CRect rtTitle;
	GetWindowRect(&rtWnd);
	rtTitle.left = GetSystemMetrics(SM_CXDLGFRAME);
	rtTitle.top = GetSystemMetrics(SM_CYDLGFRAME);
	rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXDLGFRAME);
	rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYCAPTION);
	
	CRect rtButtons;

	//画标题栏按扭
	DWORD dwStyle = GetStyle();
	
	CBitmap* pCloseBox = NULL;
	CBitmap* pMaximizeBox = NULL;
	CBitmap* pMinimizeBox = NULL;

	if(TRUE)
	{
		if(m_ExitButtonState == StateNormal)
		{
			pCloseBox = m_ExitButtonBitmap[BMP_NORMAL];
		}
		else if(m_ExitButtonState == StateDown)
		{
			pCloseBox = m_ExitButtonBitmap[BMP_DOWN];
		}
		else if(m_ExitButtonState == StateFocus)
		{
			pCloseBox = m_ExitButtonBitmap[BMP_FOCUS];
		}
	}

	if(WS_MAXIMIZEBOX & dwStyle)
	{
		if(IsZoomed())
		{
			if(m_MaximizeButtonState == StateNormal)
			{
				pMaximizeBox = m_RestoreButtonBitmap[BMP_NORMAL];
			}
			else if(m_MaximizeButtonState == StateDown)
			{
				pMaximizeBox = m_RestoreButtonBitmap[BMP_DOWN];
			}
			else if(m_MaximizeButtonState == StateFocus)
			{
				pMaximizeBox = m_RestoreButtonBitmap[BMP_FOCUS];
			}
		}
		else
		{
			if(m_MaximizeButtonState == StateNormal)
			{
				pMaximizeBox = m_MaximizeButtonBitmap[BMP_NORMAL];
			}
			else if(m_MaximizeButtonState == StateDown)
			{
				pMaximizeBox = m_MaximizeButtonBitmap[BMP_DOWN];
			}
			else if(m_MaximizeButtonState == StateFocus)
			{
				pMaximizeBox = m_MaximizeButtonBitmap[BMP_FOCUS];
			}
		}
	}
	else if(WS_MINIMIZEBOX & dwStyle)
	{
		if(IsZoomed())
		{
			pMaximizeBox = m_RestoreButtonBitmap[BMP_DISABLE];
		}
		else
		{
			pMaximizeBox = m_MaximizeButtonBitmap[BMP_DISABLE];
		}
	}

	if(WS_MINIMIZEBOX & dwStyle)
	{
		if(m_MinimizeButtonState == StateNormal)
		{
			pMinimizeBox = m_MinimizeButtonBitmap[BMP_NORMAL];
		}
		else if(m_MinimizeButtonState == StateDown)
		{
			pMinimizeBox = m_MinimizeButtonBitmap[BMP_DOWN];
		}
		else if(m_MinimizeButtonState == StateFocus)
		{
			pMinimizeBox = m_MinimizeButtonBitmap[BMP_FOCUS];
		}
	}
	else if(WS_MAXIMIZEBOX & dwStyle)
	{
		pMinimizeBox = m_MinimizeButtonBitmap[BMP_DISABLE];
	}


	//重画关闭button
	if(dwStyle & WS_SYSMENU)
	{
		rtButtons.left = rtTitle.right - rtTitle.Height();
		rtButtons.top = rtTitle.top + 2;
		rtButtons.right = rtTitle.right - 2;
		rtButtons.bottom = rtTitle.bottom - 2;
		CRTDraw::RTDrawBitmap(pDC,&rtButtons,pCloseBox,CRTDraw::DrawModeAllStretch);
	}
	//重画最大化/恢复button
	if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
	{
		rtButtons.right = rtButtons.left - 2;
		rtButtons.left = rtButtons.left - rtTitle.Height();
		CRTDraw::RTDrawBitmap(pDC,&rtButtons,pMaximizeBox,CRTDraw::DrawModeAllStretch);
	}
	//重画最小化button
	if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
	{
		rtButtons.right = rtButtons.left;
		rtButtons.left = rtButtons.left - rtTitle.Height() + 2;
		CRTDraw::RTDrawBitmap(pDC,&rtButtons,pMinimizeBox,CRTDraw::DrawModeAllStretch);
	}
	return TRUE;
}

LRESULT CRTDialog::OnRTNcRButtonUp(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_NCRBUTTONUP,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_NCRBUTTONUP,wParam,lParam);

	CWindowDC dc(this);
	RTDrawTitleBar(&dc,m_bActive);
	return CDialog::WindowProc(WM_NCRBUTTONUP,wParam,lParam);
}

LRESULT CRTDialog::OnRTSetIcon(WPARAM wParam, LPARAM lParam)
{
	LRESULT result = CDialog::WindowProc(WM_SETICON,wParam,lParam);
	if(!m_bEnableSkin)return result;
	if(!m_bEnableTitleBar)return result;

	if(IsWindow(m_hWnd))
	{
		CWindowDC dc(this);
		RTDrawTitleBar(&dc,m_bActive);
	}
	return result;
}

LRESULT CRTDialog::OnRTNcMouseMove(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_NCMOUSEMOVE,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_NCMOUSEMOVE,wParam,lParam);

	LRESULT result = 0;
	CWindowDC dc(this);
	switch(wParam)
	{
	case HTMAXBUTTON:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_MaximizeButtonState != StateFocus)
			{
				m_MaximizeButtonState = StateFocus;
				m_MinimizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == MaximizeButton)
			{
				if(m_MaximizeButtonState != StateDown)
				{
					m_MaximizeButtonState = StateDown;
					RTDrawTitleBarButtons(&dc);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MinimizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		break;
	case HTMINBUTTON:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_MinimizeButtonState != StateFocus)
			{
				m_MinimizeButtonState = StateFocus;
				m_MaximizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == MinimizeButton)
			{
				if(m_MinimizeButtonState != StateDown)
				{
					m_MinimizeButtonState = StateDown;
					RTDrawTitleBarButtons(&dc);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MaximizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		break;
	case HTCLOSE:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_ExitButtonState != StateFocus)
			{
				m_ExitButtonState = StateFocus;
				m_MaximizeButtonState = StateNormal;
				m_MinimizeButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == ExitButton)
			{
				if(m_ExitButtonState != StateDown)
				{
					m_ExitButtonState = StateDown;
					RTDrawTitleBarButtons(&dc);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MaximizeButtonState = StateNormal;
				m_MinimizeButtonState = StateNormal;
				RTDrawTitleBarButtons(&dc);
			}
		}
		break;
	default:
		if(m_ExitButtonState != StateNormal || m_MinimizeButtonState != StateNormal || m_MaximizeButtonState != StateNormal)
		{
			m_MaximizeButtonState = StateNormal;
			m_MinimizeButtonState = StateNormal;
			m_ExitButtonState = StateNormal;
			RTDrawTitleBarButtons(&dc);
		}
		result = 0;//DefWindowProc(WM_NCMOUSEMOVE,wParam,lParam);
		break;
	}
	return result;
}

LRESULT CRTDialog::OnRTNcLMouseDown(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_NCLBUTTONDOWN,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_NCLBUTTONDOWN,wParam,lParam);

	LRESULT result = 0;
	CWindowDC dc(this);
	switch(wParam)
	{
	case HTMAXBUTTON:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = MaximizeButton;
		m_MaximizeButtonState = StateDown;
		RTDrawTitleBarButtons(&dc);
		SetCapture();
		break;
	case HTMINBUTTON:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = MinimizeButton;
		m_MinimizeButtonState = StateDown;
		RTDrawTitleBarButtons(&dc);
		SetCapture();
		break;
	case HTCLOSE:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = ExitButton;
		m_ExitButtonState = StateDown;
		RTDrawTitleBarButtons(&dc);
		SetCapture();
		break;
	default:
		result = CDialog::WindowProc(WM_NCLBUTTONDOWN,wParam,lParam);
		break;
	}

	RTDrawTitleBar(&dc,m_bActive);
	return result;
}

LRESULT CRTDialog::OnRTNcLMouseUp(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);

	LRESULT result = 0;
	if(m_NcMouseState == MouseStateNormal)
	{
		return CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
	}
	m_NcMouseState = MouseStateNormal;
	ReleaseCapture();

	if(wParam == HTMAXBUTTON)
	{
		if(m_SelTitleButton == MaximizeButton)
		{
			CWindowDC dc(this);
			m_SelTitleButton = NoneButton;
			m_MaximizeButtonState = StateNormal;
			RTDrawTitleBarButtons(&dc);
			if(IsZoomed())
			{
				SendMessage(WM_SYSCOMMAND, SC_RESTORE, lParam);
			}
			else
			{
				SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE,lParam);
			}
		}
	}
	else if(wParam == HTMINBUTTON)
	{
		if(m_SelTitleButton == MinimizeButton)
		{
			CWindowDC dc(this);
			m_SelTitleButton = NoneButton;
			m_MinimizeButtonState = StateNormal;
			RTDrawTitleBarButtons(&dc);
			SendMessage(WM_SYSCOMMAND, SC_MINIMIZE,lParam);
		}
	}
	else if(wParam == HTCLOSE)
	{
		if(m_SelTitleButton == ExitButton)
		{
			CWindowDC dc(this);
			m_SelTitleButton = NoneButton;
			m_ExitButtonState = StateNormal;
			RTDrawTitleBarButtons(&dc);
			SendMessage(WM_CLOSE);
		}
	}
	else
	{
		m_MinimizeButtonState = StateNormal;
		m_MaximizeButtonState = StateNormal;
		m_ExitButtonState = StateNormal;
		result = CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
	}
	return result;
}

LRESULT CRTDialog::OnRTMouseMove(WPARAM wParam, LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_MOUSEMOVE,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_MOUSEMOVE,wParam,lParam);

	if(m_NcMouseState != MouseStateNormal)
	{
		CRect rtWnd;
		GetWindowRect(&rtWnd);
		CPoint point(lParam);
		ClientToScreen(&point);
		UINT hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
		return OnRTNcMouseMove(hit,MAKELPARAM(point.x,point.y));
	}
	else
	{
		if(m_ExitButtonState != StateNormal || m_MinimizeButtonState != StateNormal || m_MaximizeButtonState != StateNormal)
		{
			CWindowDC dc(this);
			m_MaximizeButtonState = StateNormal;
			m_MinimizeButtonState = StateNormal;
			m_ExitButtonState = StateNormal;
			RTDrawTitleBarButtons(&dc);
		}
	}
	return CDialog::WindowProc(WM_MOUSEMOVE,wParam,lParam);
}

LRESULT CRTDialog::OnRTLButtonUp(WPARAM wParam, LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_LBUTTONUP,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_LBUTTONUP,wParam,lParam);

	if(m_NcMouseState != MouseStateNormal)
	{
		CRect rtWnd;
		GetWindowRect(&rtWnd);
		CPoint point(lParam);
		ClientToScreen(&point);
		UINT hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));	
		return OnRTNcLMouseUp(hit,MAKELPARAM(point.x,point.y));
	}
	return CDialog::WindowProc(WM_LBUTTONUP,wParam,lParam);
}

LRESULT CRTDialog::OnRTEraseBackGround(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin || m_TitleBarBitmap[BMP_BACK] == NULL || !m_bEnableBack)
		return CDialog::WindowProc(WM_ERASEBKGND,wParam,lParam);

	CDC *pDC = CDC::FromHandle((HDC)wParam);
	CRect rtClient;
	GetClientRect(&rtClient);
	CRTDraw::RTDrawBitmap(pDC,&rtClient,m_TitleBarBitmap[BMP_BACK],m_TitleBarBitmapDrawMode[BMP_BACK]);
	return TRUE;
}

LRESULT CRTDialog::OnRTNcRButtonDown(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_NCRBUTTONDOWN,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_NCRBUTTONDOWN,wParam,lParam);

	return 0;
}

LRESULT CRTDialog::OnRTSysCommand(WPARAM wParam,LPARAM lParam)
{
	if(!m_bEnableSkin)return CDialog::WindowProc(WM_SYSCOMMAND,wParam,lParam);
	if(!m_bEnableTitleBar)return CDialog::WindowProc(WM_SYSCOMMAND,wParam,lParam);

	CWindowDC dc(this);
	RTDrawTitleBar(&dc,m_bActive);
	
	return CDialog::WindowProc(WM_SYSCOMMAND,wParam,lParam);
}

LRESULT CRTDialog::OnRTSetCursor(WPARAM wParam,LPARAM lParam)
{
	LRESULT rt = CDialog::WindowProc(WM_SETCURSOR,wParam,lParam); 
	if(!m_bEnableSkin)return rt;
	if(!m_bEnableTitleBar)return rt;

	UINT nHitTest = LOWORD(lParam);
	if(m_bEnableSkin)
	{
		CWindowDC dc(this);
		switch(nHitTest)
		{
		case HTBORDER:
		case HTLEFT:
		case HTRIGHT:
		case HTTOP:
		case HTBOTTOM:
		case HTBOTTOMLEFT:
		case HTBOTTOMRIGHT:
		case HTTOPLEFT:
		case HTTOPRIGHT:
			RTDrawTitleBar(&dc,m_bActive);
			break;
		default:
			break;
		}
		
	}

	return rt;
}

LRESULT CRTDialog::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_INITMENUPOPUP:
		if(m_bEnableSkin && m_bEnableTitleBar)
		{
			CWindowDC dc(this);
			RTDrawTitleBar(&dc,m_bActive);
		}
		break;
	case WM_NCPAINT:
		return OnRTNcPaint(wParam,lParam);
	case WM_NCACTIVATE:
		return OnRTNcActive(wParam,lParam);
	case WM_ACTIVATE:
		return OnRTActive(wParam,lParam);
	case WM_ACTIVATEAPP:
		return OnRTActiveApp(wParam,lParam);
	case WM_NOTIFY:
		return OnRTNodify(wParam,lParam);
	case WM_SETTEXT:
		return OnRTSetText(wParam,lParam);
	case WM_SETICON:
		return OnRTSetIcon(wParam,lParam);
	case WM_NCMOUSEMOVE:
		return OnRTNcMouseMove(wParam,lParam);
	case WM_NCLBUTTONDOWN:
		return OnRTNcLMouseDown(wParam,lParam);
	case WM_NCLBUTTONUP:
		OnRTNcLMouseUp(wParam,lParam);
	case WM_LBUTTONUP:
		return OnRTLButtonUp(wParam,lParam);
	case WM_MOUSEMOVE:
		return OnRTMouseMove(wParam,lParam);
	case WM_ERASEBKGND:
		return OnRTEraseBackGround(wParam,lParam);
	case WM_NCRBUTTONUP:
		return OnRTNcRButtonUp(wParam,lParam);
	case WM_NCRBUTTONDOWN:
		return OnRTNcRButtonDown(wParam,lParam);
	case WM_SYSCOMMAND:
		return OnRTSysCommand(wParam,lParam);
	case WM_SETCURSOR:
		return OnRTSetCursor(wParam,lParam);
	default:
		break;
	}
	return CDialog::WindowProc(message, wParam, lParam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -