Files

3793 lines
119 KiB
C++

/*---------------------------------------------------------------------------*/
// Author : hiyohiyo
// Mail : hiyohiyo@crystalmark.info
// Web : https://crystalmark.info/
// License : MIT License
/*---------------------------------------------------------------------------*/
#include "stdafx.h"
#include "DiskMark.h"
#include "DiskMarkDlg.h"
#include "DiskBench.h"
#include "AboutDlg.h"
#include <math.h>
#ifdef SUISHO_SHIZUKU_SUPPORT
#define SIZE_X 1000
#define SIZE_Y 500
#define SIZE_MIN_Y 500
#define OFFSET_X 200
#define MAX_METER_LENGTH 320
#else
#define SIZE_X 480
#define SIZE_X_MIX 680
#define SIZE_Y 300
#define SIZE_MIN_Y 300
#define OFFSET_X 0
#define MAX_METER_LENGTH 192
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern PROCESS_INFORMATION pi;
CDiskMarkDlg::CDiskMarkDlg(CWnd* pParent /*=NULL*/)
: CMainDialogFx(CDiskMarkDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hIconMini = AfxGetApp()->LoadIcon(IDI_TRAY_ICON);
m_AboutDlg = NULL;
m_SettingsDlg = NULL;
#ifdef SUISHO_AOI_SUPPORT
m_DefaultTheme = L"Aoi";
m_RecommendTheme = L"AoiLightAnimalEars~TenmuShinryuusai";
m_ThemeKeyName = L"ThemeAoi";
m_MarginButtonTop = 16;
m_MarginButtonLeft = 0;
m_MarginButtonBottom = 16;
m_MarginButtonRight = 0;
m_MarginMeterTop = 0;
m_MarginMeterLeft = 0;
m_MarginMeterBottom = 0;
m_MarginMeterRight = 16;
m_MarginCommentTop = 0;
m_MarginCommentLeft = 16;
m_MarginCommentBottom = 0;
m_MarginCommentRight = 16;
m_MarginDemoTop = 24;
m_MarginDemoLeft = 24;
m_MarginDemoBottom = 24;
m_MarginDemoRight = 24;
#elif MSI_MEI_SUPPORT
m_DefaultTheme = L"MSIMei";
m_RecommendTheme = L"MSIMei";
m_ThemeKeyName = L"ThemeMSIMei";
m_MarginButtonTop = 8;
m_MarginButtonLeft = 0;
m_MarginButtonBottom = 8;
m_MarginButtonRight = 0;
m_MarginMeterTop = 0;
m_MarginMeterLeft = 0;
m_MarginMeterBottom = 0;
m_MarginMeterRight = 16;
m_MarginCommentTop = 0;
m_MarginCommentLeft = 16;
m_MarginCommentBottom = 0;
m_MarginCommentRight = 64;
m_MarginDemoTop = 24;
m_MarginDemoLeft = 24;
m_MarginDemoBottom = 24;
m_MarginDemoRight = 24;
#elif SUISHO_SHIZUKU_SUPPORT
m_DefaultTheme = L"Shizuku";
m_RecommendTheme = L"ShizukuLightAnimalEars~TenmuShinryuusai";
m_ThemeKeyName = L"ThemeShizuku";
m_MarginButtonTop = 8;
m_MarginButtonLeft = 0;
m_MarginButtonBottom = 8;
m_MarginButtonRight = 0;
m_MarginMeterTop = 0;
m_MarginMeterLeft = 0;
m_MarginMeterBottom = 0;
m_MarginMeterRight = 16;
m_MarginCommentTop = 0;
m_MarginCommentLeft = 16;
m_MarginCommentBottom = 0;
m_MarginCommentRight = 64;
m_MarginDemoTop = 24;
m_MarginDemoLeft = 24;
m_MarginDemoBottom = 24;
m_MarginDemoRight = 24;
#else
m_DefaultTheme = L"Default";
m_ThemeKeyName = L"Theme";
m_MarginButtonTop = 4;
m_MarginButtonLeft = 0;
m_MarginButtonBottom = 4;
m_MarginButtonRight = 0;
m_MarginMeterTop = 0;
m_MarginMeterLeft = 0;
m_MarginMeterBottom = 0;
m_MarginMeterRight = 4;
m_MarginCommentTop = 0;
m_MarginCommentLeft = 4;
m_MarginCommentBottom = 0;
m_MarginCommentRight = 4;
m_MarginDemoTop = 8;
m_MarginDemoLeft = 8;
m_MarginDemoBottom = 8;
m_MarginDemoRight = 8;
#endif
m_BackgroundName = L"Background";
m_RandomThemeLabel = L"Random";
m_RandomThemeName = L"";
m_AdminMode = IsUserAnAdmin();
}
void CDiskMarkDlg::UpdateThemeInfo()
{
CMainDialogFx::UpdateThemeInfo();
CString theme = m_ThemeDir + m_CurrentTheme + L"\\theme.ini";
#ifdef SUISHO_AOI_SUPPORT
m_MarginButtonTop = GetPrivateProfileInt(L"Margin", L"ButtonTop", 16, theme);
m_MarginButtonLeft = GetPrivateProfileInt(L"Margin", L"ButtonLeft", 0, theme);
m_MarginButtonBottom = GetPrivateProfileInt(L"Margin", L"ButtonBottom", 16, theme);
m_MarginButtonRight = GetPrivateProfileInt(L"Margin", L"ButtonRight", 0, theme);
m_MarginMeterTop = GetPrivateProfileInt(L"Margin", L"MeterTop", 0, theme);
m_MarginMeterLeft = GetPrivateProfileInt(L"Margin", L"MeterLeft", 0, theme);
m_MarginMeterBottom = GetPrivateProfileInt(L"Margin", L"MeterBottom", 0, theme);
m_MarginMeterRight = GetPrivateProfileInt(L"Margin", L"MeterRight", 16, theme);
m_MarginCommentTop = GetPrivateProfileInt(L"Margin", L"CommentTop", 0, theme);
m_MarginCommentLeft = GetPrivateProfileInt(L"Margin", L"CommentLeft", 4, theme);
m_MarginCommentBottom = GetPrivateProfileInt(L"Margin", L"CommentBottom", 0, theme);
m_MarginCommentRight = GetPrivateProfileInt(L"Margin", L"CommentRight", 4, theme);
m_MarginDemoTop = GetPrivateProfileInt(L"Margin", L"DemoTop", 24, theme);
m_MarginDemoLeft = GetPrivateProfileInt(L"Margin", L"DemoLeft", 24, theme);
m_MarginDemoBottom = GetPrivateProfileInt(L"Margin", L"DemoBottom", 24, theme);
m_MarginDemoRight = GetPrivateProfileInt(L"Margin", L"DemoRight", 24, theme);
#elif MSI_MEI_SUPPORT
m_MarginButtonTop = GetPrivateProfileInt(L"Margin", L"ButtonTop", 8, theme);
m_MarginButtonLeft = GetPrivateProfileInt(L"Margin", L"ButtonLeft", 0, theme);
m_MarginButtonBottom = GetPrivateProfileInt(L"Margin", L"ButtonBottom", 8, theme);
m_MarginButtonRight = GetPrivateProfileInt(L"Margin", L"ButtonRight", 0, theme);
m_MarginMeterTop = GetPrivateProfileInt(L"Margin", L"MeterTop", 0, theme);
m_MarginMeterLeft = GetPrivateProfileInt(L"Margin", L"MeterLeft", 0, theme);
m_MarginMeterBottom = GetPrivateProfileInt(L"Margin", L"MeterBottom", 0, theme);
m_MarginMeterRight = GetPrivateProfileInt(L"Margin", L"MeterRight", 16, theme);
m_MarginCommentTop = GetPrivateProfileInt(L"Margin", L"CommentTop", 0, theme);
m_MarginCommentLeft = GetPrivateProfileInt(L"Margin", L"CommentLeft", 16, theme);
m_MarginCommentBottom = GetPrivateProfileInt(L"Margin", L"CommentBottom", 0, theme);
m_MarginCommentRight = GetPrivateProfileInt(L"Margin", L"CommentRight", 16, theme);
m_MarginDemoTop = GetPrivateProfileInt(L"Margin", L"DemoTop", 24, theme);
m_MarginDemoLeft = GetPrivateProfileInt(L"Margin", L"DemoLeft", 24, theme);
m_MarginDemoBottom = GetPrivateProfileInt(L"Margin", L"DemoBottom", 24, theme);
m_MarginDemoRight = GetPrivateProfileInt(L"Margin", L"DemoRight", 24, theme);
#elif SUISHO_SHIZUKU_SUPPORT
m_MarginButtonTop = GetPrivateProfileInt(L"Margin", L"ButtonTop", 8, theme);
m_MarginButtonLeft = GetPrivateProfileInt(L"Margin", L"ButtonLeft", 0, theme);
m_MarginButtonBottom = GetPrivateProfileInt(L"Margin", L"ButtonBottom", 8, theme);
m_MarginButtonRight = GetPrivateProfileInt(L"Margin", L"ButtonRight", 0, theme);
m_MarginMeterTop = GetPrivateProfileInt(L"Margin", L"MeterTop", 0, theme);
m_MarginMeterLeft = GetPrivateProfileInt(L"Margin", L"MeterLeft", 0, theme);
m_MarginMeterBottom = GetPrivateProfileInt(L"Margin", L"MeterBottom", 0, theme);
m_MarginMeterRight = GetPrivateProfileInt(L"Margin", L"MeterRight", 16, theme);
m_MarginCommentTop = GetPrivateProfileInt(L"Margin", L"CommentTop", 0, theme);
m_MarginCommentLeft = GetPrivateProfileInt(L"Margin", L"CommentLeft", 16, theme);
m_MarginCommentBottom = GetPrivateProfileInt(L"Margin", L"CommentBottom", 0, theme);
m_MarginCommentRight = GetPrivateProfileInt(L"Margin", L"CommentRight", 16, theme);
m_MarginDemoTop = GetPrivateProfileInt(L"Margin", L"DemoTop", 24, theme);
m_MarginDemoLeft = GetPrivateProfileInt(L"Margin", L"DemoLeft", 24, theme);
m_MarginDemoBottom = GetPrivateProfileInt(L"Margin", L"DemoBottom", 24, theme);
m_MarginDemoRight = GetPrivateProfileInt(L"Margin", L"DemoRight", 24, theme);
#else
m_MarginButtonTop = GetPrivateProfileInt(L"Margin", L"ButtonTop", 4, theme);
m_MarginButtonLeft = GetPrivateProfileInt(L"Margin", L"ButtonLeft", 0, theme);
m_MarginButtonBottom = GetPrivateProfileInt(L"Margin", L"ButtonBottom", 4, theme);
m_MarginButtonRight = GetPrivateProfileInt(L"Margin", L"ButtonRight", 0, theme);
m_MarginMeterTop = GetPrivateProfileInt(L"Margin", L"MeterTop", 0, theme);
m_MarginMeterLeft = GetPrivateProfileInt(L"Margin", L"MeterLeft", 0, theme);
m_MarginMeterBottom = GetPrivateProfileInt(L"Margin", L"MeterBottom", 0, theme);
m_MarginMeterRight = GetPrivateProfileInt(L"Margin", L"MeterRight", 4, theme);
m_MarginCommentTop = GetPrivateProfileInt(L"Margin", L"CommentTop", 0, theme);
m_MarginCommentLeft = GetPrivateProfileInt(L"Margin", L"CommentLeft", 8, theme);
m_MarginCommentBottom = GetPrivateProfileInt(L"Margin", L"CommentBottom", 0, theme);
m_MarginCommentRight = GetPrivateProfileInt(L"Margin", L"CommentRight", 8, theme);
m_MarginDemoTop = GetPrivateProfileInt(L"Margin", L"DemoTop", 8, theme);
m_MarginDemoLeft = GetPrivateProfileInt(L"Margin", L"DemoLeft", 8, theme);
m_MarginDemoBottom = GetPrivateProfileInt(L"Margin", L"DemoBottom", 8, theme);
m_MarginDemoRight = GetPrivateProfileInt(L"Margin", L"DemoRight", 8, theme);
#endif
}
CDiskMarkDlg::~CDiskMarkDlg()
{
}
void CDiskMarkDlg::DoDataExchange(CDataExchange* pDX)
{
CMainDialogFx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTON_ALL, m_ButtonAll);
DDX_Control(pDX, IDC_BUTTON_TEST_0, m_ButtonTest0);
DDX_Control(pDX, IDC_BUTTON_TEST_1, m_ButtonTest1);
DDX_Control(pDX, IDC_BUTTON_TEST_2, m_ButtonTest2);
DDX_Control(pDX, IDC_BUTTON_TEST_3, m_ButtonTest3);
DDX_Control(pDX, IDC_TEST_READ_0, m_TestRead0);
DDX_Control(pDX, IDC_TEST_READ_1, m_TestRead1);
DDX_Control(pDX, IDC_TEST_READ_2, m_TestRead2);
DDX_Control(pDX, IDC_TEST_READ_3, m_TestRead3);
DDX_Control(pDX, IDC_TEST_WRITE_0, m_TestWrite0);
DDX_Control(pDX, IDC_TEST_WRITE_1, m_TestWrite1);
DDX_Control(pDX, IDC_TEST_WRITE_2, m_TestWrite2);
DDX_Control(pDX, IDC_TEST_WRITE_3, m_TestWrite3);
#ifdef MIX_MODE
DDX_Control(pDX, IDC_TEST_MIX_0, m_TestMix0);
DDX_Control(pDX, IDC_TEST_MIX_1, m_TestMix1);
DDX_Control(pDX, IDC_TEST_MIX_2, m_TestMix2);
DDX_Control(pDX, IDC_TEST_MIX_3, m_TestMix3);
DDX_Control(pDX, IDC_COMBO_MIX, m_ComboMix);
#endif
DDX_Control(pDX, IDC_COMMENT, m_Comment);
DDX_Control(pDX, IDC_COMBO_COUNT, m_ComboCount);
DDX_Control(pDX, IDC_COMBO_SIZE, m_ComboSize);
DDX_Control(pDX, IDC_COMBO_DRIVE, m_ComboDrive);
DDX_Control(pDX, IDC_COMBO_UNIT, m_ComboUnit);
DDX_Control(pDX, IDC_DEMO_SETTING, m_DemoSetting);
DDX_Control(pDX, IDC_READ_UNIT, m_ReadUnit);
DDX_Control(pDX, IDC_WRITE_UNIT, m_WriteUnit);
#ifdef MIX_MODE
DDX_Control(pDX, IDC_MIX_UNIT, m_MixUnit);
#endif
DDX_Text(pDX, IDC_COMBO_COUNT, m_ValueTestCount);
DDX_Text(pDX, IDC_COMBO_SIZE, m_ValueTestSize);
DDX_Text(pDX, IDC_COMBO_DRIVE, m_ValueTestDrive);
DDX_Text(pDX, IDC_COMBO_UNIT, m_ValueTestUnit);
DDX_CBIndex(pDX, IDC_COMBO_COUNT, m_IndexTestCount);
DDX_CBIndex(pDX, IDC_COMBO_SIZE, m_IndexTestSize);
DDX_CBIndex(pDX, IDC_COMBO_DRIVE, m_IndexTestDrive);
DDX_CBIndex(pDX, IDC_COMBO_UNIT, m_IndexTestUnit);
#ifdef MIX_MODE
DDX_CBIndex(pDX, IDC_COMBO_MIX, m_IndexTestMix);
#endif
}
BEGIN_MESSAGE_MAP(CDiskMarkDlg, CMainDialogFx)
//}}AFX_MSG_MAP
#ifdef SUISHO_SHIZUKU_SUPPORT
ON_WM_GETMINMAXINFO()
ON_WM_SIZE()
#endif
ON_COMMAND(ID_EXIT, OnExit)
ON_COMMAND(ID_ABOUT, OnAbout)
ON_COMMAND(ID_COPY, OnCopy)
ON_MESSAGE(WM_UPDATE_SCORE, OnUpdateScore)
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage)
ON_MESSAGE(WM_EXIT_BENCHMARK, OnExitBenchmark)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_ZOOM_100, &CDiskMarkDlg::OnZoom100)
ON_COMMAND(ID_ZOOM_125, &CDiskMarkDlg::OnZoom125)
ON_COMMAND(ID_ZOOM_150, &CDiskMarkDlg::OnZoom150)
ON_COMMAND(ID_ZOOM_200, &CDiskMarkDlg::OnZoom200)
ON_COMMAND(ID_ZOOM_250, &CDiskMarkDlg::OnZoom250)
ON_COMMAND(ID_ZOOM_300, &CDiskMarkDlg::OnZoom300)
ON_COMMAND(ID_ZOOM_AUTO, &CDiskMarkDlg::OnZoomAuto)
ON_COMMAND(ID_HELP, &CDiskMarkDlg::OnHelp)
ON_COMMAND(ID_CRYSTALDEWWORLD, &CDiskMarkDlg::OnCrystalDewWorld)
ON_COMMAND(ID_MODE_DEFAULT, &CDiskMarkDlg::OnModeDefault)
ON_COMMAND(ID_MODE_ALL0X00, &CDiskMarkDlg::OnModeAll0x00)
ON_COMMAND(ID_SETTING_DEFAULT, &CDiskMarkDlg::OnSettingDefault)
ON_COMMAND(ID_SETTING_NVME_8, &CDiskMarkDlg::OnSettingNVMe8)
ON_COMMAND(ID_SETTING_FLASH_MEMORY, &CDiskMarkDlg::OnSettingFlashMemory)
ON_COMMAND(ID_PROFILE_DEFAULT, &CDiskMarkDlg::OnProfileDefault)
ON_COMMAND(ID_PROFILE_REAL, &CDiskMarkDlg::OnProfileReal)
ON_COMMAND(ID_PROFILE_PEAK, &CDiskMarkDlg::OnProfilePeak)
ON_COMMAND(ID_PROFILE_DEMO, &CDiskMarkDlg::OnProfileDemo)
#ifdef MIX_MODE
ON_COMMAND(ID_PROFILE_DEFAULT_MIX, &CDiskMarkDlg::OnProfileDefaultMix)
ON_COMMAND(ID_PROFILE_REAL_MIX, &CDiskMarkDlg::OnProfileRealMix)
ON_COMMAND(ID_PROFILE_PEAK_MIX, &CDiskMarkDlg::OnProfilePeakMix)
#endif
ON_COMMAND(ID_BENCHMARK_READ_WRITE, &CDiskMarkDlg::OnBenchmarkReadWrite)
ON_COMMAND(ID_BENCHMARK_READ_ONLY, &CDiskMarkDlg::OnBenchmarkReadOnly)
ON_COMMAND(ID_BENCHMARK_WRITE_ONLY, &CDiskMarkDlg::OnBenchmarkWriteOnly)
//}}AFX_MSG_MAP
ON_COMMAND(ID_SAVE_TEXT, &CDiskMarkDlg::OnSaveText)
ON_COMMAND(ID_SAVE_IMAGE, &CDiskMarkDlg::OnSaveImage)
ON_COMMAND(ID_SETTINGS_QUEUESTHREADS, &CDiskMarkDlg::OnSettingsQueuesThreads)
ON_COMMAND(ID_FONT_SETTING, &CDiskMarkDlg::OnFontSetting)
ON_WM_NCCREATE()
ON_MESSAGE(WM_QUERYENDSESSION, &CDiskMarkDlg::OnQueryEndSession)
ON_BN_CLICKED(IDC_BUTTON_ALL, &CDiskMarkDlg::OnAll)
ON_BN_CLICKED(IDC_BUTTON_TEST_0, &CDiskMarkDlg::OnTest0)
ON_BN_CLICKED(IDC_BUTTON_TEST_1, &CDiskMarkDlg::OnTest1)
ON_BN_CLICKED(IDC_BUTTON_TEST_2, &CDiskMarkDlg::OnTest2)
ON_BN_CLICKED(IDC_BUTTON_TEST_3, &CDiskMarkDlg::OnTest3)
ON_CBN_SELCHANGE(IDC_COMBO_DRIVE, &CDiskMarkDlg::OnCbnSelchangeComboDrive)
ON_CBN_SELCHANGE(IDC_COMBO_UNIT, &CDiskMarkDlg::OnCbnSelchangeComboUnit)
#ifdef MIX_MODE
ON_CBN_SELCHANGE(IDC_COMBO_MIX, &CDiskMarkDlg::OnCbnSelchangeComboMix)
#endif
END_MESSAGE_MAP()
LRESULT CDiskMarkDlg::OnQueryEndSession(WPARAM wParam, LPARAM lParam)
{
return TRUE;
}
BOOL CDiskMarkDlg::CheckThemeEdition(CString name)
{
#ifdef SUISHO_AOI_SUPPORT
if (name.Find(L"Aoi") == 0) { return TRUE; }
#elif MSI_MEI_SUPPORT
if (name.Find(L"MSIMei") == 0) { return TRUE; }
#elif SUISHO_SHIZUKU_SUPPORT
if(name.Find(L"Shizuku") == 0) { return TRUE; }
#elif KUREI_KEI_SUPPORT
if(name.Find(L"KureiKei") == 0) { return TRUE; }
#else
if(name.Find(L"Shizuku") != 0 && name.Find(L"Aoi") != 0 && name.Find(L"MSIMei") != 0 && name.Find(L"Tokka") != 0 && name.Find(L"KureiKei") != 0 && name.Find(L".") != 0) { return TRUE; }
#endif
return FALSE;
}
int CALLBACK EnumFontFamExProcDefaultFont(ENUMLOGFONTEX* lpelfe, NEWTEXTMETRICEX* lpntme, int FontType, LPARAM lParam)
{
if (_tcscmp(lpelfe->elfLogFont.lfFaceName, DEFAULT_FONT_FACE_1) == 0)
{
*((BOOL*)lParam) = TRUE;
}
return TRUE;
}
BOOL CDiskMarkDlg::IsDefaultMode()
{
if (m_MeasureTime == 5
&& m_BenchSize[0] == 1024 && m_BenchQueues[0] == 8 && m_BenchThreads[0] == 1 && m_BenchType[0] == BENCH_SEQ
&& m_BenchSize[1] == 1024 && m_BenchQueues[1] == 1 && m_BenchThreads[1] == 1 && m_BenchType[1] == BENCH_SEQ
&& m_BenchSize[2] == 4 && m_BenchQueues[2] == 32 && m_BenchThreads[2] == 1 && m_BenchType[2] == BENCH_RND
&& m_BenchSize[3] == 4 && m_BenchQueues[3] == 1 && m_BenchThreads[3] == 1 && m_BenchType[3] == BENCH_RND
&& m_BenchSize[4] == 1024 && m_BenchQueues[4] == 8 && m_BenchThreads[4] == 1 && m_BenchType[4] == BENCH_SEQ
&& m_BenchSize[5] == 4 && m_BenchQueues[5] == 32 && m_BenchThreads[5] == 1 && m_BenchType[5] == BENCH_RND
&& m_BenchSize[8] == 1024 && m_BenchQueues[8] == 8 && m_BenchThreads[8] == 1 && m_BenchType[8] == BENCH_SEQ
)
{
return TRUE;
}
return FALSE;
}
BOOL CDiskMarkDlg::IsNVMe8Mode()
{
if (m_MeasureTime == 5
&& m_BenchSize[0] == 1024 && m_BenchQueues[0] == 8 && m_BenchThreads[0] == 1 && m_BenchType[0] == BENCH_SEQ
&& m_BenchSize[1] == 128 && m_BenchQueues[1] == 32 && m_BenchThreads[1] == 1 && m_BenchType[1] == BENCH_SEQ
&& m_BenchSize[2] == 4 && m_BenchQueues[2] == 32 && m_BenchThreads[2] == 16 && m_BenchType[2] == BENCH_RND
&& m_BenchSize[3] == 4 && m_BenchQueues[3] == 1 && m_BenchThreads[3] == 1 && m_BenchType[3] == BENCH_RND
&& m_BenchSize[4] == 1024 && m_BenchQueues[4] == 8 && m_BenchThreads[4] == 1 && m_BenchType[4] == BENCH_SEQ
&& m_BenchSize[5] == 4 && m_BenchQueues[5] == 32 && m_BenchThreads[5] == 16 && m_BenchType[5] == BENCH_RND
&& m_BenchSize[8] == 1024 && m_BenchQueues[8] == 8 && m_BenchThreads[8] == 1 && m_BenchType[8] == BENCH_SEQ
)
{
return TRUE;
}
return FALSE;
}
BOOL CDiskMarkDlg::IsFlashMemoryMode()
{
if (m_MeasureTime == 1
&& m_BenchSize[0] == 1024 && m_BenchQueues[0] == 8 && m_BenchThreads[0] == 1 && m_BenchType[0] == BENCH_SEQ
&& m_BenchSize[1] == 1024 && m_BenchQueues[1] == 1 && m_BenchThreads[1] == 1 && m_BenchType[1] == BENCH_SEQ
&& m_BenchSize[2] == 4 && m_BenchQueues[2] == 32 && m_BenchThreads[2] == 1 && m_BenchType[2] == BENCH_RND
&& m_BenchSize[3] == 4 && m_BenchQueues[3] == 1 && m_BenchThreads[3] == 1 && m_BenchType[3] == BENCH_RND
&& m_BenchSize[4] == 1024 && m_BenchQueues[4] == 8 && m_BenchThreads[4] == 1 && m_BenchType[4] == BENCH_SEQ
&& m_BenchSize[5] == 4 && m_BenchQueues[5] == 32 && m_BenchThreads[5] == 1 && m_BenchType[5] == BENCH_RND
&& m_BenchSize[8] == 1024 && m_BenchQueues[8] == 8 && m_BenchThreads[8] == 1 && m_BenchType[8] == BENCH_SEQ
)
{
return TRUE;
}
return FALSE;
}
BOOL CDiskMarkDlg::OnInitDialog()
{
CMainDialogFx::OnInitDialog();
m_hAccelerator = ::LoadAccelerators(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_ACCELERATOR));
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIconMini, FALSE);
TCHAR str[256];
CClientDC dc(this);
LOGFONT logfont;
CString defaultFontFace;
BOOL hasDefaultFont = FALSE;
ZeroMemory(&logfont, sizeof(LOGFONT));
logfont.lfCharSet = DEFAULT_CHARSET;
::EnumFontFamiliesExW(dc.m_hDC, &logfont, (FONTENUMPROC)EnumFontFamExProcDefaultFont, (INT_PTR)(&hasDefaultFont), 0);
if (hasDefaultFont)
{
defaultFontFace = DEFAULT_FONT_FACE_1;
}
else
{
defaultFontFace = DEFAULT_FONT_FACE_2;
}
GetPrivateProfileString(L"Setting", L"FontFace", defaultFontFace, str, 256, m_Ini);
m_FontFace = str;
m_TestData = GetPrivateProfileInt(L"Setting", L"TestData", TEST_DATA_RANDOM, m_Ini);
if (m_TestData != TEST_DATA_ALL0X00)
{
m_TestData = TEST_DATA_RANDOM;
}
m_Profile = GetPrivateProfileInt(L"Setting", L"Profile", PROFILE_DEFAULT, m_Ini);
#ifdef MIX_MODE
if (PROFILE_DEFAULT > m_Profile || m_Profile > PROFILE_REAL_MIX)
#else
if (PROFILE_DEFAULT > m_Profile || m_Profile > PROFILE_DEMO)
#endif
{
m_Profile = PROFILE_DEFAULT;
}
m_Benchmark = GetPrivateProfileInt(L"Setting", L"Benchmark", BENCHMARK_READ_WRITE, m_Ini);
if (BENCHMARK_READ > m_Benchmark || m_Benchmark > BENCHMARK_READ_WRITE)
{
m_Benchmark = BENCHMARK_READ_WRITE;
}
if (m_Profile == PROFILE_DEFAULT_MIX || m_Profile == PROFILE_PEAK_MIX || m_Profile == PROFILE_REAL_MIX)
{
m_MixMode = TRUE;
}
else
{
m_MixMode = FALSE;
}
m_FontScale = GetPrivateProfileInt(L"Setting", L"FontScale", 100, m_Ini);
if (m_FontScale > 200 || m_FontScale < 50)
{
m_FontScale = 100;
m_FontRatio = 1.0;
}
else
{
m_FontRatio = m_FontScale / 100.0;
}
m_FontRender = GetPrivateProfileInt(L"Setting", L"FontRender", CLEARTYPE_NATURAL_QUALITY, m_Ini);
if (m_FontRender > CLEARTYPE_NATURAL_QUALITY)
{
m_FontRender = CLEARTYPE_NATURAL_QUALITY;
}
// Unit
m_ComboUnit.AddString(L"MB/s");
m_ComboUnit.AddString(L"GB/s");
m_ComboUnit.AddString(L"IOPS");
m_ComboUnit.AddString(L"μs");
// Count
for (int i = 1; i < 10; i++)
{
CString cstr;
cstr.Format(L"%d", i);
m_ComboCount.AddString(cstr);
}
#ifdef MIX_MODE
// Mix
for (int i = 1; i < 10; i++)
{
CString cstr;
cstr.Format(L"R%d%%/W%d%%", i * 10, 100 - i*10);
m_ComboMix.AddString(cstr);
}
#endif
m_WinThread = NULL;
m_DiskBenchStatus = FALSE;
InitThemeLang();
InitMenu();
UpdateThemeInfo();
ChangeLang(m_CurrentLang);
UpdateQueuesThreads();
m_IndexTestCount = GetPrivateProfileInt(L"Setting", L"TestCount", 2, m_Ini);
if (m_IndexTestCount < 0 || m_IndexTestCount >= 9)
{
m_IndexTestCount = 2; // default value is 3.
}
m_ComboCount.SetCurSel(m_IndexTestCount);
// Size
TCHAR size[13][8] = { L"16MiB", L"32MiB", L"64MiB", L"128MiB", L"256MiB", L"512MiB", L"1GiB", L"2GiB", L"4GiB", L"8GiB", L"16GiB", L"32GiB", L"64GiB" };
for (int i = 0; i < 13; i++)
{
CString cstr;
cstr.Format(L"%s", size[i]);
m_ComboSize.AddString(cstr);
}
m_IndexTestSize = GetPrivateProfileInt(L"Setting", L"TestSize", 6, m_Ini);
if (m_IndexTestSize < 0 || m_IndexTestSize > 13)
{
m_IndexTestSize = 6; // default value is 1GiB;
}
m_ComboSize.SetCurSel(m_IndexTestSize);
m_IndexTestUnit = GetPrivateProfileInt(L"Setting", L"TestUnit", 0, m_Ini);
if (m_IndexTestUnit < 0 || m_IndexTestUnit >= 3)
{
m_IndexTestUnit = 0;
}
m_ComboUnit.SetCurSel(m_IndexTestUnit);
m_IndexTestMix = GetPrivateProfileInt(L"Setting", L"TestMix", 6, m_Ini);
if (m_IndexTestMix < 0 || m_IndexTestMix > 10)
{
m_IndexTestMix = 6; // default retio is R70W30;
}
m_MixRatio = (9 - m_IndexTestMix) * 10;
#ifdef MIX_MODE
m_ComboMix.SetCurSel(m_IndexTestMix);
#endif
UpdateData(FALSE);
// Drive
InitDrive();
InitScore();
UpdateUnitLabel();
switch(GetPrivateProfileInt(L"Setting", L"ZoomType", 0, m_Ini))
{
case 100: CheckRadioZoomType(ID_ZOOM_100, 100); break;
case 125: CheckRadioZoomType(ID_ZOOM_125, 125); break;
case 150: CheckRadioZoomType(ID_ZOOM_150, 150); break;
case 200: CheckRadioZoomType(ID_ZOOM_200, 200); break;
case 250: CheckRadioZoomType(ID_ZOOM_250, 250); break;
case 300: CheckRadioZoomType(ID_ZOOM_300, 300); break;
default: CheckRadioZoomType(ID_ZOOM_AUTO, 0); break;
}
ChangeZoomType(m_ZoomType);
m_SizeX = SIZE_X;
m_SizeY = SIZE_Y;
#ifdef MIX_MODE
if (m_MixMode)
{
m_SizeX = SIZE_X_MIX;
}
#endif
SetWindowTitle(L"");
SetClientSize(m_SizeX, m_SizeY, m_ZoomRatio);
m_bShowWindow = TRUE;
CenterWindow();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
m_bInitializing = FALSE;
SetForegroundWindow();
return TRUE;
}
void CDiskMarkDlg::UpdateDialogSize()
{
CDialogFx::UpdateDialogSize();
m_bHighContrast = FALSE;
ShowWindow(SW_HIDE);
int offsetX = 0;
int comboDriveX = 0;
m_SizeX = SIZE_X;
m_SizeY = SIZE_Y;
#ifdef MIX_MODE
if (m_MixMode)
{
m_SizeX = SIZE_X_MIX;
}
#endif
SetClientSize(m_SizeX, m_SizeY, m_ZoomRatio);
#ifdef SUISHO_SHIZUKU_SUPPORT
if (m_CharacterPosition == 0)
{
offsetX = OFFSET_X;
}
#endif
UpdateBackground(TRUE, m_bDarkMode);
SetControlFont();
if (m_Profile != PROFILE_DEFAULT && m_Profile != PROFILE_DEFAULT_MIX)
{
#ifdef SUISHO_SHIZUKU_SUPPORT
comboDriveX = 120;
#else
comboDriveX = 72;
#endif
}
else
{
comboDriveX = 0;
}
m_TestRead0.SetDrawFrame(m_bHighContrast);
m_TestRead1.SetDrawFrame(m_bHighContrast);
m_TestRead2.SetDrawFrame(m_bHighContrast);
m_TestRead3.SetDrawFrame(m_bHighContrast);
m_TestWrite0.SetDrawFrame(m_bHighContrast);
m_TestWrite1.SetDrawFrame(m_bHighContrast);
m_TestWrite2.SetDrawFrame(m_bHighContrast);
m_TestWrite3.SetDrawFrame(m_bHighContrast);
m_Comment.SetDrawFrame(m_bHighContrast);
#ifdef MIX_MODE
m_TestMix0.SetDrawFrame(m_bHighContrast);
m_TestMix1.SetDrawFrame(m_bHighContrast);
m_TestMix2.SetDrawFrame(m_bHighContrast);
m_TestMix3.SetDrawFrame(m_bHighContrast);
#endif
if (m_Profile == PROFILE_DEMO)
{
m_ReadUnit.ShowWindow(SW_HIDE);
m_WriteUnit.ShowWindow(SW_HIDE);
m_TestRead1.ShowWindow(SW_HIDE);
m_TestRead2.ShowWindow(SW_HIDE);
m_TestRead3.ShowWindow(SW_HIDE);
m_TestWrite1.ShowWindow(SW_HIDE);
m_TestWrite2.ShowWindow(SW_HIDE);
m_TestWrite3.ShowWindow(SW_HIDE);
m_DemoSetting.ShowWindow(SW_SHOW);
}
else
{
m_ReadUnit.ShowWindow(SW_SHOW);
m_WriteUnit.ShowWindow(SW_SHOW);
m_TestRead1.ShowWindow(SW_SHOW);
m_TestRead2.ShowWindow(SW_SHOW);
m_TestRead3.ShowWindow(SW_SHOW);
m_TestWrite1.ShowWindow(SW_SHOW);
m_TestWrite2.ShowWindow(SW_SHOW);
m_TestWrite3.ShowWindow(SW_SHOW);
m_DemoSetting.ShowWindow(SW_HIDE);
}
if (m_Profile == PROFILE_DEMO)
{
#ifdef SUISHO_SHIZUKU_SUPPORT
m_ButtonAll.InitControl(12 + offsetX, 8, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonAll.SetHandCursor(TRUE);
/*
m_TestRead0.SetGlassColor(m_Glass, m_GlassAlpha);
m_TestWrite0.SetGlassColor(m_Glass, m_GlassAlpha);
m_TestRead0.InitControl(12 + offsetX, 96, 384, 348, m_ZoomRatio, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawGlass, m_bHighContrast, FALSE);
m_TestWrite0.InitControl(404 + offsetX, 96, 384, 348, m_ZoomRatio, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawGlass, m_bHighContrast, FALSE);
*/
#ifdef SUISHO_AOI_SUPPORT
m_TestRead0.InitControl(12 + offsetX, 96, 384, 344, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Demo"), 1, SS_CENTER, OwnerDrawImage, FALSE, FALSE, FALSE);
m_TestWrite0.InitControl(404 + offsetX, 96, 384, 344, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Demo"), 1, SS_CENTER, OwnerDrawImage, FALSE, FALSE, FALSE);
m_Comment.InitControl(12 + offsetX, 440, 776, 60, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
#else
m_TestRead0.InitControl(12 + offsetX, 96, 384, 348, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Demo"), 1, SS_CENTER, OwnerDrawImage, FALSE, FALSE, FALSE);
m_TestWrite0.InitControl(404 + offsetX, 96, 384, 348, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Demo"), 1, SS_CENTER, OwnerDrawImage, FALSE, FALSE, FALSE);
m_Comment.InitControl(12 + offsetX, 452, 776, 40, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
#endif
m_Comment.SetMargin(m_MarginCommentTop, m_MarginCommentLeft, m_MarginCommentBottom, m_MarginCommentRight, m_ZoomRatio);
m_Comment.Adjust();
m_DemoSetting.InitControl(140 + offsetX, 56, 528, 40, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ReadUnit.InitControl(12 + offsetX, 96, 120, 32, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_WriteUnit.InitControl(672 + offsetX, 96, 116, 32, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ComboCount.InitControl(140 + offsetX, 8, 60, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboSize.InitControl(204 + offsetX, 8, 140, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboDrive.InitControl(348 + offsetX, 8, 320, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboUnit.InitControl(672 + offsetX, 8, 116, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
#else
m_TestRead0.SetDrawFrameEx(TRUE, m_Frame);
m_TestWrite0.SetDrawFrameEx(TRUE, m_Frame);
m_ButtonAll.InitControl(8 + offsetX, 8, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonAll.SetHandCursor(TRUE);
m_TestRead0.SetGlassColor(m_Glass, m_GlassAlpha);
m_TestWrite0.SetGlassColor(m_Glass, m_GlassAlpha);
m_TestRead0.InitControl(8 + offsetX, 64, 228, 196, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawGlass, m_bHighContrast, TRUE, FALSE);
m_TestWrite0.InitControl(244 + offsetX, 64, 228, 196, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawGlass, m_bHighContrast, TRUE, FALSE);
m_Comment.InitControl(8 + offsetX, 268, 464, 24, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_Comment.SetMargin(m_MarginCommentTop, m_MarginCommentLeft, m_MarginCommentBottom, m_MarginCommentRight, m_ZoomRatio);
m_Comment.Adjust();
m_DemoSetting.InitControl(84 + offsetX, 36, 320, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ReadUnit.InitControl(84 + offsetX, 36, 124, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_WriteUnit.InitControl(280 + offsetX, 36, 124, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ComboCount.InitControl(84 + offsetX, 8, 40, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboSize.InitControl(128 + offsetX, 8, 80, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboDrive.InitControl(212 + offsetX, 8, 188, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboUnit.InitControl(404 + offsetX, 8, 68, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
#endif
}
else
{
#ifdef SUISHO_SHIZUKU_SUPPORT
m_ButtonAll.InitControl(12 + offsetX, 8, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest0.InitControl(12 + offsetX, 96, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest1.InitControl(12 + offsetX, 184, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest2.InitControl(12 + offsetX, 272, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest3.InitControl(12 + offsetX, 360, 120, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonAll.SetHandCursor(TRUE);
m_ButtonTest0.SetHandCursor(TRUE);
m_ButtonTest1.SetHandCursor(TRUE);
m_ButtonTest2.SetHandCursor(TRUE);
m_ButtonTest3.SetHandCursor(TRUE);
m_TestRead0.InitControl(140 + offsetX, 96, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead1.InitControl(140 + offsetX, 184, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead2.InitControl(140 + offsetX, 272, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead3.InitControl(140 + offsetX, 360, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite0.InitControl(468 + offsetX, 96, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite1.InitControl(468 + offsetX, 184, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite2.InitControl(468 + offsetX, 272, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite3.InitControl(468 + offsetX, 360, 320, 80, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
#ifdef SUISHO_AOI_SUPPORT
m_Comment.InitControl(12 + offsetX, 440, 776, 60, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
#else
m_Comment.InitControl(12 + offsetX, 452, 776, 40, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
#endif
m_Comment.SetMargin(m_MarginCommentTop, m_MarginCommentLeft, m_MarginCommentBottom, m_MarginCommentRight, m_ZoomRatio);
m_Comment.Adjust();
m_ReadUnit.InitControl(140 + offsetX, 56, 320, 40, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_WriteUnit.InitControl(468 + offsetX, 56, 320, 40, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ComboCount.InitControl(140 + offsetX, 8, 60, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboSize.InitControl(204 + offsetX, 8, 140, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboUnit.InitControl(672 + offsetX, 8, 116, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_REAL)
{
m_ComboDrive.InitControl(348 + offsetX, 8, 440, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
}
else
{
m_ComboDrive.InitControl(348 + offsetX, 8, 320, 500, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
}
#else
m_ButtonAll.InitControl(8 + offsetX, 8, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest0.InitControl(8 + offsetX, 60, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest1.InitControl(8 + offsetX, 112, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest2.InitControl(8 + offsetX, 164, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonTest3.InitControl(8 + offsetX, 216, 72, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Button"), 3, BS_CENTER, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ButtonAll.SetHandCursor(TRUE);
m_ButtonTest0.SetHandCursor(TRUE);
m_ButtonTest1.SetHandCursor(TRUE);
m_ButtonTest2.SetHandCursor(TRUE);
m_ButtonTest3.SetHandCursor(TRUE);
m_TestRead0.InitControl(84 + offsetX, 60, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead1.InitControl(84 + offsetX, 112, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead2.InitControl(84 + offsetX, 164, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestRead3.InitControl(84 + offsetX, 216, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite0.InitControl(280 + offsetX, 60, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite1.InitControl(280 + offsetX, 112, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite2.InitControl(280 + offsetX, 164, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestWrite3.InitControl(280 + offsetX, 216, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
if (m_MixMode)
{
m_Comment.InitControl(8 + offsetX, 268, 664, 24, m_ZoomRatio, &m_BkDC, IP(L"CommentL"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
}
else
{
m_Comment.InitControl(8 + offsetX, 268, 464, 24, m_ZoomRatio, &m_BkDC, IP(L"Comment"), 1, ES_LEFT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
}
m_Comment.SetMargin(m_MarginCommentTop, m_MarginCommentLeft, m_MarginCommentBottom, m_MarginCommentRight, m_ZoomRatio);
m_Comment.Adjust();
m_ReadUnit.InitControl(84 + offsetX, 36, 192, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_WriteUnit.InitControl(280 + offsetX, 36, 192, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_ComboCount.InitControl(84 + offsetX, 8, 40, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboSize.InitControl(128 + offsetX, 8, 80, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_ComboUnit.InitControl(404 + offsetX, 8, 68, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_REAL || m_Profile == PROFILE_PEAK_MIX || m_Profile == PROFILE_REAL_MIX)
{
m_ComboDrive.InitControl(212 + offsetX, 8, 260, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
}
else
{
m_ComboDrive.InitControl(212 + offsetX, 8, 188, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
}
#endif
}
if(m_Profile == PROFILE_DEMO)
{
m_TestRead0.SetMargin(m_MarginDemoTop, m_MarginDemoLeft, m_MarginDemoBottom, m_MarginDemoRight, m_ZoomRatio);
m_TestWrite0.SetMargin(m_MarginDemoTop, m_MarginDemoLeft, m_MarginDemoBottom, m_MarginDemoRight, m_ZoomRatio);
#ifdef SUISHO_AOI_SUPPORT
m_TestRead0.SetLabelUnitFormat(DT_LEFT | DT_BOTTOM | DT_SINGLELINE, DT_RIGHT | DT_BOTTOM | DT_SINGLELINE);
m_TestWrite0.SetLabelUnitFormat(DT_LEFT | DT_BOTTOM | DT_SINGLELINE, DT_RIGHT | DT_BOTTOM | DT_SINGLELINE);
#endif
}
else
{
m_TestRead0.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestRead1.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestRead2.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestRead3.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestWrite0.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestWrite1.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestWrite2.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestWrite3.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
}
m_ComboCount.SetMargin(0, 4, 0, 0, m_ZoomRatio);
m_ComboSize.SetMargin (0, 4, 0, 0, m_ZoomRatio);
m_ComboDrive.SetMargin(0, 4, 0, 0, m_ZoomRatio);
m_ComboUnit.SetMargin (0, 4, 0, 0, m_ZoomRatio);
#ifdef MIX_MODE
m_TestMix0.InitControl(480 + offsetX, 60, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestMix1.InitControl(480 + offsetX, 112, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestMix2.InitControl(480 + offsetX, 164, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_TestMix3.InitControl(480 + offsetX, 216, 192, 48, m_ZoomRatio, m_hPal, &m_BkDC, IP(L"Meter"), 2, SS_RIGHT, OwnerDrawImage, m_bHighContrast, FALSE, FALSE);
m_ComboMix.InitControl(480 + offsetX, 8, 192, 300, m_ZoomRatio, &m_BkDC, NULL, 0, ES_LEFT, OwnerDrawGlass, m_bHighContrast, FALSE, m_ComboBk, m_ComboBkSelected, m_Glass, m_GlassAlpha);
m_MixUnit.InitControl(480 + offsetX, 36, 192, 24, m_ZoomRatio, m_hPal, &m_BkDC, NULL, 0, SS_CENTER, OwnerDrawTransparent, m_bHighContrast, FALSE, FALSE);
m_TestMix0.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestMix1.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestMix2.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_TestMix3.SetMargin(m_MarginMeterTop, m_MarginMeterLeft, m_MarginMeterBottom, m_MarginMeterRight, m_ZoomRatio);
m_ComboMix.SetMargin(0, 4, 0, 0, m_ZoomRatio);
if (m_MixMode)
{
m_TestMix0.ShowWindow(SW_SHOW);
m_TestMix1.ShowWindow(SW_SHOW);
m_TestMix2.ShowWindow(SW_SHOW);
m_TestMix3.ShowWindow(SW_SHOW);
m_ComboMix.ShowWindow(SW_SHOW);
m_MixUnit.ShowWindow(SW_SHOW);
}
else
{
m_TestMix0.ShowWindow(SW_HIDE);
m_TestMix1.ShowWindow(SW_HIDE);
m_TestMix2.ShowWindow(SW_HIDE);
m_TestMix3.ShowWindow(SW_HIDE);
m_ComboMix.ShowWindow(SW_HIDE);
m_MixUnit.ShowWindow(SW_HIDE);
}
#endif
m_Comment.Adjust();
UpdateScore();
Invalidate();
m_ComboCount.ShowWindow(SW_HIDE);
m_ComboSize.ShowWindow(SW_HIDE);
m_ComboDrive.ShowWindow(SW_HIDE);
COMBOBOXINFO info = { 0 };
info.cbSize = sizeof(COMBOBOXINFO);
m_ComboCount.GetComboBoxInfo(&info);
SetLayeredWindow(info.hwndList, m_ComboAlpha);
m_ComboSize.GetComboBoxInfo(&info);
SetLayeredWindow(info.hwndList, m_ComboAlpha);
m_ComboDrive.GetComboBoxInfo(&info);
SetLayeredWindow(info.hwndList, m_ComboAlpha);
m_ComboUnit.GetComboBoxInfo(&info);
SetLayeredWindow(info.hwndList, m_ComboAlpha);
#ifdef MIX_MODE
if (m_MixMode)
{
m_ComboMix.GetComboBoxInfo(&info);
SetLayeredWindow(info.hwndList, m_ComboAlpha);
m_ComboMix.ShowWindow(SW_SHOW);
}
#endif
m_ComboCount.ShowWindow(SW_SHOW);
m_ComboSize.ShowWindow(SW_SHOW);
m_ComboDrive.ShowWindow(SW_SHOW);
if (m_Profile != PROFILE_DEFAULT && m_Profile != PROFILE_DEFAULT_MIX && m_Profile != PROFILE_DEMO)
{
m_ComboUnit.ShowWindow(SW_HIDE);
}
else
{
m_ComboUnit.ShowWindow(SW_SHOW);
}
UpdateComboTooltip();
ShowWindow(SW_SHOW);
}
void CDiskMarkDlg::UpdateComboTooltip()
{
m_ComboCount.SetToolTipText(i18n(L"Title", L"TEST_COUNT"));
m_ComboSize.SetToolTipText(i18n(L"Title", L"TEST_SIZE"));
m_ComboUnit.SetToolTipText(i18n(L"Title", L"TEST_UNIT"));
#ifdef MIX_MODE
if (m_MixMode)
{
m_ComboMix.SetToolTipText(i18n(L"Title", L"TEST_MIX"));
}
#endif
}
void CDiskMarkDlg::SetLayeredWindow(HWND hWnd, BYTE alpha)
{
if (IsWin2k()) { return; }
::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong(hWnd, GWL_EXSTYLE) ^ WS_EX_LAYERED);
::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
if (m_bHighContrast)
{
::SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA);
}
else
{
::SetLayeredWindowAttributes(hWnd, 0, alpha, LWA_ALPHA);
}
}
void CDiskMarkDlg::SetControlFont()
{
#ifdef SUISHO_SHIZUKU_SUPPORT
BYTE textAlpha = 255;
COLORREF textColor = RGB(0, 0, 0);
#else
BYTE textAlpha = 255;
COLORREF textColor = RGB(0, 0, 0);
#endif
#ifdef SUISHO_SHIZUKU_SUPPORT
m_ButtonAll.SetFontEx(m_FontFace, 20, 20, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest0.SetFontEx(m_FontFace, 20, 20, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest1.SetFontEx(m_FontFace, 20, 20, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest2.SetFontEx(m_FontFace, 20, 20, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest3.SetFontEx(m_FontFace, 20, 20, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
if (m_Profile == PROFILE_DEMO)
{
m_TestRead0.SetFontEx(m_FontFace, 80, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite0.SetFontEx(m_FontFace,80, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
}
else
{
m_TestRead0.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite0.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
}
m_TestRead1.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestRead2.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestRead3.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite1.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite2.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite3.SetFontEx(m_FontFace, 52, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_Comment.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_EditText, FW_BOLD, m_FontRender);
m_ReadUnit.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_LabelText, FW_BOLD, m_FontRender);
m_WriteUnit.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_LabelText, FW_BOLD, m_FontRender);
m_DemoSetting.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_ComboCount.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboSize.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboDrive.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboUnit.SetFontEx(m_FontFace, 28, 28, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ButtonTest0.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest1.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest2.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest3.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ComboCount.SetItemHeightAll(40, m_ZoomRatio, m_FontRatio);
m_ComboSize.SetItemHeightAll(40, m_ZoomRatio, m_FontRatio);
m_ComboDrive.SetItemHeightAll(40, m_ZoomRatio, m_FontRatio);
m_ComboUnit.SetItemHeightAll(40, m_ZoomRatio, m_FontRatio);
#else
m_ButtonAll.SetFontEx(m_FontFace, 12, 16, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest0.SetFontEx(m_FontFace, 12, 16, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest1.SetFontEx(m_FontFace, 12, 16, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest2.SetFontEx(m_FontFace, 12, 16, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
m_ButtonTest3.SetFontEx(m_FontFace, 12, 16, m_ZoomRatio, m_FontRatio, m_ButtonText, FW_BOLD, m_FontRender);
if (m_Profile == PROFILE_DEMO)
{
m_TestRead0.SetFontEx(m_FontFace, 48, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite0.SetFontEx(m_FontFace, 48, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
}
else
{
m_TestRead0.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite0.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
}
m_TestRead1.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestRead2.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestRead3.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite1.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite2.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestWrite3.SetFontEx(m_FontFace, 35, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_Comment.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_EditText, FW_BOLD, m_FontRender);
m_ReadUnit.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_LabelText, FW_BOLD, m_FontRender);
m_WriteUnit.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_LabelText, FW_BOLD, m_FontRender);
m_DemoSetting.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_ComboCount.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboSize.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboDrive.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboUnit.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ButtonTest0.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest1.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest2.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ButtonTest3.SetMargin(m_MarginButtonTop, m_MarginButtonLeft, m_MarginButtonBottom, m_MarginButtonRight, m_ZoomRatio);
m_ComboCount.SetItemHeightAll(24, m_ZoomRatio, m_FontRatio);
m_ComboSize.SetItemHeightAll(24, m_ZoomRatio, m_FontRatio);
m_ComboDrive.SetItemHeightAll(24, m_ZoomRatio, m_FontRatio);
m_ComboUnit.SetItemHeightAll(24, m_ZoomRatio, m_FontRatio);
#ifdef MIX_MODE
if(m_MixMode)
{
m_ComboMix.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_ComboText, m_ComboTextSelected, FW_NORMAL, m_FontRender);
m_ComboMix.SetItemHeightAll(24, m_ZoomRatio, m_FontRatio);
m_MixUnit.SetFontEx(m_FontFace, 16, 16, m_ZoomRatio, m_FontRatio, m_LabelText, FW_BOLD, m_FontRender);
m_TestMix0.SetFontEx(m_FontFace, 35, 35, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestMix1.SetFontEx(m_FontFace, 35, 35, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestMix2.SetFontEx(m_FontFace, 35, 35, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
m_TestMix3.SetFontEx(m_FontFace, 35, 35, m_ZoomRatio, m_FontRatio, m_MeterText, FW_BOLD, m_FontRender);
}
#endif
#endif
}
void CDiskMarkDlg::UpdateQueuesThreads()
{
CString cstr;
int type[9] = { 0, 0, 1, 1, 0, 1, 0, 1, 0 };
int size[9] = { 1024, 1024, 4, 4, 1024, 4, 1024, 4, 1024 };
int queues[9] = { 8, 1, 32, 1, 8, 32, 1, 1, 8 };
int threads[9] ={ 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int measureTimes[13] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 60 };
int intervalTimes[10] = { 0, 1, 3, 5, 10, 30, 60, 180, 300, 600 };
for (int i = 0; i < 9; i++)
{
cstr.Format(L"BenchType%d", i);
m_BenchType[i] = GetPrivateProfileInt(L"Setting", cstr, type[i], m_Ini);
if (m_BenchType[i] < 0 || m_BenchSize[i] > 1) { m_BenchSize[i] = type[i]; }
cstr.Format(L"BenchSize%d", i);
m_BenchSize[i] = GetPrivateProfileInt(L"Setting", cstr, size[i], m_Ini);
if (m_BenchSize[i] <= 0 || m_BenchSize[i] > 8192) { m_BenchSize[i] = size[i]; }
cstr.Format(L"BenchQueues%d", i);
m_BenchQueues[i] = GetPrivateProfileInt(L"Setting", cstr,queues[i], m_Ini);
if (m_BenchQueues[i] <= 0 || m_BenchQueues[i] > MAX_QUEUES) { m_BenchQueues[i] = queues[i]; }
cstr.Format(L"BenchThreads%d", i);
m_BenchThreads[i] = GetPrivateProfileInt(L"Setting", cstr, threads[i], m_Ini);
if (m_BenchThreads[i] <= 0 || m_BenchThreads[i] > MAX_THREADS) { m_BenchThreads[i] = threads[i]; }
}
m_TestData = GetPrivateProfileInt(L"Setting", L"TestData", TEST_DATA_RANDOM, m_Ini);
if (m_TestData < 0 || m_TestData > 1)
{
m_TestData = TEST_DATA_RANDOM;
}
SetWindowTitle(L"");
BOOL bMeasureflag = FALSE;
m_MeasureTime = GetPrivateProfileInt(L"Setting", L"MeasureTime", 5, m_Ini);
for (int i = 0; i < 13; i++)
{
if (m_MeasureTime == measureTimes[i])
{
bMeasureflag = TRUE;
}
}
if (! bMeasureflag)
{
m_MeasureTime = 5;
}
BOOL bIntervalFlag = FALSE;
m_IntervalTime = GetPrivateProfileInt(L"Setting", L"IntervalTime", 5, m_Ini);
for (int i = 0; i < 10; i++)
{
if (m_IntervalTime == intervalTimes[i])
{
bIntervalFlag = TRUE;
}
}
if (! bIntervalFlag)
{
m_IntervalTime = 5;
}
CheckRadioPresetMode();
}
void CDiskMarkDlg::SettingsQueuesThreads(int type)
{
CString key, value;
CString cstr;
switch (type)
{
case 0:// Default
{
int type[9] = { 0, 0, 1, 1, 0, 1, 0, 1, 0 };
int size[9] = { 1024, 1024, 4, 4, 1024, 4, 1024, 4, 1024 };
int queues[9] = { 8, 1, 32, 1, 8, 32, 1, 1, 8 };
int threads[9] ={ 1, 1, 1, 1, 1, 1, 1, 1, 1 };
for (int i = 0; i < 9; i++)
{
key.Format(L"BenchType%d", i); value.Format(L"%d", type[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchSize%d", i); value.Format(L"%d", size[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchQueues%d", i); value.Format(L"%d",queues[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchThreads%d", i); value.Format(L"%d", threads[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
}
WritePrivateProfileString(L"Setting", L"Affinity", L"1", m_Ini);
}
m_MeasureTime = 5; cstr.Format(L"%d", m_MeasureTime);
WritePrivateProfileString(L"Setting", L"MeasureTime", cstr, m_Ini);
m_IntervalTime = 5; cstr.Format(L"%d", m_IntervalTime);
WritePrivateProfileString(L"Setting", L"IntervalTime", cstr, m_Ini);
UpdateQueuesThreads();
ChangeButtonStatus(TRUE);
break;
case 1: // NVMe SSD Ver.8
{
int type[9] = { 0, 0, 1, 1, 0, 1, 0, 1, 0 };
int size[9] = { 1024, 128, 4, 4, 1024, 4, 1024, 4, 1024 };
int queues[9] = { 8, 32, 32, 1, 8, 32, 1, 1, 8 };
int threads[9] = { 1, 1, 16, 1, 1, 16, 1, 1, 1 };
for (int i = 0; i < 9; i++)
{
key.Format(L"BenchType%d", i); value.Format(L"%d", type[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchSize%d", i); value.Format(L"%d", size[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchQueues%d", i); value.Format(L"%d", queues[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchThreads%d", i); value.Format(L"%d", threads[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
}
WritePrivateProfileString(L"Setting", L"Affinity", L"1", m_Ini);
}
m_MeasureTime = 5; cstr.Format(L"%d", m_MeasureTime);
WritePrivateProfileString(L"Setting", L"MeasureTime", cstr, m_Ini);
m_IntervalTime = 5; cstr.Format(L"%d", m_IntervalTime);
WritePrivateProfileString(L"Setting", L"IntervalTime", cstr, m_Ini);
UpdateQueuesThreads();
ChangeButtonStatus(TRUE);
break;
case 2: // Flash Memory
{
int type[9] = { 0, 0, 1, 1, 0, 1, 0, 1, 0 };
int size[9] = { 1024, 1024, 4, 4, 1024, 4, 1024, 4, 1024 };
int queues[9] = { 8, 1, 32, 1, 8, 32, 1, 1, 8 };
int threads[9] ={ 1, 1, 1, 1, 1, 1, 1, 1, 1 };
for (int i = 0; i < 9; i++)
{
key.Format(L"BenchType%d", i); value.Format(L"%d", type[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchSize%d", i); value.Format(L"%d", size[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchQueues%d", i); value.Format(L"%d", queues[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
key.Format(L"BenchThreads%d", i); value.Format(L"%d", threads[i]);
WritePrivateProfileString(L"Setting", key, value, m_Ini);
}
WritePrivateProfileString(L"Setting", L"Affinity", L"1", m_Ini);
}
m_MeasureTime = 1; cstr.Format(L"%d", m_MeasureTime);
WritePrivateProfileString(L"Setting", L"MeasureTime", cstr, m_Ini);
m_IntervalTime = 30; cstr.Format(L"%d", m_IntervalTime);
WritePrivateProfileString(L"Setting", L"IntervalTime", cstr, m_Ini);
UpdateQueuesThreads();
ChangeButtonStatus(TRUE);
break;
default:
OnSettingsQueuesThreads();
break;
}
}
BOOL CDiskMarkDlg::PreTranslateMessage(MSG* pMsg)
{
if( 0 != ::TranslateAccelerator(m_hWnd, m_hAccelerator, pMsg) )
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
#define STRICT_TYPED_ITEMIDS // Better type safety for IDLists
#include <shlobj.h> // Typical Shell header file
INT_PTR CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
if (lpData != NULL)
{
::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);
}
break;
}
return 0;
}
void CDiskMarkDlg::SelectDrive()
{
CString cstr;
if (m_DiskBenchStatus)
{
return ;
}
int previousComboDriveIndex = m_IndexTestDrive;
UpdateData(TRUE);
if (m_ComboDrive.GetCurSel() == m_MaxIndexTestDrive)
{
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
ITEMIDLIST __unaligned *idl;
LPMALLOC g_pMalloc;
TCHAR szTmp[MAX_PATH];
HRESULT hResult = SHGetMalloc(&g_pMalloc);
if (hResult == NOERROR)
{
bi.hwndOwner = this->m_hWnd;
bi.lpfn = (BFFCALLBACK)BrowseCallbackProc;
bi.lParam = (LPARAM)m_TestTargetPath.GetString();
bi.pszDisplayName = szTmp;
bi.lpszTitle = L"";
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI | BIF_NONEWFOLDERBUTTON;
idl = SHBrowseForFolderW(&bi);
if (idl != NULL)
{
if (SHGetPathFromIDList(idl, szTmp) != FALSE)
{
WritePrivateProfileString(L"Setting", L"TargetPath", szTmp, m_Ini);
m_TestTargetPath = szTmp;
}
g_pMalloc->Free(idl);
m_ComboDrive.SetToolTipText(m_TestTargetPath);
}
else
{
m_IndexTestDrive = previousComboDriveIndex;
m_ComboDrive.SetCurSel(m_IndexTestDrive);
m_ComboDrive.SetToolTipText(i18n(L"Title", L"TEST_DRIVE"));
}
g_pMalloc->Release();
}
}
else
{
m_ComboDrive.SetToolTipText(i18n(L"Title", L"TEST_DRIVE"));
}
}
LRESULT CDiskMarkDlg::OnUpdateScore(WPARAM wParam, LPARAM lParam)
{
UpdateScore();
return 0;
}
LRESULT CDiskMarkDlg::OnExitBenchmark(WPARAM wParam, LPARAM lParam)
{
ChangeButtonStatus(TRUE);
EnableMenus();
return 0;
}
void CDiskMarkDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CMainDialogFx::OnPaint();
}
}
HCURSOR CDiskMarkDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CDiskMarkDlg::OnOK()
{
}
void CDiskMarkDlg::OnExit()
{
OnCancel();
}
void CDiskMarkDlg::OnAbout()
{
m_AboutDlg = new CAboutDlg(this);
m_AboutDlg->Create(CAboutDlg::IDD, m_AboutDlg, ID_ABOUT, this);
}
void CDiskMarkDlg::OnCancel()
{
if (m_WinThread != NULL)
{
AfxMessageBox(m_MesStopBenchmark);
return;
}
UpdateData(TRUE);
CString cstr;
cstr.Format(L"%d", m_IndexTestUnit);
WritePrivateProfileString(L"Setting", L"TestUnit", cstr, m_Ini);
cstr.Format(L"%d", m_IndexTestCount);
WritePrivateProfileString(L"Setting", L"TestCount", cstr, m_Ini);
cstr.Format(L"%d", m_IndexTestSize);
WritePrivateProfileString(L"Setting", L"TestSize", cstr, m_Ini);
#ifdef MIX_MODE
if (m_MixMode)
{
cstr.Format(L"%d", m_IndexTestMix);
WritePrivateProfileString(L"Setting", L"TestMix", cstr, m_Ini);
}
#endif
if(m_IndexTestDrive != m_MaxIndexTestDrive)
{
cstr.Format(L"%d", m_ValueTestDrive.GetAt(0) - 'A');
}
else
{
cstr.Format(L"%d", 99);
}
WritePrivateProfileString(L"Setting", L"DriveLetter", cstr, m_Ini);
CMainDialogFx::OnCancel();
}
void CDiskMarkDlg::InitScore()
{
for (int i = 0; i < 9; i++)
{
m_ReadScore[i] = 0.0;
m_ReadLatency[i] = 0.0;
m_WriteScore[i] = 0.0;
m_WriteLatency[i] = 0.0;
#ifdef MIX_MODE
m_MixScore[i] = 0.0;
m_MixLatency[i] = 0.0;
#endif
}
UpdateScore();
}
void CDiskMarkDlg::UpdateScore()
{
UpdateData(TRUE);
if (m_Profile == PROFILE_DEMO)
{
SetMeter(&m_TestRead0, m_ReadScore[8], m_ReadLatency[8], m_BenchSize[8] * 1024, m_IndexTestUnit);
SetMeter(&m_TestWrite0, m_WriteScore[8], m_WriteLatency[8], m_BenchSize[8] * 1024, m_IndexTestUnit);
}
else if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
SetMeter(&m_TestRead0, m_ReadScore[4], m_ReadLatency[4], m_BenchSize[4] * 1024, SCORE_MBS);
SetMeter(&m_TestRead1, m_ReadScore[5], m_ReadLatency[5], m_BenchSize[5] * 1024, SCORE_MBS);
SetMeter(&m_TestRead2, m_ReadScore[5], m_ReadLatency[5], m_BenchSize[5] * 1024, SCORE_IOPS);
SetMeter(&m_TestRead3, m_ReadScore[5], m_ReadLatency[5], m_BenchSize[5] * 1024, SCORE_US);
SetMeter(&m_TestWrite0, m_WriteScore[4], m_WriteLatency[4], m_BenchSize[4] * 1024, SCORE_MBS);
SetMeter(&m_TestWrite1, m_WriteScore[5], m_WriteLatency[5], m_BenchSize[5] * 1024, SCORE_MBS);
SetMeter(&m_TestWrite2, m_WriteScore[5], m_WriteLatency[5], m_BenchSize[5] * 1024, SCORE_IOPS);
SetMeter(&m_TestWrite3, m_WriteScore[5], m_WriteLatency[5], m_BenchSize[5] * 1024, SCORE_US);
#ifdef MIX_MODE
if (m_MixMode)
{
SetMeter(&m_TestMix0, m_MixScore[4], m_MixLatency[4], m_BenchSize[4] * 1024, SCORE_MBS);
SetMeter(&m_TestMix1, m_MixScore[5], m_MixLatency[5], m_BenchSize[5] * 1024, SCORE_MBS);
SetMeter(&m_TestMix2, m_MixScore[5], m_MixLatency[5], m_BenchSize[5] * 1024, SCORE_IOPS);
SetMeter(&m_TestMix3, m_MixScore[5], m_MixLatency[5], m_BenchSize[5] * 1024, SCORE_US);
}
#endif
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
SetMeter(&m_TestRead0, m_ReadScore[6], m_ReadLatency[6], 1024 * 1024, SCORE_MBS);
SetMeter(&m_TestRead1, m_ReadScore[7], m_ReadLatency[7], 4 * 1024, SCORE_MBS);
SetMeter(&m_TestRead2, m_ReadScore[7], m_ReadLatency[7], 4 * 1024, SCORE_IOPS);
SetMeter(&m_TestRead3, m_ReadScore[7], m_ReadLatency[7], 4 * 1024, SCORE_US);
SetMeter(&m_TestWrite0, m_WriteScore[6], m_WriteLatency[6], 1024 * 1024, SCORE_MBS);
SetMeter(&m_TestWrite1, m_WriteScore[7], m_WriteLatency[7], 4 * 1024, SCORE_MBS);
SetMeter(&m_TestWrite2, m_WriteScore[7], m_WriteLatency[7], 4 * 1024, SCORE_IOPS);
SetMeter(&m_TestWrite3, m_WriteScore[7], m_WriteLatency[7], 4 * 1024, SCORE_US);
#ifdef MIX_MODE
if (m_MixMode)
{
SetMeter(&m_TestMix0, m_MixScore[6], m_MixLatency[6], 1024 * 1024, SCORE_MBS);
SetMeter(&m_TestMix1, m_MixScore[7], m_MixLatency[7], 4 * 1024, SCORE_MBS);
SetMeter(&m_TestMix2, m_MixScore[7], m_MixLatency[7], 4 * 1024, SCORE_IOPS);
SetMeter(&m_TestMix3, m_MixScore[7], m_MixLatency[7], 4 * 1024, SCORE_US);
}
#endif
}
else
{
SetMeter(&m_TestRead0, m_ReadScore[0], m_ReadLatency[0], m_BenchSize[0] * 1024, m_IndexTestUnit);
SetMeter(&m_TestRead1, m_ReadScore[1], m_ReadLatency[1], m_BenchSize[1] * 1024, m_IndexTestUnit);
SetMeter(&m_TestRead2, m_ReadScore[2], m_ReadLatency[2], m_BenchSize[2] * 1024, m_IndexTestUnit);
SetMeter(&m_TestRead3, m_ReadScore[3], m_ReadLatency[3], m_BenchSize[3] * 1024, m_IndexTestUnit);
SetMeter(&m_TestWrite0, m_WriteScore[0], m_WriteLatency[0], m_BenchSize[0] * 1024, m_IndexTestUnit);
SetMeter(&m_TestWrite1, m_WriteScore[1], m_WriteLatency[1], m_BenchSize[1] * 1024, m_IndexTestUnit);
SetMeter(&m_TestWrite2, m_WriteScore[2], m_WriteLatency[2], m_BenchSize[2] * 1024, m_IndexTestUnit);
SetMeter(&m_TestWrite3, m_WriteScore[3], m_WriteLatency[3], m_BenchSize[3] * 1024, m_IndexTestUnit);
#ifdef MIX_MODE
if (m_MixMode)
{
SetMeter(&m_TestMix0, m_MixScore[0], m_MixLatency[0], m_BenchSize[0] * 1024, m_IndexTestUnit);
SetMeter(&m_TestMix1, m_MixScore[1], m_MixLatency[1], m_BenchSize[1] * 1024, m_IndexTestUnit);
SetMeter(&m_TestMix2, m_MixScore[2], m_MixLatency[2], m_BenchSize[2] * 1024, m_IndexTestUnit);
SetMeter(&m_TestMix3, m_MixScore[3], m_MixLatency[3], m_BenchSize[3] * 1024, m_IndexTestUnit);
}
#endif
}
}
void CDiskMarkDlg::SetScoreToolTip(CStaticFx* control, double score, double latency, int blockSize)
{
CString cstr;
if (blockSize == -1)
{
cstr.Format(L"%.3f MB/s\r\n%.3f GB/s", score, score / 1000);
}
else if (score <= 0.0)
{
cstr.Format(L"%.3f MB/s\r\n%.3f GB/s\r\n%.3f IOPS\r\n%.3f μs", 0.0, 0.0, 0.0, 0.0);
}
else
{
cstr.Format(L"%.3f MB/s\r\n%.3f GB/s\r\n%.3f IOPS\r\n%.3f μs", score, score / 1000, score * 1000 * 1000 / blockSize, latency);
}
control->SetToolTipText(cstr);
}
void CDiskMarkDlg::OnSequentialPeak()
{
if (m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[4] = 0.0;
m_WriteScore[4] = 0.0;
m_ReadLatency[4] = 0.0;
m_WriteLatency[4] = 0.0;
#ifdef MIX_MODE
m_MixScore[4] = 0.0;
m_MixLatency[4] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench4, (void*)this);
if (m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnRandomPeak()
{
if (m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[5] = 0.0;
m_WriteScore[5] = 0.0;
m_ReadLatency[5] = 0.0;
m_WriteLatency[5] = 0.0;
#ifdef MIX_MODE
m_MixScore[5] = 0.0;
m_MixLatency[5] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench5, (void*)this);
if (m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnSequentialReal()
{
if (m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[6] = 0.0;
m_WriteScore[6] = 0.0;
m_ReadLatency[6] = 0.0;
m_WriteLatency[6] = 0.0;
#ifdef MIX_MODE
m_MixScore[6] = 0.0;
m_MixLatency[6] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench6, (void*)this);
if (m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnRandomReal()
{
if (m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[7] = 0.0;
m_WriteScore[7] = 0.0;
m_ReadLatency[7] = 0.0;
m_WriteLatency[7] = 0.0;
#ifdef MIX_MODE
m_MixScore[7] = 0.0;
m_MixLatency[7] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench7, (void*)this);
if (m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnTest0()
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
OnSequentialPeak();
return;
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
OnSequentialReal();
return;
}
if(m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[0] = 0.0;
m_WriteScore[0] = 0.0;
m_ReadLatency[0] = 0.0;
m_WriteLatency[0] = 0.0;
#ifdef MIX_MODE
m_MixScore[0] = 0.0;
m_MixLatency[0] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench0, (void*)this);
if(m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnTest1()
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
OnRandomPeak();
return;
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
OnRandomReal();
return;
}
if (m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[1] = 0.0;
m_WriteScore[1] = 0.0;
m_ReadLatency[1] = 0.0;
m_WriteLatency[1] = 0.0;
#ifdef MIX_MODE
m_MixScore[1] = 0.0;
m_MixLatency[1] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench1, (void*)this);
if (m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnTest2()
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
OnRandomPeak();
return;
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
OnRandomReal();
return;
}
if(m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[2] = 0.0;
m_WriteScore[2] = 0.0;
m_ReadLatency[2] = 0.0;
m_WriteLatency[2] = 0.0;
#ifdef MIX_MODE
m_MixScore[2] = 0.0;
m_MixLatency[2] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench2, (void*)this);
if(m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnTest3()
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
OnRandomPeak();
return;
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
OnRandomReal();
return;
}
if(m_WinThread == NULL)
{
UpdateData(TRUE);
m_ReadScore[3] = 0.0;
m_WriteScore[3] = 0.0;
m_ReadLatency[3] = 0.0;
m_WriteLatency[3] = 0.0;
#ifdef MIX_MODE
m_MixScore[3] = 0.0;
m_MixLatency[3] = 0.0;
#endif
UpdateScore();
m_DiskBenchStatus = TRUE;
m_WinThread = AfxBeginThread(ExecDiskBench3, (void*)this);
if(m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::OnAll()
{
if(m_WinThread == NULL)
{
UpdateData(TRUE);
InitScore();
m_DiskBenchStatus = TRUE;
if (m_Profile == PROFILE_DEMO)
{
m_WinThread = AfxBeginThread(ExecDiskBenchAllDemo, (void*)this);
}
else if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
m_WinThread = AfxBeginThread(ExecDiskBenchAllPeak, (void*)this);
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
m_WinThread = AfxBeginThread(ExecDiskBenchAllReal, (void*)this);
}
else
{
m_WinThread = AfxBeginThread(ExecDiskBenchAll, (void*)this);
}
if(m_WinThread == NULL)
{
m_DiskBenchStatus = FALSE;
}
else
{
ChangeButtonStatus(FALSE);
}
DisableMenus();
}
else
{
Stop();
}
}
void CDiskMarkDlg::Stop()
{
if(m_DiskBenchStatus)
{
m_DiskBenchStatus = FALSE;
if (pi.hProcess != NULL)
{
TerminateProcess(pi.hProcess, 0);
}
}
EnableMenus();
}
void CDiskMarkDlg::EnableMenus()
{
CMenu *menu = GetMenu();
menu->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED);
menu->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED);
menu->EnableMenuItem(2, MF_BYPOSITION | MF_ENABLED);
menu->EnableMenuItem(3, MF_BYPOSITION | MF_ENABLED);
menu->EnableMenuItem(4, MF_BYPOSITION | MF_ENABLED);
menu->EnableMenuItem(5, MF_BYPOSITION | MF_ENABLED);
SetMenu(menu);
}
void CDiskMarkDlg::DisableMenus()
{
CMenu *menu = GetMenu();
menu->EnableMenuItem(0, MF_BYPOSITION | MF_GRAYED);
menu->EnableMenuItem(1, MF_BYPOSITION | MF_GRAYED);
menu->EnableMenuItem(2, MF_BYPOSITION | MF_GRAYED);
menu->EnableMenuItem(3, MF_BYPOSITION | MF_GRAYED);
menu->EnableMenuItem(4, MF_BYPOSITION | MF_GRAYED);
menu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED);
SetMenu(menu);
}
CString CDiskMarkDlg::GetButtonText(int type, int size, int queues, int threads, int unit)
{
CString text;
if (size >= 1024)
{
if (type == BENCH_RND)
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX || m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
if (unit == SCORE_IOPS)
{
text.Format(L"RND%dM\r\n(IOPS)", size / 1024);
}
else if (unit == SCORE_US)
{
text.Format(L"RND%dM\r\n(μs)", size / 1024);
}
else if (unit == SCORE_GBS)
{
text.Format(L"RND%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
else
{
text.Format(L"RND%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"RND%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
else
{
text.Format(L"RND%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"SEQ%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
else
{
text.Format(L"SEQ%dM\r\nQ%dT%d", size / 1024, queues, threads);
}
}
}
else
{
if (type == BENCH_RND)
{
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX || m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
if (unit == SCORE_IOPS)
{
text.Format(L"RND%dK\r\n(IOPS)", size);
}
else if (unit == SCORE_US)
{
text.Format(L"RND%dK\r\n(μs)", size);
}
else if (unit == SCORE_GBS)
{
text.Format(L"RND%dK\r\nQ%dT%d", size, queues, threads);
}
else
{
text.Format(L"RND%dK\r\nQ%dT%d", size, queues, threads);
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"RND%dK\r\nQ%dT%d", size, queues, threads);
}
else
{
text.Format(L"RND%dK\r\nQ%dT%d", size, queues, threads);
}
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"SEQ%dK\r\nQ%dT%d", size, queues, threads);
}
else
{
text.Format(L"SEQ%dK\r\nQ%dT%d", size, queues, threads);
}
}
}
return text;
}
CString CDiskMarkDlg::GetButtonToolTipText(int type, int size, int queues, int threads, int unit)
{
CString text;
if (size >= 1024)
{
if (type == BENCH_RND)
{
if (unit == SCORE_IOPS)
{
text.Format(L"Random %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(IOPS)", size / 1024, queues, threads);
}
else if (unit == SCORE_US)
{
text.Format(L"Random %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(μs)", size / 1024, queues, threads);
}
else if (unit == SCORE_GBS)
{
text.Format(L"Random %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(GB/s)", size / 1024, queues, threads);
}
else
{
text.Format(L"Random %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(MB/s)", size / 1024, queues, threads);
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"Sequential %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(GB/s)", size / 1024, queues, threads);
}
else
{
text.Format(L"Sequential %dMiB\r\nQueues=%d\r\nThreads=%d\r\n(MB/s)", size / 1024, queues, threads);
}
}
}
else
{
if (type == BENCH_RND)
{
if (unit == SCORE_IOPS)
{
text.Format(L"Random %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(IOPS)", size, queues, threads);
}
else if (unit == SCORE_US)
{
text.Format(L"Random %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(μs)", size, queues, threads);
}
else if (unit == SCORE_GBS)
{
text.Format(L"Random %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(GB/s)", size, queues, threads);
}
else
{
text.Format(L"Random %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(MB/s)", size, queues, threads);
}
}
else
{
if (unit == SCORE_GBS)
{
text.Format(L"Sequential %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(GB/s)", size, queues, threads);
}
else
{
text.Format(L"Sequential %dKiB\r\nQueues=%d\r\nThreads=%d\r\n(MB/s)", size, queues, threads);
}
}
}
return text;
}
void CDiskMarkDlg::ChangeButtonStatus(BOOL status)
{
if(status)
{
CString title;
CString toolTip;
#ifdef MIX_MODE
m_ComboMix.EnableWindow(TRUE);
#endif
m_ComboCount.EnableWindow(TRUE);
m_ComboSize.EnableWindow(TRUE);
m_ComboDrive.EnableWindow(TRUE);
m_ComboUnit.EnableWindow(TRUE);
CString cstr;
if (m_MeasureTime == 5)
{
cstr.Format(L"All");
}
else
{
cstr.Format(L"All\n%dsec", m_MeasureTime);
}
m_ButtonAll.SetWindowTextW(cstr);
if (m_Profile == PROFILE_DEMO)
{
m_ButtonTest0.ShowWindow(SW_HIDE);
m_ButtonTest1.ShowWindow(SW_HIDE);
m_ButtonTest2.ShowWindow(SW_HIDE);
m_ButtonTest3.ShowWindow(SW_HIDE);
CString text, type;
if (m_BenchType[8] == BENCH_SEQ)
{
type = L"SEQ";
}
else
{
type = L"RND";
}
if (m_BenchSize[8] > 1000)
{
text.Format(L"%s %dMiB, Q=%d, T=%d", type.GetString(), m_BenchSize[8] / 1024, m_BenchQueues[8], m_BenchThreads[8]);
}
else
{
text.Format(L"%s %dKiB, Q=%d, T=%d", type.GetString(), m_BenchSize[8], m_BenchQueues[8], m_BenchThreads[8]);
}
m_DemoSetting.SetWindowTextW(text);
}
else if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
m_ButtonTest0.ShowWindow(SW_SHOW);
m_ButtonTest1.ShowWindow(SW_SHOW);
m_ButtonTest2.ShowWindow(SW_SHOW);
m_ButtonTest3.ShowWindow(SW_SHOW);
m_ButtonTest0.SetWindowTextW(GetButtonText(BENCH_SEQ, m_BenchSize[4], m_BenchQueues[4], m_BenchThreads[4], SCORE_MBS));
m_ButtonTest1.SetWindowTextW(GetButtonText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_MBS));
m_ButtonTest2.SetWindowTextW(GetButtonText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_IOPS));
m_ButtonTest3.SetWindowTextW(GetButtonText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_US));
m_ButtonTest0.SetToolTipText(GetButtonToolTipText(BENCH_SEQ, m_BenchSize[4], m_BenchQueues[4], m_BenchThreads[4], SCORE_MBS));
m_ButtonTest1.SetToolTipText(GetButtonToolTipText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_MBS));
m_ButtonTest2.SetToolTipText(GetButtonToolTipText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_IOPS));
m_ButtonTest3.SetToolTipText(GetButtonToolTipText(BENCH_RND, m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5], SCORE_US));
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
m_ButtonTest0.ShowWindow(SW_SHOW);
m_ButtonTest1.ShowWindow(SW_SHOW);
m_ButtonTest2.ShowWindow(SW_SHOW);
m_ButtonTest3.ShowWindow(SW_SHOW);
m_ButtonTest0.SetWindowTextW(GetButtonText(BENCH_SEQ, 1024, 1, 1, SCORE_MBS));
m_ButtonTest1.SetWindowTextW(GetButtonText(BENCH_RND, 4, 1, 1, SCORE_MBS));
m_ButtonTest2.SetWindowTextW(GetButtonText(BENCH_RND, 4, 1, 1, SCORE_IOPS));
m_ButtonTest3.SetWindowTextW(GetButtonText(BENCH_RND, 4, 1, 1, SCORE_US));
m_ButtonTest0.SetToolTipText(GetButtonToolTipText(BENCH_SEQ, 1024, 1, 1, SCORE_MBS));
m_ButtonTest1.SetToolTipText(GetButtonToolTipText(BENCH_RND, 4, 1, 1, SCORE_MBS));
m_ButtonTest2.SetToolTipText(GetButtonToolTipText(BENCH_RND, 4, 1, 1, SCORE_IOPS));
m_ButtonTest3.SetToolTipText(GetButtonToolTipText(BENCH_RND, 4, 1, 1, SCORE_US));
}
else
{
m_ButtonTest0.ShowWindow(SW_SHOW);
m_ButtonTest1.ShowWindow(SW_SHOW);
m_ButtonTest2.ShowWindow(SW_SHOW);
m_ButtonTest3.ShowWindow(SW_SHOW);
m_ButtonTest0.SetWindowTextW(GetButtonText(m_BenchType[0], m_BenchSize[0], m_BenchQueues[0], m_BenchThreads[0], m_IndexTestUnit));
m_ButtonTest1.SetWindowTextW(GetButtonText(m_BenchType[1], m_BenchSize[1], m_BenchQueues[1], m_BenchThreads[1], m_IndexTestUnit));
m_ButtonTest2.SetWindowTextW(GetButtonText(m_BenchType[2], m_BenchSize[2], m_BenchQueues[2], m_BenchThreads[2], m_IndexTestUnit));
m_ButtonTest3.SetWindowTextW(GetButtonText(m_BenchType[3], m_BenchSize[3], m_BenchQueues[3], m_BenchThreads[3], m_IndexTestUnit));
m_ButtonTest0.SetToolTipText(GetButtonToolTipText(m_BenchType[0], m_BenchSize[0], m_BenchQueues[0], m_BenchThreads[0], m_IndexTestUnit));
m_ButtonTest1.SetToolTipText(GetButtonToolTipText(m_BenchType[1], m_BenchSize[1], m_BenchQueues[1], m_BenchThreads[1], m_IndexTestUnit));
m_ButtonTest2.SetToolTipText(GetButtonToolTipText(m_BenchType[2], m_BenchSize[2], m_BenchQueues[2], m_BenchThreads[2], m_IndexTestUnit));
m_ButtonTest3.SetToolTipText(GetButtonToolTipText(m_BenchType[3], m_BenchSize[3], m_BenchQueues[3], m_BenchThreads[3], m_IndexTestUnit));
}
}
else
{
#ifdef MIX_MODE
m_ComboMix.EnableWindow(FALSE);
#endif
m_ComboCount.EnableWindow(FALSE);
m_ComboSize.EnableWindow(FALSE);
m_ComboDrive.EnableWindow(FALSE);
m_ComboUnit.EnableWindow(FALSE);
m_ButtonAll.SetWindowTextW(L"Stop");
m_ButtonTest0.SetWindowTextW(L"Stop");
m_ButtonTest1.SetWindowTextW(L"Stop");
m_ButtonTest2.SetWindowTextW(L"Stop");
m_ButtonTest3.SetWindowTextW(L"Stop");
}
}
LRESULT CDiskMarkDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
CString wstr = L"";
CString lstr = L"";
if(wParam != NULL)
{
wstr = *((CString*)wParam);
}
if(lParam != NULL)
{
lstr = *((CString*)lParam);
}
SetWindowTitle(wstr);
return 0;
}
void CDiskMarkDlg::SetMeter(CStaticFx* control, double score, double latency, int blockSize, int unit)
{
CString cstr;
double meterRatio = 0.0;
if (unit == SCORE_UNIT::SCORE_US)
{
if (latency > 0.0000000001)
{
meterRatio = 1 - 0.16666666666666 * log10(latency);
}
else
{
meterRatio = 0;
}
}
else
{
if (score > 0.1)
{
meterRatio = 0.16666666666666 * log10(score * 10);
}
else
{
meterRatio = 0;
}
}
if (meterRatio > 1.0)
{
meterRatio = 1.0;
}
if (unit == SCORE_UNIT::SCORE_IOPS)
{
double iops = score * 1000 * 1000 / blockSize;
if (m_Profile == PROFILE_DEMO)
{
if (iops >= 100000.0)
{
cstr.Format(L"%dk", (int)iops / 1000);
}
else
{
cstr.Format(L"%d", (int)iops);
}
}
else
{
if (iops >= 1000000.0)
{
cstr.Format(L"%d", (int)iops);
}
else
{
cstr.Format(L"%.2f", iops);
}
}
}
else if (unit == SCORE_UNIT::SCORE_US)
{
if (m_Profile == PROFILE_DEMO)
{
if (score <= 0.0)
{
cstr.Format(L"%.1f", 0.0);
if (*control == m_TestRead0) { m_TestRead0.SetLabelUnit(L"Read", L"μs"); }
if (*control == m_TestWrite0) { m_TestWrite0.SetLabelUnit(L"Write", L"μs"); }
}
else if (latency >= 1000000.0)
{
cstr.Format(L"%d", (int)latency / 1000);
if (*control == m_TestRead0) { m_TestRead0.SetLabelUnit(L"Read", L"ms"); }
if (*control == m_TestWrite0) { m_TestWrite0.SetLabelUnit(L"Write", L"ms"); }
}
else if (latency >= 1000.0)
{
cstr.Format(L"%d", (int)latency);
if (*control == m_TestRead0) { m_TestRead0.SetLabelUnit(L"Read", L"μs"); }
if (*control == m_TestWrite0) { m_TestWrite0.SetLabelUnit(L"Write", L"μs"); }
}
else
{
cstr.Format(L"%.1f", latency);
if (*control == m_TestRead0) { m_TestRead0.SetLabelUnit(L"Read", L"μs"); }
if (*control == m_TestWrite0) { m_TestWrite0.SetLabelUnit(L"Write", L"μs"); }
}
}
else
{
if (score <= 0.0)
{
cstr.Format(L"%.2f", 0.0);
}
else if (latency >= 1000000.0)
{
cstr.Format(L"%d", (int)latency);
}
else
{
cstr.Format(L"%.2f", latency);
}
}
}
else if (unit == SCORE_UNIT::SCORE_GBS)
{
if (m_Profile == PROFILE_DEMO)
{
cstr.Format(L"%.1f", score / 1000.0);
}
else
{
cstr.Format(L"%.3f", score / 1000.0);
}
}
else
{
if (m_Profile == PROFILE_DEMO)
{
if (score >= 1000.0)
{
cstr.Format(L"%d", (int)score);
}
else
{
cstr.Format(L"%.1f", score);
}
}
else
{
if (score >= 1000000.0)
{
cstr.Format(L"%d", (int)score);
}
else
{
cstr.Format(L"%.2f", score);
}
}
}
UpdateData(FALSE);
if (m_Profile == PROFILE_DEMO)
{
control->SetMeter(FALSE, meterRatio);
}
else
{
control->SetMeter(TRUE, meterRatio);
}
control->SetWindowTextW(cstr);
SetScoreToolTip(control, score, latency, blockSize);
}
void CDiskMarkDlg::InitDrive()
{
while (m_ComboDrive.GetCount())
{
m_ComboDrive.DeleteString(0);
}
CString cstr;
CString select;
// list up drive
TCHAR szDrives[256] = {0};
LPTSTR pDrive = szDrives;
TCHAR rootPath[4] = {0};
TCHAR fileSystem[32] = {0};
int count = 0;
GetLogicalDriveStrings(255, szDrives);
m_IndexTestDrive = 0;
m_TestDriveLetter = GetPrivateProfileInt(L"Setting", L"DriveLetter", 2, m_Ini); // Default "C:\"
while( pDrive[0] != L'\0' )
{
ULARGE_INTEGER freeBytesAvailableToCaller = {0};
ULARGE_INTEGER totalNumberOfBytes = {0};
ULARGE_INTEGER totalNumberOfFreeBytes = {0};
// _tcsupr_s(pDrive, sizeof(TCHAR) * 4);
int result = GetDriveType(pDrive);
int forward = (int)_tcslen( pDrive );
if(result == DRIVE_FIXED || result == DRIVE_REMOTE || result == DRIVE_REMOVABLE || result == DRIVE_RAMDISK)
{
pDrive[1] = L'\0';
cstr.Format(L"%C: ", pDrive[0]);
freeBytesAvailableToCaller.QuadPart = 0;
totalNumberOfBytes.QuadPart = 0;
totalNumberOfFreeBytes.QuadPart = 0;
if(GetDiskFreeSpaceEx(cstr, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes) != 0)
{
select += cstr;
if(totalNumberOfBytes.QuadPart < ((ULONGLONG)8 * 1024 * 1024 * 1024)) // < 8 GB
{
cstr.Format(L"%s: %.0f%% (%.0f/%.0fMiB)", pDrive,
(double)(totalNumberOfBytes.QuadPart - totalNumberOfFreeBytes.QuadPart) / (double)totalNumberOfBytes.QuadPart * 100,
(totalNumberOfBytes.QuadPart - totalNumberOfFreeBytes.QuadPart) / 1024 / 1024.0,
totalNumberOfBytes.QuadPart / 1024 / 1024.0);
}
else
{
cstr.Format(L"%s: %.0f%% (%.0f/%.0fGiB)", pDrive,
(double)(totalNumberOfBytes.QuadPart - totalNumberOfFreeBytes.QuadPart) / (double)totalNumberOfBytes.QuadPart * 100,
(totalNumberOfBytes.QuadPart - totalNumberOfFreeBytes.QuadPart) / 1024 / 1024 / 1024.0,
totalNumberOfBytes.QuadPart / 1024 / 1024 / 1024.0);
}
select += cstr;
if(m_TestDriveLetter == pDrive[0] - 'A')
{
m_IndexTestDrive = count;
}
count++;
m_ComboDrive.AddString(cstr);
}
}
pDrive += forward + 1;
}
m_ComboDrive.AddString(i18n(L"Menu", L"SELECT_FOLDER"));
TCHAR str[256];
GetPrivateProfileString(L"Setting", L"TargetPath", L"", str, 256, m_Ini);
m_TestTargetPath = str;
if (m_TestDriveLetter == 99)
{
m_IndexTestDrive = count;
}
m_MaxIndexTestDrive = count;
UpdateDriveToolTip();
UpdateData(FALSE);
}
void CDiskMarkDlg::UpdateDriveToolTip()
{
m_ComboDrive.SetCurSel(m_IndexTestDrive);
if (m_TestDriveLetter == 99 && !m_TestTargetPath.IsEmpty())
{
m_ComboDrive.SetToolTipText(m_TestTargetPath);
}
else
{
m_ComboDrive.SetToolTipText(i18n(L"Title", L"TEST_DRIVE"));
}
}
void CDiskMarkDlg::ChangeLang(CString LangName)
{
m_CurrentLangPath.Format(L"%s\\%s.lang", (LPTSTR)m_LangDir.GetString(), (LPTSTR)LangName.GetString());
CString cstr;
CMenu *menu = GetMenu();
CMenu subMenu;
cstr = i18n(L"Menu", L"FILE");
menu->ModifyMenu(0, MF_BYPOSITION | MF_STRING, 0, cstr);
cstr = i18n(L"Menu", L"SETTINGS");
menu->ModifyMenu(1, MF_BYPOSITION | MF_STRING, 1, cstr);
cstr = i18n(L"Menu", L"PROFILE");
menu->ModifyMenu(2, MF_BYPOSITION | MF_STRING, 2, cstr);
cstr = i18n(L"Menu", L"THEME");
menu->ModifyMenu(3, MF_BYPOSITION | MF_STRING, 3, cstr);
cstr = i18n(L"Menu", L"HELP");
menu->ModifyMenu(4, MF_BYPOSITION | MF_STRING, 4, cstr);
cstr = i18n(L"Menu", L"LANGUAGE");
if(cstr.Find(L"Language") >= 0)
{
cstr = L"&Language";
menu->ModifyMenu(5, MF_BYPOSITION | MF_STRING, 5, cstr);
}
else
{
menu->ModifyMenu(5, MF_BYPOSITION | MF_STRING, 5, cstr + L"(&Language)");
}
cstr = i18n(L"Menu", L"FILE_EXIT") + L"\tAlt + F4";
menu->ModifyMenu(ID_EXIT, MF_STRING, ID_EXIT, cstr);
cstr = i18n(L"Menu", L"SAVE_TEXT") + L"\tCtrl + T";
menu->ModifyMenu(ID_SAVE_TEXT, MF_STRING, ID_SAVE_TEXT, cstr);
cstr = i18n(L"Menu", L"SAVE_IMAGE") + L"\tCtrl + S";
menu->ModifyMenu(ID_SAVE_IMAGE, MF_STRING, ID_SAVE_IMAGE, cstr);
cstr = i18n(L"Menu", L"EDIT_COPY") + L"\tCtrl + Shift + C";
menu->ModifyMenu(ID_COPY, MF_STRING, ID_COPY, cstr);
subMenu.Attach(menu->GetSubMenu(1)->GetSafeHmenu());
cstr = i18n(L"Menu", L"TEST_DATA");
subMenu.ModifyMenu(0, MF_BYPOSITION, 0, cstr);
subMenu.Detach();
cstr = i18n(L"Menu", L"DEFAULT_RANDOM");
menu->ModifyMenu(ID_MODE_DEFAULT, MF_STRING, ID_MODE_DEFAULT, cstr);
cstr = i18n(L"Menu", L"ALL_ZERO");
menu->ModifyMenu(ID_MODE_ALL0X00, MF_STRING, ID_MODE_ALL0X00, cstr);
if (m_TestData == TEST_DATA_ALL0X00)
{
OnModeAll0x00();
}
else
{
OnModeDefault();
}
cstr = i18n(L"Dialog", L"DEFAULT");
menu->ModifyMenu(ID_SETTING_DEFAULT, MF_STRING, ID_SETTING_DEFAULT, cstr);
CheckRadioPresetMode();
cstr = i18n(L"Menu", L"SETTINGS") + L"\tCtrl + Q";
menu->ModifyMenu(ID_SETTINGS_QUEUESTHREADS, MF_STRING, ID_SETTINGS_QUEUESTHREADS, cstr);
cstr = i18n(L"Menu", L"PROFILE_DEFAULT");
menu->ModifyMenu(ID_PROFILE_DEFAULT, MF_STRING, ID_PROFILE_DEFAULT, cstr);
cstr = i18n(L"Menu", L"PROFILE_PEAK");
menu->ModifyMenu(ID_PROFILE_PEAK, MF_STRING, ID_PROFILE_PEAK, cstr);
cstr = i18n(L"Menu", L"PROFILE_REAL");
menu->ModifyMenu(ID_PROFILE_REAL, MF_STRING, ID_PROFILE_REAL, cstr);
cstr = i18n(L"Menu", L"PROFILE_DEMO");
menu->ModifyMenu(ID_PROFILE_DEMO, MF_STRING, ID_PROFILE_DEMO, cstr);
#ifdef MIX_MODE
cstr = i18n(L"Menu", L"PROFILE_DEFAULT") + L" [+Mix]";
menu->ModifyMenu(ID_PROFILE_DEFAULT_MIX, MF_STRING, ID_PROFILE_DEFAULT_MIX, cstr);
cstr = i18n(L"Menu", L"PROFILE_PEAK") + L" [+Mix]";
menu->ModifyMenu(ID_PROFILE_PEAK_MIX, MF_STRING, ID_PROFILE_PEAK_MIX, cstr);
cstr = i18n(L"Menu", L"PROFILE_REAL") + L" [+Mix]";
menu->ModifyMenu(ID_PROFILE_REAL_MIX, MF_STRING, ID_PROFILE_REAL_MIX, cstr);
#endif
cstr = i18n(L"Menu", L"HELP") + L" [Web]" + L"\tF1";
menu->ModifyMenu(ID_HELP, MF_STRING, ID_HELP, cstr);
cstr = i18n(L"Menu", L"HELP_ABOUT");
menu->ModifyMenu(ID_ABOUT, MF_STRING, ID_ABOUT, cstr);
// Theme
subMenu.Attach(menu->GetSubMenu(3)->GetSafeHmenu());
cstr = i18n(L"Menu", L"ZOOM");
subMenu.ModifyMenu(0, MF_BYPOSITION, 0, cstr);
subMenu.Detach();
cstr = i18n(L"Menu", L"AUTO");
menu->ModifyMenu(ID_ZOOM_AUTO, MF_STRING, ID_ZOOM_AUTO, cstr);
cstr = i18n(L"Menu", L"FONT_SETTING") + L"\tCtrl + F";
menu->ModifyMenu(ID_FONT_SETTING, MF_STRING, ID_FONT_SETTING, cstr);
CheckRadioZoomType();
switch (m_Profile)
{
case PROFILE_DEFAULT:
ProfileDefault();
break;
case PROFILE_PEAK:
ProfilePeak();
break;
case PROFILE_REAL:
ProfileReal();
break;
case PROFILE_DEMO:
ProfileDemo();
break;
#ifdef MIX_MODE
case PROFILE_DEFAULT_MIX:
ProfileDefaultMix();
break;
case PROFILE_PEAK_MIX:
ProfilePeakMix();
break;
case PROFILE_REAL_MIX:
ProfileRealMix();
break;
#endif
default:
ProfileDefault();
break;
}
switch (m_Benchmark)
{
case BENCHMARK_READ_WRITE:
BenchmarkReadWrite();
break;
case BENCHMARK_READ:
BenchmarkReadOnly();
break;
case BENCHMARK_WRITE:
BenchmarkWriteOnly();
break;
default:
BenchmarkReadWrite();
break;
}
SetMenu(menu);
m_MesStopBenchmark = i18n(L"Message", L"STOP_BENCHMARK");
m_MesDiskCapacityError = i18n(L"Message", L"DISK_CAPACITY_ERROR");
m_MesDiskCreateFileError = i18n(L"Message", L"DISK_CREATE_FILE_ERROR");
m_MesDiskWriteError = i18n(L"Message", L"DISK_WRITE_ERROR");
m_MesDiskReadError = i18n(L"Message", L"DISK_READ_ERROR");
m_MesDiskSpdNotFound = i18n(L"Message", L"DISK_SPD_NOT_FOUND");
UpdateDriveToolTip();
WritePrivateProfileString(L"Setting", L"Language", LangName, m_Ini);
}
BOOL CDiskMarkDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
// Select Theme
if (WM_THEME_ID <= wParam && wParam < WM_THEME_ID + (UINT)m_MenuArrayTheme.GetSize())
{
CMenu menu;
CMenu subMenu;
menu.Attach(GetMenu()->GetSafeHmenu());
subMenu.Attach(menu.GetSubMenu(MENU_THEME_INDEX)->GetSafeHmenu());
m_CurrentTheme = m_MenuArrayTheme.GetAt(wParam - WM_THEME_ID);
if (m_CurrentTheme.Compare(m_RandomThemeLabel) == 0)
{
m_CurrentTheme = GetRandomTheme();
m_RandomThemeLabel = L"Random";
m_RandomThemeName = L" (" + m_CurrentTheme + L")";
// ChangeTheme save the theme configuration to profile; so if we are on
// Random, then save Random to profile.
ChangeTheme(m_RandomThemeLabel);
}
else
{
ChangeTheme(m_MenuArrayTheme.GetAt(wParam - WM_THEME_ID));
m_RandomThemeName = L"";
}
subMenu.ModifyMenu(WM_THEME_ID, MF_STRING, WM_THEME_ID, m_RandomThemeLabel + m_RandomThemeName);
subMenu.CheckMenuRadioItem(WM_THEME_ID, WM_THEME_ID + (UINT)m_MenuArrayTheme.GetSize(),
(UINT)wParam, MF_BYCOMMAND);
subMenu.Detach();
menu.Detach();
if (m_Profile == PROFILE_DEMO && IsFileExist(m_ThemeDir + m_CurrentTheme + L"\\BackgroundDemo-300.png"))
{
m_BackgroundName = L"BackgroundDemo";
}
else
{
m_BackgroundName = L"Background";
}
UpdateThemeInfo();
UpdateDialogSize();
return TRUE;
}
// Select Language
if(WM_LANGUAGE_ID <= wParam && wParam < WM_LANGUAGE_ID + (UINT)m_MenuArrayLang.GetSize())
{
CMenu menu;
CMenu subMenu;
CMenu subMenuAN;
CMenu subMenuOZ;
menu.Attach(GetMenu()->GetSafeHmenu());
subMenu.Attach(menu.GetSubMenu(MENU_LANG_INDEX)->GetSafeHmenu());
subMenuAN.Attach(subMenu.GetSubMenu(0)->GetSafeHmenu());
subMenuOZ.Attach(subMenu.GetSubMenu(1)->GetSafeHmenu());
m_CurrentLang = m_MenuArrayLang.GetAt(wParam - WM_LANGUAGE_ID);
ChangeLang(m_MenuArrayLang.GetAt(wParam - WM_LANGUAGE_ID));
subMenuAN.CheckMenuRadioItem(WM_LANGUAGE_ID, WM_LANGUAGE_ID + (UINT)m_MenuArrayLang.GetSize(),
(UINT)wParam, MF_BYCOMMAND);
subMenuOZ.CheckMenuRadioItem(WM_LANGUAGE_ID, WM_LANGUAGE_ID + (UINT)m_MenuArrayLang.GetSize(),
(UINT)wParam, MF_BYCOMMAND);
subMenuOZ.Detach();
subMenuAN.Detach();
subMenu.Detach();
menu.Detach();
UpdateComboTooltip();
}
return CMainDialogFx::OnCommand(wParam, lParam);
}
void CDiskMarkDlg::OnCopy()
{
SaveText(L"");
}
void CDiskMarkDlg::OnSaveText()
{
CString path;
SYSTEMTIME st;
GetLocalTime(&st);
path.Format(L"%s_%04d%02d%02d%02d%02d%02d", PRODUCT_NAME, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
CString filter = L"TEXT (*.txt)|*.txt||";
CFileDialog save(FALSE, L"txt", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER, filter);
if (save.DoModal() == IDOK)
{
SaveText(save.GetPathName());
}
}
void CDiskMarkDlg::OnSaveImage()
{
SaveImage();
}
CString CDiskMarkDlg::GetResultString(int type, double score, double latency, int size, int queues, int threads)
{
CString result;
double iops = 0.0;
iops = score * 1000 * 1000 / ((double)size * 1024);
if (latency < 0.0)
{
latency = 0.0;
}
if (type == BENCH_RND)
{
if (size >= 1024)
{
result.Format(L" RND %4dMiB (Q=%3d, T=%2d): %9.3f MB/s [%9.1f IOPS] <%9.2f us>", size / 1024, queues, threads, score, iops, latency);
}
else
{
result.Format(L" RND %4dKiB (Q=%3d, T=%2d): %9.3f MB/s [%9.1f IOPS] <%9.2f us>", size, queues, threads, score, iops, latency);
}
}
else
{
if (size >= 1024)
{
result.Format(L" SEQ %4dMiB (Q=%3d, T=%2d): %9.3f MB/s [%9.1f IOPS] <%9.2f us>", size / 1024, queues, threads, score, iops, latency);
}
else
{
result.Format(L" SEQ %4dKiB (Q=%3d, T=%2d): %9.3f MB/s [%9.1f IOPS] <%9.2f us>", size, queues, threads, score, iops, latency);
}
}
return result;
}
void CDiskMarkDlg::SaveText(CString fileName)
{
CString cstr, clip;
UpdateData(TRUE);
if (m_Profile == PROFILE_DEMO)
{
clip = L"\
------------------------------------------------------------------------------\r\n\
%PRODUCT% %VERSION%%EDITION% (C) %COPY_YEAR% hiyohiyo\r\n\
Crystal Dew World: https://crystalmark.info/\r\n\
------------------------------------------------------------------------------\r\n\
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]\r\n\
* KB = 1000 bytes, KiB = 1024 bytes\r\n\
\r\n\
[Read]\r\n\
%BenchRead1%\r\n\
\r\n\
[Write]\r\n\
%BenchWrite1%\r\n\
\r\n\
Profile: Demo\r\n\
Test: %TestSize% (x%TestCount%)%Capacity%\r\n\
Mode:%TestMode%\r\n\
Time: Measure %MeasureTime% / Interval %IntervalTime% \r\n\
Date: %Date%\r\n\
OS: %OS%\r\n\
%Comment%";
}
else if (m_Profile == PROFILE_DEFAULT || m_Profile == PROFILE_DEFAULT_MIX)
{
clip = L"\
------------------------------------------------------------------------------\r\n\
%PRODUCT% %VERSION%%EDITION% (C) %COPY_YEAR% hiyohiyo\r\n\
Crystal Dew World: https://crystalmark.info/\r\n\
------------------------------------------------------------------------------\r\n\
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]\r\n\
* KB = 1000 bytes, KiB = 1024 bytes\r\n\
\r\n\
[Read]\r\n\
%BenchRead1%\r\n\
%BenchRead2%\r\n\
%BenchRead3%\r\n\
%BenchRead4%\r\n\
\r\n\
[Write]\r\n\
%BenchWrite1%\r\n\
%BenchWrite2%\r\n\
%BenchWrite3%\r\n\
%BenchWrite4%\r\n\
\r\n\
";
#ifdef MIX_MODE
if (m_MixMode)
{
clip += L"\
[Mix] %MixRatio%\r\n\
%BenchMix1%\r\n\
%BenchMix2%\r\n\
%BenchMix3%\r\n\
%BenchMix4%\r\n\
\r\n\
";
}
#endif
clip += L"\
Profile: Default\r\n\
Test: %TestSize% (x%TestCount%)%Capacity%\r\n\
Mode:%TestMode%\r\n\
Time: Measure %MeasureTime% / Interval %IntervalTime% \r\n\
Date: %Date%\r\n\
OS: %OS%\r\n\
%Comment%";
}
else
{
clip = L"\
------------------------------------------------------------------------------\r\n\
%PRODUCT% %VERSION%%EDITION% (C) %COPY_YEAR% hiyohiyo\r\n\
Crystal Dew World: https://crystalmark.info/\r\n\
------------------------------------------------------------------------------\r\n\
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]\r\n\
* KB = 1000 bytes, KiB = 1024 bytes\r\n\
\r\n\
[Read]\r\n\
%SequentialRead1%\r\n\
%RandomRead1%\r\n\
\r\n\
[Write]\r\n\
%SequentialWrite1%\r\n\
%RandomWrite1%\r\n\
\r\n\
";
#ifdef MIX_MODE
if (m_MixMode)
{
clip += L"\
[Mix] %MixRatio%\r\n\
%SequentialMix1%\r\n\
%RandomMix1%\r\n\
\r\n\
";
}
#endif
if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
clip += L"\
Profile: Peak\r\n\
";
}
else
{
clip += L"\
Profile: Real\r\n\
";
}
clip += L"\
Test: %TestSize% (x%TestCount%)%Capacity%\r\n\
Mode:%TestMode%\r\n\
Time: Measure %MeasureTime% / Interval %IntervalTime% \r\n\
Date: %Date%\r\n\
OS: %OS%\r\n\
%Comment%";
}
clip.Replace(L"%PRODUCT%", PRODUCT_NAME);
clip.Replace(L"%VERSION%", PRODUCT_VERSION);
cstr = PRODUCT_EDITION;
if(! cstr.IsEmpty())
{
clip.Replace(L"%EDITION%", L" " PRODUCT_EDITION);
}
else
{
clip.Replace(L"%EDITION%", PRODUCT_EDITION);
}
clip.Replace(L"%COPY_YEAR%", PRODUCT_COPY_YEAR);
double iops = 0.0;
double latency = 0.0;
if (m_Profile == PROFILE_DEMO)
{
clip.Replace(L"%BenchRead1%", GetResultString(m_BenchType[8], m_ReadScore[8], m_ReadLatency[8], m_BenchSize[8], m_BenchQueues[8], m_BenchThreads[8]));
clip.Replace(L"%BenchWrite1%", GetResultString(m_BenchType[8], m_WriteScore[8], m_WriteLatency[8], m_BenchSize[8], m_BenchQueues[8], m_BenchThreads[8]));
}
else if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
clip.Replace(L"%SequentialRead1%", GetResultString(BENCH_SEQ, m_ReadScore[4], m_ReadLatency[4], m_BenchSize[4], m_BenchQueues[4], m_BenchThreads[4]));
clip.Replace(L"%SequentialWrite1%", GetResultString(BENCH_SEQ, m_WriteScore[4], m_WriteLatency[4], m_BenchSize[4], m_BenchQueues[4], m_BenchThreads[4]));
clip.Replace(L"%RandomRead1%", GetResultString(BENCH_RND, m_ReadScore[5], m_ReadLatency[5], m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5]));
clip.Replace(L"%RandomWrite1%", GetResultString(BENCH_RND, m_WriteScore[5], m_WriteLatency[5], m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5]));
#ifdef MIX_MODE
if (m_MixMode)
{
clip.Replace(L"%SequentialMix1%", GetResultString(BENCH_SEQ, m_MixScore[4], m_MixLatency[4], m_BenchSize[4], m_BenchQueues[4], m_BenchThreads[4]));
clip.Replace(L"%RandomMix1%", GetResultString(BENCH_RND, m_MixScore[5], m_MixLatency[5], m_BenchSize[5], m_BenchQueues[5], m_BenchThreads[5]));
cstr.Format(L"Read %d%%/Write %d%%", 100 - m_MixRatio, m_MixRatio);
clip.Replace(L"%MixRatio%", cstr);
}
#endif
}
else if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
clip.Replace(L"%SequentialRead1%", GetResultString(BENCH_SEQ, m_ReadScore[6], m_ReadLatency[6], 1024, 1, 1));
clip.Replace(L"%SequentialWrite1%", GetResultString(BENCH_SEQ, m_WriteScore[6], m_WriteLatency[6], 1024, 1, 1));
clip.Replace(L"%RandomRead1%", GetResultString(BENCH_RND, m_ReadScore[7], m_ReadLatency[7], 4, 1, 1));
clip.Replace(L"%RandomWrite1%", GetResultString(BENCH_RND, m_WriteScore[7], m_WriteLatency[7], 4, 1, 1));
#ifdef MIX_MODE
if (m_MixMode)
{
clip.Replace(L"%SequentialMix1%", GetResultString(BENCH_SEQ, m_MixScore[6], m_MixLatency[6], 1024, 1, 1));
clip.Replace(L"%RandomMix1%", GetResultString(BENCH_RND, m_MixScore[7], m_MixLatency[7], 4, 1, 1));
cstr.Format(L"Read %d%%/Write %d%%", 100 - m_MixRatio, m_MixRatio);
clip.Replace(L"%MixRatio%", cstr);
}
#endif
}
else
{
clip.Replace(L"%BenchRead1%", GetResultString(m_BenchType[0], m_ReadScore[0], m_ReadLatency[0], m_BenchSize[0], m_BenchQueues[0], m_BenchThreads[0]));
clip.Replace(L"%BenchRead2%", GetResultString(m_BenchType[1], m_ReadScore[1], m_ReadLatency[1], m_BenchSize[1], m_BenchQueues[1], m_BenchThreads[1]));
clip.Replace(L"%BenchRead3%", GetResultString(m_BenchType[2], m_ReadScore[2], m_ReadLatency[2], m_BenchSize[2], m_BenchQueues[2], m_BenchThreads[2]));
clip.Replace(L"%BenchRead4%", GetResultString(m_BenchType[3], m_ReadScore[3], m_ReadLatency[3], m_BenchSize[3], m_BenchQueues[3], m_BenchThreads[3]));
clip.Replace(L"%BenchWrite1%", GetResultString(m_BenchType[0], m_WriteScore[0], m_WriteLatency[0], m_BenchSize[0], m_BenchQueues[0], m_BenchThreads[0]));
clip.Replace(L"%BenchWrite2%", GetResultString(m_BenchType[1], m_WriteScore[1], m_WriteLatency[1], m_BenchSize[1], m_BenchQueues[1], m_BenchThreads[1]));
clip.Replace(L"%BenchWrite3%", GetResultString(m_BenchType[2], m_WriteScore[2], m_WriteLatency[2], m_BenchSize[2], m_BenchQueues[2], m_BenchThreads[2]));
clip.Replace(L"%BenchWrite4%", GetResultString(m_BenchType[3], m_WriteScore[3], m_WriteLatency[3], m_BenchSize[3], m_BenchQueues[3], m_BenchThreads[3]));
#ifdef MIX_MODE
if (m_MixMode)
{
clip.Replace(L"%BenchMix1%", GetResultString(m_BenchType[0], m_MixScore[0], m_MixLatency[0], m_BenchSize[0], m_BenchQueues[0], m_BenchThreads[0]));
clip.Replace(L"%BenchMix2%", GetResultString(m_BenchType[1], m_MixScore[1], m_MixLatency[1], m_BenchSize[1], m_BenchQueues[1], m_BenchThreads[1]));
clip.Replace(L"%BenchMix3%", GetResultString(m_BenchType[2], m_MixScore[2], m_MixLatency[2], m_BenchSize[2], m_BenchQueues[2], m_BenchThreads[2]));
clip.Replace(L"%BenchMix4%", GetResultString(m_BenchType[3], m_MixScore[3], m_MixLatency[3], m_BenchSize[3], m_BenchQueues[3], m_BenchThreads[3]));
cstr.Format(L"Read %d%%/Write %d%%", 100 - m_MixRatio, m_MixRatio);
clip.Replace(L"%MixRatio%", cstr);
}
#endif
}
if (m_ValueTestSize.Find(L"MiB") == -1)
{
cstr.Format(L"%d GiB", _tstoi(m_ValueTestSize));
}
else
{
cstr.Format(L"%d MiB", _tstoi(m_ValueTestSize));
}
clip.Replace(L"%TestSize%", cstr);
cstr.Format(L"%d", _tstoi(m_ValueTestCount));
clip.Replace(L"%TestCount%", cstr);
cstr = L"";
if (m_AdminMode){ cstr += L" [Admin]"; }
if (m_TestData) { cstr += L" <0Fill>"; }
clip.Replace(L"%TestMode%", cstr);
m_Comment.GetWindowText(cstr);
if (cstr.IsEmpty())
{
clip.Replace(L"%Comment%", L"");
}else
{
clip.Replace(L"%Comment%", L"Comment: " + cstr + L"\r\n");
}
cstr.Format(L"%d sec", m_IntervalTime);
clip.Replace(L"%IntervalTime%", cstr);
cstr.Format(L"%d sec", m_MeasureTime);
clip.Replace(L"%MeasureTime%", cstr);
CString null;
GetOsName(cstr, null, null, null);
clip.Replace(L"%OS%", cstr);
SYSTEMTIME st;
GetLocalTime(&st);
cstr.Format(L"%04d/%02d/%02d %d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
clip.Replace(L"%Date%", cstr);
if (m_ValueTestDrive.FindOneOf(L":") != -1)
{
clip.Replace(L"%Capacity%", L" [" + m_ValueTestDrive + L"]");
}
else
{
clip.Replace(L"%Capacity%", L"");
}
if (fileName.IsEmpty())
{
if (OpenClipboard())
{
HGLOBAL clipbuffer;
TCHAR* buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(TCHAR) * (clip.GetLength() + 1));
if (clipbuffer != NULL)
{
buffer = (TCHAR*)GlobalLock(clipbuffer);
if (buffer == NULL)
{
GlobalFree(clipbuffer);
CloseClipboard();
return;
}
else
{
_tcscpy_s(buffer, clip.GetLength() + 1, LPCTSTR(clip));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_UNICODETEXT, clipbuffer);
}
}
CloseClipboard();
}
}
else
{
CT2A utf8(clip, CP_UTF8);
CFile file;
if (file.Open(fileName, CFile::modeCreate | CFile::modeWrite))
{
file.Write((char*)utf8, (UINT)strlen(utf8));
file.Close();
}
}
}
void CDiskMarkDlg::OnZoom100()
{
if (CheckRadioZoomType(ID_ZOOM_100, 100))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::CheckRadioPresetMode()
{
if (IsDefaultMode())
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_DEFAULT, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
}
else if (IsNVMe8Mode())
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_NVME_8, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
}
else if (IsFlashMemoryMode())
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_FLASH_MEMORY, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
}
else
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, 0, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
}
}
void CDiskMarkDlg::OnZoom125()
{
if (CheckRadioZoomType(ID_ZOOM_125, 125))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnZoom150()
{
if (CheckRadioZoomType(ID_ZOOM_150, 150))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnZoom200()
{
if (CheckRadioZoomType(ID_ZOOM_200, 200))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnZoom250()
{
if (CheckRadioZoomType(ID_ZOOM_250, 250))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnZoom300()
{
if (CheckRadioZoomType(ID_ZOOM_300, 300))
{
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnZoomAuto()
{
if (CheckRadioZoomType(ID_ZOOM_AUTO, 0))
{
UpdateDialogSize();
}
}
BOOL CDiskMarkDlg::CheckRadioZoomType(int id, int value)
{
if(m_ZoomType == value)
{
return FALSE;
}
CMenu *menu = GetMenu();
menu->CheckMenuRadioItem(ID_ZOOM_100, ID_ZOOM_AUTO, id, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_ZoomType = value;
CString cstr;
cstr.Format(L"%d", value);
WritePrivateProfileString(L"Setting", L"ZoomType", cstr, m_Ini);
ChangeZoomType(m_ZoomType);
return TRUE;
}
void CDiskMarkDlg::CheckRadioZoomType()
{
int id = ID_ZOOM_AUTO;
switch(m_ZoomType)
{
case 100: id = ID_ZOOM_100; break;
case 125: id = ID_ZOOM_125; break;
case 150: id = ID_ZOOM_150; break;
case 200: id = ID_ZOOM_200; break;
case 250: id = ID_ZOOM_250; break;
case 300: id = ID_ZOOM_300; break;
default: id = ID_ZOOM_AUTO;break;
}
CMenu *menu = GetMenu();
menu->CheckMenuRadioItem(ID_ZOOM_100, ID_ZOOM_AUTO, id, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
}
void CDiskMarkDlg::OnHelp()
{
if (GetUserDefaultLCID() == 0x0411) // Japanese
{
OpenUrl(URL_HELP_JA);
}
else // Other Language
{
OpenUrl(URL_HELP_EN);
}
}
void CDiskMarkDlg::OnCrystalDewWorld()
{
if (GetUserDefaultLCID() == 0x0411) // Japanese
{
OpenUrl(URL_CRYSTAL_DEW_WORLD_JA);
}
else // Other Language
{
OpenUrl(URL_CRYSTAL_DEW_WORLD_EN);
}
}
#ifdef MIX_MODE
#define ID_PROFILE_MAX ID_PROFILE_REAL_MIX
#else
#define ID_PROFILE_MAX ID_PROFILE_DEMO
#endif
void CDiskMarkDlg::OnSettingDefault()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_DEFAULT, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
SettingsQueuesThreads(0);
}
void CDiskMarkDlg::OnSettingNVMe8()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_NVME_8, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
SettingsQueuesThreads(1);
}
void CDiskMarkDlg::OnSettingFlashMemory()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_SETTING_DEFAULT, ID_SETTING_FLASH_MEMORY, ID_SETTING_FLASH_MEMORY, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
SettingsQueuesThreads(2);
}
void CDiskMarkDlg::OnModeDefault()
{
CMenu *menu = GetMenu();
menu->CheckMenuRadioItem(ID_MODE_DEFAULT, ID_MODE_ALL0X00, ID_MODE_DEFAULT, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_TestData = TEST_DATA_RANDOM;
WritePrivateProfileString(L"Setting", L"TestData", L"0", m_Ini);
SetWindowTitle(L"");
}
void CDiskMarkDlg::OnModeAll0x00()
{
CMenu *menu = GetMenu();
menu->CheckMenuRadioItem(ID_MODE_DEFAULT, ID_MODE_ALL0X00, ID_MODE_ALL0X00, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_TestData = TEST_DATA_ALL0X00;
WritePrivateProfileString(L"Setting", L"TestData", L"1", m_Ini);
SetWindowTitle(L"");
}
void CDiskMarkDlg::OnProfileDefault()
{
ShowWindow(SW_HIDE);
ProfileDefault();
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfileDefault()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_MAX, ID_PROFILE_DEFAULT, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_DEFAULT;
m_MixMode = FALSE;
WritePrivateProfileString(L"Setting", L"Profile", L"0", m_Ini);
m_BackgroundName = L"Background";
}
void CDiskMarkDlg::OnProfilePeak()
{
ShowWindow(SW_HIDE);
ProfilePeak();
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfilePeak()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_MAX, ID_PROFILE_PEAK, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_PEAK;
m_MixMode = FALSE;
WritePrivateProfileString(L"Setting", L"Profile", L"1", m_Ini);
m_BackgroundName = L"Background";
}
void CDiskMarkDlg::OnProfileReal()
{
ShowWindow(SW_HIDE);
ProfileReal();
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfileReal()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_MAX, ID_PROFILE_REAL, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_REAL;
m_MixMode = FALSE;
WritePrivateProfileString(L"Setting", L"Profile", L"2", m_Ini);
m_BackgroundName = L"Background";
}
void CDiskMarkDlg::OnProfileDemo()
{
ShowWindow(SW_HIDE);
ProfileDemo();
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfileDemo()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_MAX, ID_PROFILE_DEMO, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_DEMO;
m_MixMode = FALSE;
WritePrivateProfileString(L"Setting", L"Profile", L"3", m_Ini);
if (IsFileExist(m_ThemeDir + m_CurrentTheme + L"\\BackgroundDemo-300.png"))
{
m_BackgroundName = L"BackgroundDemo";
}
else
{
m_BackgroundName = L"Background";
}
}
#ifdef MIX_MODE
void CDiskMarkDlg::OnProfileDefaultMix()
{
ProfileDefaultMix();
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
ChangeButtonStatus(TRUE);
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfileDefaultMix()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_REAL_MIX, ID_PROFILE_DEFAULT_MIX, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_DEFAULT_MIX;
m_MixMode = TRUE;
WritePrivateProfileString(L"Setting", L"Profile", L"4", m_Ini);
m_BackgroundName = L"Background";
}
void CDiskMarkDlg::OnProfilePeakMix()
{
ProfilePeakMix();
ChangeButtonStatus(TRUE);
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfilePeakMix()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_REAL_MIX, ID_PROFILE_PEAK_MIX, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_PEAK_MIX;
m_MixMode = TRUE;
WritePrivateProfileString(L"Setting", L"Profile", L"5", m_Ini);
m_BackgroundName = L"Background";
}
void CDiskMarkDlg::OnProfileRealMix()
{
ProfileRealMix();
ChangeButtonStatus(TRUE);
UpdateUnitLabel();
InitScore();
UpdateDialogSize();
SetWindowTitle(L"");
}
void CDiskMarkDlg::ProfileRealMix()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_PROFILE_DEFAULT, ID_PROFILE_REAL_MIX, ID_PROFILE_REAL_MIX, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Profile = PROFILE_REAL_MIX;
m_MixMode = TRUE;
WritePrivateProfileString(L"Setting", L"Profile", L"6", m_Ini);
m_BackgroundName = L"Background";
}
#endif
void CDiskMarkDlg::OnBenchmarkReadWrite()
{
BenchmarkReadWrite();
}
void CDiskMarkDlg::BenchmarkReadWrite()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_BENCHMARK_READ_WRITE, ID_BENCHMARK_WRITE_ONLY, ID_BENCHMARK_READ_WRITE, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Benchmark = BENCHMARK_READ_WRITE;
WritePrivateProfileString(L"Setting", L"Benchmark", L"3", m_Ini);
}
void CDiskMarkDlg::OnBenchmarkReadOnly()
{
BenchmarkReadOnly();
}
void CDiskMarkDlg::BenchmarkReadOnly()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_BENCHMARK_READ_WRITE, ID_BENCHMARK_WRITE_ONLY, ID_BENCHMARK_READ_ONLY, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Benchmark = BENCHMARK_READ;
WritePrivateProfileString(L"Setting", L"Benchmark", L"1", m_Ini);
}
void CDiskMarkDlg::OnBenchmarkWriteOnly()
{
BenchmarkWriteOnly();
}
void CDiskMarkDlg::BenchmarkWriteOnly()
{
CMenu* menu = GetMenu();
menu->CheckMenuRadioItem(ID_BENCHMARK_READ_WRITE, ID_BENCHMARK_WRITE_ONLY, ID_BENCHMARK_WRITE_ONLY, MF_BYCOMMAND);
SetMenu(menu);
DrawMenuBar();
m_Benchmark = BENCHMARK_WRITE;
WritePrivateProfileString(L"Setting", L"Benchmark", L"2", m_Ini);
}
void CDiskMarkDlg::OnSettingsQueuesThreads()
{
if (! m_DiskBenchStatus)
{
CSettingsDlg* dlg = new CSettingsDlg(this);
dlg->DoModal();
UpdateQueuesThreads();
ChangeButtonStatus(TRUE);
UpdateData(FALSE);
delete dlg;
}
}
void CDiskMarkDlg::OnFontSetting()
{
CFontSelectionDlg fontSelection(this);
if (fontSelection.DoModal() == IDOK)
{
m_FontFace = fontSelection.GetFontFace();
m_FontScale = fontSelection.GetFontScale();
m_FontRatio = m_FontScale / 100.0;
m_FontRender = fontSelection.GetFontRender();
CString cstr;
WritePrivateProfileString(L"Setting", L"FontFace", L"\"" + m_FontFace + L"\"", m_Ini);
cstr.Format(L"%d", m_FontScale);
WritePrivateProfileString(L"Setting", L"FontScale", cstr, m_Ini);
cstr.Format(L"%d", m_FontRender);
WritePrivateProfileString(L"Setting", L"FontRender", cstr, m_Ini);
UpdateDialogSize();
}
}
void CDiskMarkDlg::OnCbnSelchangeComboDrive()
{
SelectDrive();
}
void CDiskMarkDlg::OnCbnSelchangeComboUnit()
{
UpdateScore();
UpdateUnitLabel();
}
#ifdef MIX_MODE
void CDiskMarkDlg::OnCbnSelchangeComboMix()
{
UpdateData(TRUE);
m_MixRatio = (9 - m_IndexTestMix) * 10;
CString cstr;
cstr.Format(L"%d", m_MixRatio);
WritePrivateProfileString(L"Setting", L"TestMix", cstr, m_Ini);
}
#endif
void CDiskMarkDlg::UpdateUnitLabel()
{
if (m_Profile == PROFILE_DEMO)
{
if (m_IndexTestUnit == SCORE_UNIT::SCORE_IOPS)
{
m_TestRead0.SetLabelUnit(L"Read", L"IOPS");
m_TestWrite0.SetLabelUnit(L"Write", L"IOPS");
}
else if (m_IndexTestUnit == SCORE_UNIT::SCORE_US)
{
if (m_ReadLatency[8] >= 1000000)
{
m_TestRead0.SetLabelUnit(L"Read", L"ms");
}
else
{
m_TestRead0.SetLabelUnit(L"Read", L"μs");
}
if (m_WriteLatency[8] >= 1000000)
{
m_TestWrite0.SetLabelUnit(L"Write", L"ms");
}
else
{
m_TestWrite0.SetLabelUnit(L"Write", L"μs");
}
}
else if (m_IndexTestUnit == SCORE_UNIT::SCORE_GBS)
{
m_TestRead0.SetLabelUnit(L"Read", L"GB/s");
m_TestWrite0.SetLabelUnit(L"Write", L"GB/s");
}
else
{
m_TestRead0.SetLabelUnit(L"Read", L"MB/s");
m_TestWrite0.SetLabelUnit(L"Write", L"MB/s");
}
}
else
{
m_TestRead0.SetLabelUnit(L"", L"");
m_TestWrite0.SetLabelUnit(L"", L"");
}
m_TestRead0.Invalidate();
m_TestWrite0.Invalidate();
if (m_Profile == PROFILE_REAL || m_Profile == PROFILE_REAL_MIX)
{
m_ReadUnit.SetWindowTextW(L"Read (MB/s)");
m_WriteUnit.SetWindowTextW(L"Write (MB/s)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (MB/s)");
#endif
return;
}
else if (m_Profile == PROFILE_PEAK || m_Profile == PROFILE_PEAK_MIX)
{
m_ReadUnit.SetWindowTextW(L"Read (MB/s)");
m_WriteUnit.SetWindowTextW(L"Write (MB/s)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (MB/s)");
#endif
return;
}
if (m_IndexTestUnit == SCORE_UNIT::SCORE_IOPS)
{
m_ReadUnit.SetWindowTextW(L"Read (IOPS)");
m_WriteUnit.SetWindowTextW(L"Write (IOPS)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (IOPS)");
#endif
}
else if (m_IndexTestUnit == SCORE_UNIT::SCORE_US)
{
m_ReadUnit.SetWindowTextW(L"Read (μs)");
m_WriteUnit.SetWindowTextW(L"Write (μs)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (μs)");
#endif
}
else if (m_IndexTestUnit == SCORE_UNIT::SCORE_GBS)
{
m_ReadUnit.SetWindowTextW(L"Read (GB/s)");
m_WriteUnit.SetWindowTextW(L"Write (GB/s)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (GB/s)");
#endif
}
else
{
m_ReadUnit.SetWindowTextW(L"Read (MB/s)");
m_WriteUnit.SetWindowTextW(L"Write (MB/s)");
#ifdef MIX_MODE
m_MixUnit.SetWindowTextW(L"Mix (MB/s)");
#endif
}
}
void CDiskMarkDlg::SetWindowTitle(CString message)
{
CString title;
if (!message.IsEmpty())
{
title.Format(L"%s", message.GetString());
}
else
{
title.Format(L"%s %s %s", PRODUCT_NAME, PRODUCT_VERSION, PRODUCT_EDITION);
}
if (m_AdminMode)
{
title += L" [Admin]";
}
if (m_TestData == TEST_DATA_ALL0X00)
{
title += L" <0Fill>";
}
SetWindowText(L" " + title + L" ");
}
void CDiskMarkDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// Move Focus to Hide Control
GetDlgItem(IDC_HIDE)->SetFocus();
CMainDialogFx::OnLButtonDown(nFlags, point);
}