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

📄 hotcombobox.cpp

📁 一个有VC++开发的计算建筑工程行业软件 可以计算挖孔桩的方量,方格网的计算,支持保存和加载数据
💻 CPP
字号:
// HotComboBox.cpp : implementation file
//

#include "stdafx.h"
#include "HotComboBox.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHotComboBox

CHotComboBox::CHotComboBox()
{
	m_clr3DFace = GetSysColor(COLOR_3DFACE);
	m_clr3DLight = GetSysColor(COLOR_3DLIGHT);
	m_clr3DHilight = GetSysColor(COLOR_3DHILIGHT);
	m_clr3DShadow = GetSysColor(COLOR_3DSHADOW);
	m_clr3DDkShadow = GetSysColor(COLOR_3DDKSHADOW);

	m_fGotFocus = false;
	m_fTimerSet = false;
}

CHotComboBox::~CHotComboBox()
{
}


BEGIN_MESSAGE_MAP(CHotComboBox, CComboBox)
	//{{AFX_MSG_MAP(CHotComboBox)
	ON_WM_PAINT()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	ON_WM_MOUSEMOVE()
	ON_WM_TIMER()
	ON_WM_NCMOUSEMOVE()
	ON_WM_SYSCOLORCHANGE()
	ON_CONTROL_REFLECT(CBN_SETFOCUS, OnSetfocus)
	ON_CONTROL_REFLECT(CBN_KILLFOCUS, OnKillfocus)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHotComboBox message handlers

void CHotComboBox::OnPaint() 
{
	Default();

	if (m_fGotFocus) {
		DrawBorder();
	} else {
		DrawBorder(false);
	}
}

void CHotComboBox::OnSetFocus(CWnd* pOldWnd) 
{
	CComboBox::OnSetFocus(pOldWnd);
	
	m_fGotFocus = true;
	DrawBorder();
}

void CHotComboBox::OnKillFocus(CWnd* pNewWnd) 
{
	CComboBox::OnKillFocus(pNewWnd);
	
	m_fGotFocus = false;
	DrawBorder(false);
}

void CHotComboBox::OnMouseMove(UINT nFlags, CPoint point) 
{
	if (!m_fGotFocus) {
		if (!m_fTimerSet) {
			DrawBorder();
			SetTimer(1, 10, NULL);
			m_fTimerSet = true;
		}
	}
	
	CComboBox::OnMouseMove(nFlags, point);
}

void CHotComboBox::OnTimer(UINT nIDEvent) 
{
	POINT pt;
	GetCursorPos(&pt);
	CRect rcItem;
	GetWindowRect(&rcItem);

	if(!rcItem.PtInRect(pt)) {
		KillTimer(1);

		m_fTimerSet = false;

		if (!m_fGotFocus) {
			DrawBorder(false);
		}
		return;
	}
	
	CComboBox::OnTimer(nIDEvent);
}

void CHotComboBox::OnNcMouseMove(UINT nHitTest, CPoint point) 
{
	if (!m_fGotFocus) {
		if (!m_fTimerSet) {
			DrawBorder();
			SetTimer(1, 10, NULL);
			m_fTimerSet = true;
		}
	}
	
	CComboBox::OnNcMouseMove(nHitTest, point);
}

void CHotComboBox::OnSysColorChange() 
{
	CComboBox::OnSysColorChange();
	
	m_clr3DFace = GetSysColor(COLOR_3DFACE);
	m_clr3DLight = GetSysColor(COLOR_3DLIGHT);
	m_clr3DHilight = GetSysColor(COLOR_3DHILIGHT);
	m_clr3DShadow = GetSysColor(COLOR_3DSHADOW);
	m_clr3DDkShadow = GetSysColor(COLOR_3DDKSHADOW);
}

void CHotComboBox::OnSetfocus() 
{
	m_fGotFocus = true;
	DrawBorder();
}

void CHotComboBox::OnKillfocus() 
{
	m_fGotFocus = false;
	DrawBorder(false);
}

void CHotComboBox::DrawBorder(bool fHot)
{
	CDC *pDC = GetDC();
	CRect rcItem;
	DWORD dwExStyle = GetExStyle();

	GetWindowRect(&rcItem);
	ScreenToClient(&rcItem);

	if (!IsWindowEnabled()) {
		fHot = true;
	}

	// make sure that rcItem start at the smallest point
	if (dwExStyle & (WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME)) {
		if (dwExStyle & WS_EX_STATICEDGE) {
			rcItem.DeflateRect(1, 1, 0, 0);
		}
		if (dwExStyle & WS_EX_DLGMODALFRAME) {
			rcItem.DeflateRect(1, 1, 0, 0);
		}
		rcItem.DeflateRect(1, 1, 0, 0);
	} else {
		rcItem.DeflateRect(1, 1);
	}

	if (fHot) {
		pDC->Draw3dRect(rcItem, m_clr3DDkShadow, m_clr3DLight);
		rcItem.InflateRect(1, 1);
		pDC->Draw3dRect(rcItem, m_clr3DShadow, m_clr3DHilight);

		if (dwExStyle & WS_EX_DLGMODALFRAME) {
			pDC->Draw3dRect(rcItem, m_clr3DShadow, m_clr3DFace);
			rcItem.InflateRect(1, 1, 0, 0);
			if (dwExStyle & WS_EX_STATICEDGE) {
				rcItem.DeflateRect(0, 0, 2, 2);
			} else {
				rcItem.DeflateRect(0, 0, 1, 1);
			}
			pDC->Draw3dRect(rcItem, m_clr3DDkShadow, m_clr3DDkShadow);
		}

		if (dwExStyle & WS_EX_STATICEDGE) {
			if (dwExStyle & WS_EX_DLGMODALFRAME) {
				rcItem.InflateRect(1, 1);
			} else {
				rcItem.InflateRect(1, 1, 0, 0);
			}
			pDC->Draw3dRect(rcItem, m_clr3DShadow, m_clr3DHilight);
		}
	} else {
		pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
		rcItem.InflateRect(1, 1);
		pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);

		if (dwExStyle & WS_EX_DLGMODALFRAME) {
			rcItem.InflateRect(1, 1, 0, 0);
			if (dwExStyle & WS_EX_STATICEDGE) {
				rcItem.InflateRect(0, 0, 1, 1);
				pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
				rcItem.DeflateRect(0, 0, 3, 3);
			} else {
				rcItem.DeflateRect(0, 0, 1, 1);
			}
			pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
		}

		if (dwExStyle & WS_EX_STATICEDGE) {
			if (dwExStyle & WS_EX_DLGMODALFRAME) {
				rcItem.InflateRect(1, 1);
			} else {
				rcItem.InflateRect(1, 1, 0, 0);
			}
			pDC->Draw3dRect(rcItem, m_clr3DFace, m_clr3DFace);
		}
	}

	ReleaseDC(pDC);
}

⌨️ 快捷键说明

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