mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-04-11 17:37:22 +10:00
Windows 11 start menu button support
- handling of `Taskbar alignment` setting (left/center) - start menu position is based on position of start button - mouse clicks to original button now work properly (without triggering original menu) - custom button is properly positioned - Win+X works properly
This commit is contained in:
@@ -733,6 +733,19 @@ bool IsWin10RS4( void )
|
||||
return bIsRS4;
|
||||
}
|
||||
|
||||
static bool IsWin11Helper()
|
||||
{
|
||||
auto version = GetOSVersion();
|
||||
return version.dwMajorVersion >= 10 && version.dwBuildNumber >= 22000;
|
||||
}
|
||||
|
||||
// Returns true if the version is Windows11 or later
|
||||
bool IsWin11(void)
|
||||
{
|
||||
static bool bIsWin11 = IsWin11Helper();
|
||||
return bIsWin11;
|
||||
}
|
||||
|
||||
// Wrapper for IShellFolder::ParseDisplayName
|
||||
HRESULT ShParseDisplayName( const wchar_t *pszName, PIDLIST_ABSOLUTE *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut )
|
||||
{
|
||||
@@ -909,3 +922,31 @@ HFONT CreateFontSetting( const wchar_t *fontStr, int dpi )
|
||||
int size=-_wtol(token);
|
||||
return CreateFont(size*dpi/72,0,0,0,weight,bItalic?1:0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,name);
|
||||
}
|
||||
|
||||
static UINT WINAPI GetDpiForWindow(HWND hwnd)
|
||||
{
|
||||
static auto p = static_cast<decltype(&GetDpiForWindow)>((void*)GetProcAddress(GetModuleHandle(L"user32.dll"), "GetDpiForWindow"));
|
||||
if (p)
|
||||
return p(hwnd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT GetDpi(HWND hwnd)
|
||||
{
|
||||
UINT dpi = GetDpiForWindow(hwnd);
|
||||
if (!dpi)
|
||||
{
|
||||
// fall-back for older systems
|
||||
HDC hdc = GetDC(nullptr);
|
||||
dpi = GetDeviceCaps(hdc, LOGPIXELSY);
|
||||
ReleaseDC(nullptr, hdc);
|
||||
}
|
||||
|
||||
return dpi;
|
||||
}
|
||||
|
||||
int ScaleForDpi(HWND hwnd, int value)
|
||||
{
|
||||
return MulDiv(value, GetDpi(hwnd), USER_DEFAULT_SCREEN_DPI);
|
||||
}
|
||||
|
||||
@@ -67,6 +67,9 @@ bool IsWin10RS1( void );
|
||||
// Returns true if the version is Windows10 RS4 (Spring Creator Update) or later
|
||||
bool IsWin10RS4( void );
|
||||
|
||||
// Returns true if the version is Windows11 or later
|
||||
bool IsWin11();
|
||||
|
||||
// Wrapper for IShellFolder::ParseDisplayName
|
||||
HRESULT ShParseDisplayName( const wchar_t *pszName, PIDLIST_ABSOLUTE *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut );
|
||||
|
||||
@@ -82,6 +85,12 @@ void StringUpper( CString &str );
|
||||
// Create a font from the user settings
|
||||
HFONT CreateFontSetting( const wchar_t *fontStr, int dpi );
|
||||
|
||||
// Return DPI of given window (or system DPI on older systems)
|
||||
UINT GetDpi(HWND hwnd = nullptr);
|
||||
|
||||
// Scale given value according to DPI of window
|
||||
int ScaleForDpi(HWND hwnd, int value);
|
||||
|
||||
extern HINSTANCE g_Instance;
|
||||
|
||||
const int ANIM_BUTTON_TAG1='ANM';
|
||||
|
||||
Reference in New Issue
Block a user