OSDN Git Service

FilpathEdit.cpp, EditorFilepathBar.cpp: Fix for High DPI
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 14 Dec 2022 23:21:00 +0000 (08:21 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 14 Dec 2022 23:21:00 +0000 (08:21 +0900)
Src/EditorFilepathBar.cpp
Src/FilepathEdit.cpp

index 7700e63..b4a3cc9 100644 (file)
@@ -58,13 +58,15 @@ BOOL CEditorFilePathBar::Create(CWnd* pParentWnd)
                m_font.CreateFontIndirect(&ncm.lfStatusFont);
 
        // subclass the two custom edit boxes
-       const int nLogPixelsY = CClientDC(this).GetDeviceCaps(LOGPIXELSY);
-       int cx = -MulDiv(ncm.lfStatusFont.lfHeight, nLogPixelsY, 72);
+       const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       int cx = -pointToPixel(ncm.lfStatusFont.lfHeight);
+       int m = pointToPixel(3);
        for (int pane = 0; pane < static_cast<int>(std::size(m_Edit)); pane++)
        {
                m_Edit[pane].SubClassEdit(IDC_STATIC_TITLE_PANE0 + pane, this);
                m_Edit[pane].SetFont(&m_font);
-               m_Edit[pane].SetMargins(4, 4 + cx);
+               m_Edit[pane].SetMargins(m, m + cx);
        }
        return TRUE;
 };
@@ -76,7 +78,10 @@ CSize CEditorFilePathBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
        CFont *pOldFont = dc.SelectObject(&m_font);
        dc.GetTextMetrics(&tm);
        dc.SelectObject(pOldFont);
-       return CSize(SHRT_MAX, tm.tmHeight + 6);
+       const int lpx = dc.GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       int cy = pointToPixel(4);
+       return CSize(SHRT_MAX, 1 + tm.tmHeight + cy);
 }
 
 /** 
index 366edc4..f7b79c5 100644 (file)
@@ -284,7 +284,10 @@ void CFilepathEdit::OnNcPaint()
        COLORREF crBackGnd = m_bInEditing ? ::GetSysColor(COLOR_ACTIVEBORDER) : m_crBackGnd;
        CWindowDC dc(this);
        CRect rect;
-       const int margin = 4;
+       const int lpx = dc.GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       const int margin = pointToPixel(3);
+
        GetWindowRect(rect);
        rect.OffsetRect(-rect.TopLeft());
        dc.FillSolidRect(CRect(rect.left, rect.top, rect.left + margin, rect.bottom), GetDarkenColor(crBackGnd, 0.98));
@@ -304,7 +307,10 @@ void CFilepathEdit::OnPaint()
                CFont *pFontOld = dc.SelectObject(GetFont());   
                int oldBkMode = dc.SetBkMode(TRANSPARENT);
                CRect rc = GetMenuCharRect(&dc);
-               dc.TextOutW(rc.left + 4, 0, IsWin7_OrGreater() ? _T("\u2261") : _T("="));
+               const int lpx = dc.GetDeviceCaps(LOGPIXELSX);
+               auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+               const int margin = pointToPixel(3);
+               dc.TextOutW(rc.left + margin, 0, IsWin7_OrGreater() ? _T("\u2261") : _T("="));
                dc.SetBkMode(oldBkMode);
                dc.SelectObject(pFontOld);
        }
@@ -330,7 +336,9 @@ CRect CFilepathEdit::GetMenuCharRect(CDC* pDC)
        GetClientRect(rc);
        int charWidth;
        pDC->GetCharWidth('=', '=', &charWidth);
-       rc.left = rc.right - charWidth - 4 * 2;
+       const int lpx = pDC->GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       rc.left = rc.right - charWidth - pointToPixel(3 * 2);
        return rc;
 }