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

📄 cxpbutton.c

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 C
字号:



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "CXPBase.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 绘制按钮
VOID CXPDrawPushButton(PCCLASSXP pCxp)
{
	UINT i;
	HDC hDC;
	RECT rtRect;
	PBYTE pbDib;
	TCHAR tzText[256];
	BITMAPINFOHEADER biBtn;

	// 开始绘制
	_CXPBeginDraw(hDC, FALSE, FALSE);

	// 选择图像
	if (_CXPGetState(CXPS_DISABLED))
	{
		i = 1;
	}
	else if (_CXPGetState(CXPS_PRESSED | CXPS_CHECKED | CXPS_INDETERMINATE))
	{
		i = 2;
	}
	else if (_CXPGetState(CXPS_HOTLIGHT))
	{
		i = 3;
	}
	else if (_CXPGetState(CXPS_FOCUS | CXPS_DEFAULT))
	{
		i = 0;
	}
	else
	{
		i = 4;
	}

	// 绘制图像
	biBtn = c_biCXPCheck;
	biBtn.biWidth = rtRect.right;
	biBtn.biHeight = rtRect.bottom;
	biBtn.biSizeImage = rtRect.right * rtRect.bottom * 4;
	pbDib = (PBYTE) _HeapAlloc(biBtn.biSizeImage);
	if (pbDib)
	{
		CXPDibBlendExt((PBYTE) pbDib, rtRect.right, rtRect.bottom, (PBYTE) c_crCXPPushButton[i], CXPW_BTN, CXPH_BTN);
		_DrawDIB(0, 0, rtRect.right, rtRect.bottom, pbDib, &biBtn);
		_HeapFree(pbDib);
	}

	// 绘制焦点框
	InflateRect(&rtRect, -3, -3);
	if (_CXPGetState(CXPS_FOCUS))
	{
		DrawFocusRect(hDC, &rtRect);
	}

	// 绘制文字
	if (GetWindowText(pCxp->hWnd, tzText, sizeof(tzText)))
	{
		i = _CXPGetStyle(BS_MULTILINE) ? (DT_WORDBREAK | DT_EDITCONTROL) : (DT_WORDBREAK | DT_EDITCONTROL | DT_SINGLELINE);
		i |= _TriIf(_CXPGetStyle(BS_LEFT), _CXPGetStyle(BS_RIGHT), DT_LEFT, DT_RIGHT, DT_CENTER);
		i |= _TriIf(_CXPGetStyle(BS_TOP), _CXPGetStyle(BS_BOTTOM), DT_TOP, DT_BOTTOM, DT_VCENTER);

		_ExIf(_CXPGetState(CXPS_PRESSED), OffsetRect(&rtRect, 1, 1));
		_DrawText(tzText, _CXPGetState(CXPS_INDETERMINATE | CXPS_DISABLED) ? CXPR_DTEXT: CXPR_TEXT, i);
	}

	// 结束绘制
	_CXPEndDraw(hDC);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 绘制选框
VOID CXPDrawCheckBox(PCCLASSXP pCxp)
{
	UINT i;
	HDC hDC;
	RECT rtRect;
	PBYTE pbDib;
	TCHAR tzText[256];
	COLORREF crDib[CXPW_CHK * CXPH_CHK];

	// 开始绘制
	_CXPBeginDraw(hDC, TRUE, FALSE);

	// 选择图像
	if (_CXPGetState(CXPS_DISABLED))
	{
		i = 0;
	}
	else if (_CXPGetState(CXPS_PRESSED))
	{
		i = 1;
	}
	else if (_CXPGetState(CXPS_HOTLIGHT))
	{
		i = 2;
	}
	else
	{
		i = 3;
	}

	_ExIf(_CXPGetState(CXPS_CHECKED), i += 4);

	if ((_CXPGetStyle(BS_TYPEMASK) == BS_RADIOBUTTON) || (_CXPGetStyle(BS_TYPEMASK) == BS_AUTORADIOBUTTON))
	{
		pbDib = (PBYTE) crDib;
		CXPDibBlend(pbDib, (PBYTE) c_crCXPRadioBox[i], CXPW_CHK * CXPH_CHK);
	}
	else
	{
		_ExIf(_CXPGetState(CXPS_INDETERMINATE), i += 8);
		pbDib = (PBYTE) c_crCXPCheckBox[i];
	}

	// 绘制图象
	_DrawDIB(0, (rtRect.bottom - CXPH_CHK) / 2, CXPW_CHK, CXPH_CHK, pbDib, &c_biCXPCheck);

	// 绘制文字
	if (GetWindowText(pCxp->hWnd, tzText, sizeof(tzText)))
	{
		rtRect.left = (CXPW_CHK + 5);
		_DrawFocusText(tzText, _CXPGetState(CXPS_DISABLED) ? CXPR_DTEXT: CXPR_TEXT);
	}

	// 结束绘制
	_CXPEndDraw(hDC);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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