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

📄 rtwnd.cpp

📁 vc++编写的界面源代码,对C++爱好者是很发的帮助。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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;
}


BOOL CRTWnd::OnRTSetIcon(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	*pResult = DefWindowProc(hWnd,uMsg,wParam,lParam);
	
	if(IsWindow(hWnd))
	{
		HDC hDC = GetWindowDC(hWnd);
		if(hDC != NULL)
		{
			CDC *pDC = CDC::FromHandle(hDC);
			RTDrawTitleBar(pDC,m_bActive,hWnd);
			pDC->Detach();
			ReleaseDC(hWnd,hDC);
		}
	}
	return TRUE;
}

BOOL CRTWnd::OnRTNcMouseMove(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	*pResult = 0;
	
	HDC hDC = GetWindowDC(hWnd);
	if(hDC == NULL)return TRUE;

	CDC* pDC = CDC::FromHandle(hDC);

	switch(wParam)
	{
	case HTMAXBUTTON:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_MaximizeButtonState != StateFocus)
			{
				m_MaximizeButtonState = StateFocus;
				m_MinimizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == MaximizeButton)
			{
				if(m_MaximizeButtonState != StateDown)
				{
					m_MaximizeButtonState = StateDown;
					RTDrawTitleBarButtons(pDC,hWnd);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MinimizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		break;
	case HTMINBUTTON:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_MinimizeButtonState != StateFocus)
			{
				m_MinimizeButtonState = StateFocus;
				m_MaximizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == MinimizeButton)
			{
				if(m_MinimizeButtonState != StateDown)
				{
					m_MinimizeButtonState = StateDown;
					RTDrawTitleBarButtons(pDC,hWnd);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MaximizeButtonState = StateNormal;
				m_ExitButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		break;
	case HTCLOSE:
		if(m_NcMouseState == MouseStateNormal)
		{
			if(m_ExitButtonState != StateFocus)
			{
				m_ExitButtonState = StateFocus;
				m_MaximizeButtonState = StateNormal;
				m_MinimizeButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		else if(m_NcMouseState == MouseStateDown)
		{
			if(m_SelTitleButton == ExitButton)
			{
				if(m_ExitButtonState != StateDown)
				{
					m_ExitButtonState = StateDown;
					RTDrawTitleBarButtons(pDC,hWnd);
				}
			}
			else if(m_SelTitleButton != NoneButton)
			{
				m_MaximizeButtonState = StateNormal;
				m_MinimizeButtonState = StateNormal;
				RTDrawTitleBarButtons(pDC,hWnd);
			}
		}
		break;
	default:
		if(m_ExitButtonState != StateNormal || m_MinimizeButtonState != StateNormal || m_MaximizeButtonState != StateNormal)
		{
			m_MaximizeButtonState = StateNormal;
			m_MinimizeButtonState = StateNormal;
			m_ExitButtonState = StateNormal;
			RTDrawTitleBarButtons(pDC,hWnd);
		}
		break;
	}
	pDC->Detach();
	ReleaseDC(hWnd,hDC);

	return TRUE;
}

BOOL CRTWnd::OnRTNcLMouseDown(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	HDC hDC = GetWindowDC(hWnd);
	if(hDC == NULL)return TRUE;

	CDC *pDC = CDC::FromHandle(hDC);

	switch(wParam)
	{
	case HTMAXBUTTON:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = MaximizeButton;
		m_MaximizeButtonState = StateDown;
		RTDrawTitleBarButtons(pDC,hWnd);
		SetCapture(hWnd);
		break;
	case HTMINBUTTON:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = MinimizeButton;
		m_MinimizeButtonState = StateDown;
		RTDrawTitleBarButtons(pDC,hWnd);
		SetCapture(hWnd);
		break;
	case HTCLOSE:
		m_NcMouseState = MouseStateDown;
		m_SelTitleButton = ExitButton;
		m_ExitButtonState = StateDown;
		RTDrawTitleBarButtons(pDC,hWnd);
		SetCapture(hWnd);
		break;
	default:
		pDC->Detach();
		ReleaseDC(hWnd,hDC);
		return FALSE;
		break;
	}
	pDC->Detach();
	ReleaseDC(hWnd,hDC);
	return TRUE;
}

BOOL CRTWnd::OnRTNcLMouseUp(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	if(m_NcMouseState == MouseStateNormal)
	{
		return FALSE;
	}
	m_NcMouseState = MouseStateNormal;
	ReleaseCapture();

	pResult = 0;
	HDC hDC = GetWindowDC(hWnd);
	CDC* pDC = CDC::FromHandle(hDC);

	if(wParam == HTMAXBUTTON)
	{
		if(m_SelTitleButton == MaximizeButton)
		{
			m_SelTitleButton = NoneButton;
			m_MaximizeButtonState = StateNormal;
			RTDrawTitleBarButtons(pDC,hWnd);
			if(IsZoomed(hWnd))
			{
				SendMessage(hWnd,WM_SYSCOMMAND, SC_RESTORE, lParam);
			}
			else
			{
				SendMessage(hWnd,WM_SYSCOMMAND, SC_MAXIMIZE,lParam);
			}
		}
	}
	else if(wParam == HTMINBUTTON)
	{
		if(m_SelTitleButton == MinimizeButton)
		{
			m_SelTitleButton = NoneButton;
			m_MinimizeButtonState = StateNormal;
			RTDrawTitleBarButtons(pDC,hWnd);
			SendMessage(hWnd,WM_SYSCOMMAND, SC_MINIMIZE,lParam);
		}
	}
	else if(wParam == HTCLOSE)
	{
		if(m_SelTitleButton == ExitButton)
		{
			m_SelTitleButton = NoneButton;
			m_ExitButtonState = StateNormal;
			SendMessage(hWnd,WM_SYSCOMMAND,SC_CLOSE,lParam);
		}
	}
	else
	{
		m_MinimizeButtonState = StateNormal;
		m_MaximizeButtonState = StateNormal;
		m_ExitButtonState = StateNormal;
		pDC->Detach();
		ReleaseDC(hWnd,hDC);
		return FALSE;
	}
	pDC->Detach();
	ReleaseDC(hWnd,hDC);
	return TRUE;
}

BOOL CRTWnd::OnRTMouseMove(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	if(m_NcMouseState != MouseStateNormal)
	{
		CRect rtWnd;
		GetWindowRect(hWnd,&rtWnd);
		CPoint point(lParam);
		ClientToScreen(hWnd,&point);
		UINT hit = (UINT)DefWindowProc(hWnd,WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
		return OnRTNcMouseMove(hWnd,WM_NCMOUSEMOVE,hit,MAKELPARAM(point.x,point.y),pResult);
	}
	return FALSE;
}

BOOL CRTWnd::OnRTLButtonUp(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;
	
	if(m_NcMouseState != MouseStateNormal)
	{
		CRect rtWnd;
		GetWindowRect(hWnd,&rtWnd);
		CPoint point(lParam);
		ClientToScreen(hWnd,&point);
		UINT hit = (UINT)DefWindowProc(hWnd,WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));	
		return OnRTNcLMouseUp(hWnd,WM_NCLBUTTONUP,hit,MAKELPARAM(point.x,point.y),pResult);
	}
	return FALSE;
}



BOOL CRTWnd::RTDrawDefaultMenu(LPARAM lParam,HRGN hRgn,HWND hWnd)
{
	HMENU hMenu = GetMenu(hWnd);
	if(hMenu == NULL)return TRUE;
	
	CRect rtMenu;
	CRect rtWnd;
	
	GetWindowRect(hWnd,&rtWnd);
	rtMenu.left = GetSystemMetrics(SM_CXFRAME);
	rtMenu.top = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CXFRAME) + 1;
	rtMenu.right = rtWnd.Width() - GetSystemMetrics(SM_CXFRAME);
	rtMenu.bottom = rtMenu.top +  GetSystemMetrics(SM_CYMENU);

	UINT ItemCount = GetMenuItemCount(hMenu);

	int PrevTop = rtMenu.top;
	int PrevLeft = rtMenu.left;
	int MenuItemHeight = GetSystemMetrics(SM_CYMENU);
	CRect rtMenuItem;
	
	for(UINT items = 0; items < ItemCount; items++)
	{
		
		GetMenuItemRect(hWnd,hMenu,items,&rtMenuItem);
		HRGN rgn = CreateRectRgn(rtMenuItem.left,rtMenuItem.top,rtMenuItem.right,rtMenuItem.bottom);
		if(hRgn != NULL)
		{
			if(NULLREGION != CombineRgn(rgn,rgn,hRgn,RGN_AND))
			{
				DefWindowProc(hWnd,WM_NCPAINT,(WPARAM)(rgn),lParam);
				DeleteObject(rgn);
			}
		}
		
	}
	return TRUE;
}
BOOL CRTWnd::OnRTSetCursor(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	*pResult = DefWindowProc(hWnd,uMsg,wParam,lParam);
	
	UINT uHitTest = LOWORD(lParam);

	HDC hDC = GetWindowDC(hWnd);
	CDC *pDC = CDC::FromHandle(hDC);
	
	switch(uHitTest)
	{
	case HTBORDER:
	case HTLEFT:
	case HTRIGHT:
	case HTTOP:
	case HTBOTTOM:
	case HTBOTTOMLEFT:
	case HTBOTTOMRIGHT:
	case HTTOPLEFT:
	case HTTOPRIGHT:
		RTDrawTitleBar(pDC,m_bActive,hWnd);
		break;
	default:
		break;
	}
	pDC->Detach();
	ReleaseDC(hWnd,hDC);
	return TRUE;
}

BOOL CRTWnd::OnRTSysCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;
	
	HDC hDC = GetWindowDC(hWnd);
	if(hDC != NULL)
	{
		CDC *pDC = CDC::FromHandle(hDC);
		RTDrawTitleBar(pDC,m_bActive,hWnd);
		pDC->Detach();
		ReleaseDC(hWnd,hDC);
	}
	return FALSE;
}


BOOL CRTWnd::OnRTNcHitTest(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	return FALSE;
}

BOOL CRTWnd::OnRTInitMenuPop(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	if(m_bUsedDefTitleBar)return FALSE;

	HDC hDC = GetWindowDC(hWnd);
	if(hDC != NULL)
	{
		CDC *pDC = CDC::FromHandle(hDC);
		RTDrawTitleBar(pDC,m_bActive,hWnd);
		pDC->Detach();
		ReleaseDC(hWnd,hDC);
	}
	return FALSE;
}
BOOL CRTWnd::RTWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
{
	BOOL bPass = FALSE;
	
	if(!m_bUseRTStyle)return bPass;

	switch(uMsg)
	{
	case WM_NCPAINT:
		bPass = OnRTNcPaint(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_NCMOUSEMOVE:
		bPass = OnRTNcMouseMove(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_NCLBUTTONDOWN:
		bPass = OnRTNcLMouseDown(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_NCLBUTTONUP:
		bPass = OnRTNcLMouseUp(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_NCACTIVATE:
		bPass = OnRTNcActive(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_ACTIVATE:
		bPass = OnRTActive(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_ACTIVATEAPP:
		bPass = OnRTActiveApp(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_SYSCOMMAND:
		bPass = OnRTSysCommand(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_INITMENUPOPUP:
		bPass = OnRTInitMenuPop(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_NCHITTEST:
		bPass = OnRTNcHitTest(hWnd,uMsg,wParam,lParam,pResult);
		break;
	case WM_SETCURSOR:
		bPass = OnRTSetCursor(hWnd,uMsg,wParam,lParam,pResult);
		break;
	default:
		break;
	}

	return bPass;
}


⌨️ 快捷键说明

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