diff --git a/MusicPlayer2/AppearanceSettingDlg.cpp b/MusicPlayer2/AppearanceSettingDlg.cpp
index 220ed428..48e72063 100644
--- a/MusicPlayer2/AppearanceSettingDlg.cpp
+++ b/MusicPlayer2/AppearanceSettingDlg.cpp
@@ -172,7 +172,7 @@ BOOL CAppearanceSettingDlg::OnInitDialog()
#ifdef COMPILE_IN_WIN_XP
m_follow_system_color_check.EnableWindow(FALSE);
#else
- if (IsWindows8OrGreater())
+ if (theApp.m_win_version.IsWindows8OrLater())
m_follow_system_color_check.SetCheck(m_data.theme_color_follow_system);
else
m_follow_system_color_check.EnableWindow(FALSE); //Win8以下系统禁用此复选按钮
diff --git a/MusicPlayer2/Common.cpp b/MusicPlayer2/Common.cpp
index 5359154e..ccda15db 100644
--- a/MusicPlayer2/Common.cpp
+++ b/MusicPlayer2/Common.cpp
@@ -416,60 +416,6 @@ int CCommon::GetListWidth(CListBox & list)
return nMaxExtent;
}
-//void CCommon::FillStaticColor(CStatic & static_ctr, COLORREF color)
-//{
-// CDC* pDC = static_ctr.GetDC();
-// CRect rect;
-// static_ctr.GetClientRect(&rect);
-// CBrush BGBrush, *pOldBrush;
-// BGBrush.CreateSolidBrush(color);
-// pOldBrush = pDC->SelectObject(&BGBrush);
-// pDC->FillRect(&rect, &BGBrush);
-// pDC->SelectObject(pOldBrush);
-// BGBrush.DeleteObject();
-//}
-
-//COLORREF CCommon::ConvertToItemColor(COLORREF color)
-//{
-// int r, g, b, l;
-// int r1, g1, b1, l1;
-// r = GetRValue(color);
-// g = GetGValue(color);
-// b = GetBValue(color);
-// l = ((r * 299) + (g * 587) + (b * 114)) / 1000; //计算亮度值
-// if (l == 0) return color;
-//
-// l1 = (l - 80)*3 / 5 + 80; //计算新亮度
-// r1 = r * l1 / l;
-// g1 = g * l1 / l;
-// b1 = b * l1 / l;
-// return RGB(r1, g1, b1);
-//}
-
-
-bool CCommon::IsWindows10OrLater()
-{
-#ifdef COMPILE_IN_WIN_XP
- return false;
-#else
- DWORD dwMajorVer{}, dwMinorVer{}, dwBuildNumber{};
- HMODULE hModNtdll{};
- if (hModNtdll = ::LoadLibraryW(L"ntdll.dll"))
- {
- typedef void (WINAPI *pfRTLGETNTVERSIONNUMBERS)(DWORD*, DWORD*, DWORD*);
- pfRTLGETNTVERSIONNUMBERS pfRtlGetNtVersionNumbers;
- pfRtlGetNtVersionNumbers = (pfRTLGETNTVERSIONNUMBERS)::GetProcAddress(hModNtdll, "RtlGetNtVersionNumbers");
- if (pfRtlGetNtVersionNumbers)
- {
- pfRtlGetNtVersionNumbers(&dwMajorVer, &dwMinorVer, &dwBuildNumber);
- dwBuildNumber &= 0x0ffff;
- }
- ::FreeLibrary(hModNtdll);
- hModNtdll = NULL;
- }
- return (dwMajorVer >= 10u);
-#endif
-}
int CCommon::DeleteAFile(HWND hwnd, _tstring file)
{
diff --git a/MusicPlayer2/Common.h b/MusicPlayer2/Common.h
index b1c4e05b..99bd4391 100644
--- a/MusicPlayer2/Common.h
+++ b/MusicPlayer2/Common.h
@@ -121,11 +121,6 @@ public:
//获取一个列表控件最大长度项目宽度的像素值
static int GetListWidth(CListBox& list);
- //判断当前操作系统是否是Windows10或以上版本
- //VersionHelper中的函数无法判断Windows8.1和Windows10,
- //这个函数调用了RtlGetNtVersionNumbers获取系统版本信息
- static bool IsWindows10OrLater();
-
//删除一个文件
static int DeleteAFile(HWND hwnd, _tstring file);
//删除多个文件
diff --git a/MusicPlayer2/MusicPlayer2.cpp b/MusicPlayer2/MusicPlayer2.cpp
index 2bd80097..c183cc97 100644
--- a/MusicPlayer2/MusicPlayer2.cpp
+++ b/MusicPlayer2/MusicPlayer2.cpp
@@ -112,9 +112,6 @@ BOOL CMusicPlayerApp::InitInstance()
LoadSongData();
LoadConfig();
- //判断当前操作系统是否是Windows10。结果储存在CMusicPlayerApp类中的成员变量中,以便在全局范围内可访问
- m_is_windows10 = CCommon::IsWindows10OrLater();
-
//启动时检查更新
if (m_general_setting_data.check_update_when_start)
{
diff --git a/MusicPlayer2/MusicPlayer2.h b/MusicPlayer2/MusicPlayer2.h
index dfa7e14f..39d73cfe 100644
--- a/MusicPlayer2/MusicPlayer2.h
+++ b/MusicPlayer2/MusicPlayer2.h
@@ -14,6 +14,7 @@
#include "ColorConvert.h"
#include "DrawCommon.h"
#include "IniHelper.h"
+#include "WinVersionHelper.h"
//选项设置数据
struct PlaySettingData
@@ -79,7 +80,7 @@ public:
CMusicPlayerApp();
int m_dpi;
- bool m_is_windows10; //当前系统是否是Windows10
+ CWinVersionHelper m_win_version; //当前Windows的版本
CPlayer m_player;
wstring m_module_dir; //当前程序exe文件所在目录
diff --git a/MusicPlayer2/MusicPlayer2.vcxproj b/MusicPlayer2/MusicPlayer2.vcxproj
index 7d91030d..b883d341 100644
--- a/MusicPlayer2/MusicPlayer2.vcxproj
+++ b/MusicPlayer2/MusicPlayer2.vcxproj
@@ -200,6 +200,7 @@
+
@@ -252,6 +253,7 @@
+
diff --git a/MusicPlayer2/MusicPlayer2.vcxproj.filters b/MusicPlayer2/MusicPlayer2.vcxproj.filters
index 2fb1a5af..9be85bd4 100644
--- a/MusicPlayer2/MusicPlayer2.vcxproj.filters
+++ b/MusicPlayer2/MusicPlayer2.vcxproj.filters
@@ -144,6 +144,9 @@
{42734b69-66a6-4f02-b9f2-8c4675336e95}
+
+ {a08082b3-9202-4b64-9941-d4ff6059ae9b}
+
@@ -303,6 +306,9 @@
澶存枃浠跺拰婧愭枃浠禱鍏叡鐨勭被\IniHelper
+
+ 澶存枃浠跺拰婧愭枃浠禱鍏叡鐨勭被\WinVersionHelper
+
@@ -446,6 +452,9 @@
澶存枃浠跺拰婧愭枃浠禱鍏叡鐨勭被\IniHelper
+
+ 澶存枃浠跺拰婧愭枃浠禱鍏叡鐨勭被\WinVersionHelper
+
diff --git a/MusicPlayer2/MusicPlayerDlg.cpp b/MusicPlayer2/MusicPlayerDlg.cpp
index 41500aa1..9d379fb4 100644
--- a/MusicPlayer2/MusicPlayerDlg.cpp
+++ b/MusicPlayer2/MusicPlayerDlg.cpp
@@ -1113,14 +1113,14 @@ BOOL CMusicPlayerDlg::OnInitDialog()
#ifdef COMPILE_IN_WIN_XP
theApp.m_app_setting_data.theme_color_follow_system = false;
#else
- if (!IsWindows8OrGreater())
+ if (!theApp.m_win_version.IsWindows8OrLater())
theApp.m_app_setting_data.theme_color_follow_system = false;
#endif
//只有Win10以上的系统才能在Cortana搜索框中显示歌词
- if (!theApp.m_is_windows10)
+ if (!theApp.m_win_version.IsWindows10OrLater())
theApp.m_play_setting_data.show_lyric_in_cortana = false;
- m_cortana_lyric.SetEnable(theApp.m_is_windows10);
+ m_cortana_lyric.SetEnable(theApp.m_win_version.IsWindows10OrLater());
//设置窗口不透明度
SetTransparency();
@@ -1574,7 +1574,7 @@ void CMusicPlayerDlg::OnTimer(UINT_PTR nIDEvent)
COLORREF color;
//如果系统是Win10就取窗口最边缘像素的颜色,因为当win10设置成不显示标题栏颜色时,只有窗口边框最外面的一圈像素是主题颜色
//如果系统是Win8/8.1,则取窗口边缘住下2个像素的颜色,因为win8窗口标题栏总是当前主题色,而边框最外侧的颜色比主题色要深。
- if (theApp.m_is_windows10)
+ if (theApp.m_win_version.IsWindows10OrLater())
color = ::GetPixel(hDC, rect.TopLeft().x + DPI(8), rect.TopLeft().y);
else
color = ::GetPixel(hDC, rect.TopLeft().x + DPI(8), rect.TopLeft().y + DPI(2));
diff --git a/MusicPlayer2/PlaySettingsDlg.cpp b/MusicPlayer2/PlaySettingsDlg.cpp
index 9c449082..dc442800 100644
--- a/MusicPlayer2/PlaySettingsDlg.cpp
+++ b/MusicPlayer2/PlaySettingsDlg.cpp
@@ -71,7 +71,7 @@ BOOL CPlaySettingsDlg::OnInitDialog()
m_show_album_cover_in_cortana_check.SetCheck(m_data.cortana_show_album_cover);
m_cortana_icon_beat_check.SetCheck(m_data.cortana_icon_beat);
//m_cortana_icon_beat_check.EnableWindow(!m_data.cortana_show_album_cover);
- if (theApp.m_is_windows10)
+ if (theApp.m_win_version.IsWindows10OrLater())
{
m_show_lyric_in_cortana_check.SetCheck(m_data.show_lyric_in_cortana);
}
diff --git a/MusicPlayer2/ProgressStatic.cpp b/MusicPlayer2/ProgressStatic.cpp
index b0da1e40..d5128f8d 100644
--- a/MusicPlayer2/ProgressStatic.cpp
+++ b/MusicPlayer2/ProgressStatic.cpp
@@ -82,9 +82,9 @@ void CProgressStatic::OnPaint()
this->GetClientRect(&rect);
int max_length = rect.Width();
- //由于非windows10时为主窗口设置了WS_CLIPCHILDREN属性,所以这里需要手动重绘控件区域
- if (!theApp.m_is_windows10)
- DrawThemeParentBackground(m_hWnd, dc.GetSafeHdc(), &rect); //重绘控件区域
+ ////由于非windows10时为主窗口设置了WS_CLIPCHILDREN属性,所以这里需要手动重绘控件区域
+ //if (!theApp.m_win_version.IsWindows10OrLater())
+ // DrawThemeParentBackground(m_hWnd, dc.GetSafeHdc(), &rect); //重绘控件区域
//将矩形的高度更改为进度条显示的高度
if (m_progress_height < rect.Height() && m_progress_height > 0)
diff --git a/MusicPlayer2/WinVersionHelper.cpp b/MusicPlayer2/WinVersionHelper.cpp
new file mode 100644
index 00000000..43e7359b
--- /dev/null
+++ b/MusicPlayer2/WinVersionHelper.cpp
@@ -0,0 +1,65 @@
+#include "stdafx.h"
+#include "WinVersionHelper.h"
+
+
+CWinVersionHelper::CWinVersionHelper()
+{
+ DWORD dwMajorVer{}, dwMinorVer{}, dwBuildNumber{};
+ HMODULE hModNtdll{};
+ if (hModNtdll = ::LoadLibraryW(L"ntdll.dll"))
+ {
+ typedef void (WINAPI *pfRTLGETNTVERSIONNUMBERS)(DWORD*, DWORD*, DWORD*);
+ pfRTLGETNTVERSIONNUMBERS pfRtlGetNtVersionNumbers;
+ pfRtlGetNtVersionNumbers = (pfRTLGETNTVERSIONNUMBERS)::GetProcAddress(hModNtdll, "RtlGetNtVersionNumbers");
+ if (pfRtlGetNtVersionNumbers)
+ {
+ pfRtlGetNtVersionNumbers(&dwMajorVer, &dwMinorVer, &dwBuildNumber);
+ dwBuildNumber &= 0x0ffff;
+ }
+ ::FreeLibrary(hModNtdll);
+ hModNtdll = NULL;
+ }
+ m_major_version = dwMajorVer;
+ m_minor_version = dwMinorVer;
+ m_build_number = dwBuildNumber;
+}
+
+
+CWinVersionHelper::~CWinVersionHelper()
+{
+}
+
+bool CWinVersionHelper::IsWindows10FallCreatorOrLater() const
+{
+ if (m_major_version > 10)
+ return true;
+ else if (m_major_version == 10 && m_minor_version > 0)
+ return true;
+ else if (m_major_version == 10 && m_minor_version == 0 && m_build_number >= 16299)
+ return true;
+ else return false;
+}
+
+bool CWinVersionHelper::IsWindows7() const
+{
+ return (m_major_version == 6 && m_minor_version == 1);
+}
+
+bool CWinVersionHelper::IsWindows8Or8point1() const
+{
+ return (m_major_version == 6 && m_minor_version > 1);
+}
+
+bool CWinVersionHelper::IsWindows8OrLater() const
+{
+ if (m_major_version > 6)
+ return true;
+ else if (m_major_version == 6 && m_minor_version > 1)
+ return true;
+ else return false;
+}
+
+bool CWinVersionHelper::IsWindows10OrLater() const
+{
+ return (m_major_version >= 10);
+}
diff --git a/MusicPlayer2/WinVersionHelper.h b/MusicPlayer2/WinVersionHelper.h
new file mode 100644
index 00000000..6f3d522a
--- /dev/null
+++ b/MusicPlayer2/WinVersionHelper.h
@@ -0,0 +1,22 @@
+#pragma once
+class CWinVersionHelper
+{
+public:
+ CWinVersionHelper();
+ ~CWinVersionHelper();
+
+ bool IsWindows10FallCreatorOrLater() const; //判断当前Windows版本是否为Win10秋季创意者更新或更新的版本
+ bool IsWindows7() const; //判断Windows版本是否为Windows7
+ bool IsWindows8Or8point1() const; //判断Windows版本是否为Windows8或Windows8.1
+ bool IsWindows8OrLater() const;
+ bool IsWindows10OrLater() const;
+
+ int GetMajorVersion() const { return m_major_version; }
+ int GetMinorVersion() const { return m_minor_version; }
+ int GetBuildNumber() const { return m_build_number; }
+protected:
+ int m_major_version{};
+ int m_minor_version{};
+ int m_build_number{};
+};
+
diff --git a/MusicPlayer2/stdafx.h b/MusicPlayer2/stdafx.h
index 6e992a89..43fc0698 100644
--- a/MusicPlayer2/stdafx.h
+++ b/MusicPlayer2/stdafx.h
@@ -47,9 +47,9 @@
#include
#include
#include
-#ifndef COMPILE_IN_WIN_XP
-#include
-#endif
+//#ifndef COMPILE_IN_WIN_XP
+//#include
+//#endif
#include
#include