Добавлена папка source в CristalDiskMark

This commit is contained in:
2026-05-29 13:04:54 +07:00
commit bdc2295ee4
240 changed files with 94035 additions and 0 deletions
@@ -0,0 +1,203 @@
/*---------------------------------------------------------------------------*/
// Author : hiyohiyo
// Mail : hiyohiyo@crystalmark.info
// Web : https://crystalmark.info/
// License : MIT License
/*---------------------------------------------------------------------------*/
#include "stdafx.h"
#include "HeaderCtrlFx.h"
#include "OsInfoFx.h"
IMPLEMENT_DYNAMIC(CHeaderCtrlFx, CHeaderCtrl)
CHeaderCtrlFx::CHeaderCtrlFx()
{
m_X = 0;
m_Y = 0;
m_TextColor = RGB(0, 0, 0);
m_LineColor = RGB(224, 224, 224);
m_BkColor = RGB(255, 255, 255);
m_ZoomRatio = 1.0;
m_FontRatio = 1.0;
m_FontSize = 12;
m_BkDC = NULL;
m_CtrlBitmap = NULL;
m_bHighContrast = FALSE;
m_bDarkMode = FALSE;
m_RenderMode = SystemDraw;
}
CHeaderCtrlFx::~CHeaderCtrlFx()
{
}
BEGIN_MESSAGE_MAP(CHeaderCtrlFx, CHeaderCtrl)
ON_WM_PAINT()
ON_MESSAGE(HDM_LAYOUT, OnLayout)
END_MESSAGE_MAP()
void CHeaderCtrlFx::InitControl(int x, int y, double zoomRatio, CDC* bkDC, CBitmap* ctrlBitmap, COLORREF textColor, COLORREF bkColor, COLORREF lineColor, int renderMode, BOOL bHighContrast, BOOL bDarkMode)
{
m_X = (int)(x * zoomRatio);
m_Y = (int)(y * zoomRatio);
m_ZoomRatio = zoomRatio;
m_BkDC = bkDC;
m_TextColor = textColor;
m_LineColor = lineColor;
m_BkColor = bkColor;
m_CtrlBitmap = ctrlBitmap;
m_RenderMode = renderMode;
m_bHighContrast = bHighContrast;
m_bDarkMode = bDarkMode;
}
void CHeaderCtrlFx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if (m_bHighContrast || m_RenderMode & SystemDraw)
{
return CHeaderCtrl::DrawItem(lpDrawItemStruct);
}
CDC* drawDC = CDC::FromHandle(lpDrawItemStruct->hDC);
drawDC->SetBkMode(TRANSPARENT);
drawDC->SetTextColor(m_TextColor);
CRect clientRect;
GetClientRect(&clientRect);
CDC BkDC;
BkDC.CreateCompatibleDC(m_BkDC);
BkDC.SelectObject(m_CtrlBitmap);
CRect rc = lpDrawItemStruct->rcItem;
CBrush br;
if (m_CtrlBitmap != NULL)
{
drawDC->BitBlt(rc.left, rc.top, rc.right, rc.bottom, &BkDC, rc.left, rc.top, SRCCOPY);
}
else
{
br.CreateSolidBrush(m_BkColor);
drawDC->FillRect(&rc, &br);
}
br.DeleteObject();
br.CreateSolidBrush(m_LineColor);
CRect rect = lpDrawItemStruct->rcItem;
rect.left = rect.right - 1;
drawDC->FillRect(&rect, &br);
rect = lpDrawItemStruct->rcItem;
rect.top = rect.bottom - 1;
drawDC->FillRect(&rect, &br);
HDITEM hi{};
TCHAR str[256]{};
hi.mask = HDI_TEXT | HDI_FORMAT;
hi.pszText = str;
hi.cchTextMax = 256;
GetItem(lpDrawItemStruct->itemID, &hi);
rect = (CRect)(lpDrawItemStruct->rcItem);
if (hi.fmt & HDF_CENTER)
{
drawDC->DrawText(hi.pszText, lstrlen(hi.pszText), rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
else if (hi.fmt & HDF_RIGHT)
{
rect.right -= 6;
drawDC->DrawText(hi.pszText, lstrlen(hi.pszText), rect, DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
}
else
{
rect.left += 6;
drawDC->DrawText(hi.pszText, lstrlen(hi.pszText), rect, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
}
}
void CHeaderCtrlFx::OnPaint()
{
if (m_bHighContrast || m_RenderMode & SystemDraw)
{
return CHeaderCtrl::OnPaint();
}
CHeaderCtrl::OnPaint();
RECT rectRightItem;
int iItemCount = Header_GetItemCount(this->m_hWnd);
if (iItemCount > 0)
{
Header_GetItemRect(this->m_hWnd, (WPARAM)iItemCount - 1, &rectRightItem);
RECT rectClient;
GetClientRect(&rectClient);
if (rectRightItem.right < rectClient.right)
{
CDC* drawDC = GetDC();
if (m_CtrlBitmap != NULL)
{
CDC BkDC;
BkDC.CreateCompatibleDC(m_BkDC);
BkDC.SelectObject(m_CtrlBitmap);
drawDC->BitBlt(rectRightItem.right, rectClient.top, rectClient.right, rectClient.bottom, &BkDC, rectRightItem.right, rectRightItem.top, SRCCOPY);
}
else
{
CBrush br;
br.CreateSolidBrush(m_BkColor);
rectClient.left = rectRightItem.right;
drawDC->FillRect(&rectClient, &br);
}
}
}
}
LRESULT CHeaderCtrlFx::OnLayout(WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);
if (IsWinXpLuna())
{
HD_LAYOUT& hdl = *(HD_LAYOUT*)lParam;
RECT* prc = hdl.prc;
WINDOWPOS* pwpos = hdl.pwpos;
int nHeight = (int)(pwpos->cy * (m_ZoomRatio * m_FontRatio));
pwpos->cy = nHeight;
prc->top = nHeight;
}
return lResult;
}
void CHeaderCtrlFx::SetFontEx(CString face, int size, double zoomRatio, double fontRatio, LONG fontWeight, BYTE fontRender)
{
m_FontSize = size;
m_ZoomRatio = zoomRatio;
m_FontRatio = fontRatio;
LOGFONT logFont = { 0 };
logFont.lfCharSet = DEFAULT_CHARSET;
logFont.lfHeight = (LONG)(-1 * size * zoomRatio * fontRatio);
logFont.lfQuality = fontRender;
logFont.lfWeight = fontWeight;
if (face.GetLength() < 32)
{
wsprintf(logFont.lfFaceName, _T("%s"), (LPCTSTR)face);
}
else
{
wsprintf(logFont.lfFaceName, _T(""));
}
m_Font.DeleteObject();
m_Font.CreateFontIndirect(&logFont);
SetFont(&m_Font);
}