OSDN Git Service

Make statusbars DPI-aware
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 26 Jun 2016 01:58:00 +0000 (10:58 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 26 Jun 2016 01:58:00 +0000 (10:58 +0900)
Src/DirFrame.cpp
Src/HexMergeFrm.cpp
Src/MainFrm.cpp

index 13c5a22..78e3a73 100644 (file)
@@ -48,11 +48,11 @@ enum
 /**
  * @brief Width of compare method name pane in statusbar
  */
-const int COMPMETHOD_PANEL_WIDTH = 140;
+const int COMPMETHOD_PANEL_WIDTH = 105;
 /**
  * @brief Width of filter name pane in statusbar
  */
-const int FILTER_PANEL_WIDTH = 180;
+const int FILTER_PANEL_WIDTH = 135;
 
 /**
  * @brief Bottom statusbar panels and indicators
@@ -128,11 +128,13 @@ int CDirFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
        }       
        
        String sText = _("RO");
-       m_wndStatusBar.SetPaneInfo(PANE_COMPMETHOD, ID_STATUS_FILTER, 0, COMPMETHOD_PANEL_WIDTH);
-       m_wndStatusBar.SetPaneInfo(PANE_FILTER, ID_STATUS_FILTER, 0, FILTER_PANEL_WIDTH);
-       m_wndStatusBar.SetPaneInfo(PANE_LEFT_RO, ID_STATUS_LEFTDIR_RO, 0, RO_PANEL_WIDTH);
-       m_wndStatusBar.SetPaneInfo(PANE_MIDDLE_RO, ID_STATUS_MIDDLEDIR_RO, 0, RO_PANEL_WIDTH);
-       m_wndStatusBar.SetPaneInfo(PANE_RIGHT_RO, ID_STATUS_RIGHTDIR_RO, 0, RO_PANEL_WIDTH);
+       const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       m_wndStatusBar.SetPaneInfo(PANE_COMPMETHOD, ID_STATUS_FILTER, 0, pointToPixel(COMPMETHOD_PANEL_WIDTH));
+       m_wndStatusBar.SetPaneInfo(PANE_FILTER, ID_STATUS_FILTER, 0, pointToPixel(FILTER_PANEL_WIDTH));
+       m_wndStatusBar.SetPaneInfo(PANE_LEFT_RO, ID_STATUS_LEFTDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
+       m_wndStatusBar.SetPaneInfo(PANE_MIDDLE_RO, ID_STATUS_MIDDLEDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
+       m_wndStatusBar.SetPaneInfo(PANE_RIGHT_RO, ID_STATUS_RIGHTDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
        m_wndStatusBar.SetPaneText(PANE_LEFT_RO, sText.c_str(), TRUE); 
        m_wndStatusBar.SetPaneText(PANE_MIDDLE_RO, sText.c_str(), TRUE); 
        m_wndStatusBar.SetPaneText(PANE_RIGHT_RO, sText.c_str(), TRUE);
index b5b6a55..4486b0e 100644 (file)
@@ -90,11 +90,13 @@ CHexMergeFrame::~CHexMergeFrame()
  */
 void CHexMergeFrame::CreateHexWndStatusBar(CStatusBar &wndStatusBar, CWnd *pwndPane)
 {
+       const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
        wndStatusBar.Create(pwndPane, WS_CHILD|WS_VISIBLE);
        wndStatusBar.SetIndicators(0, 3);
        wndStatusBar.SetPaneInfo(0, 0, SBPS_STRETCH, 0);
-       wndStatusBar.SetPaneInfo(1, 0, 0, 80);
-       wndStatusBar.SetPaneInfo(2, 0, 0, 80);
+       wndStatusBar.SetPaneInfo(1, 0, 0, pointToPixel(60));
+       wndStatusBar.SetPaneInfo(2, 0, 0, pointToPixel(60));
        wndStatusBar.SetParent(this);
        wndStatusBar.SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
 }
index 8591a67..e5edc2e 100644 (file)
@@ -359,9 +359,11 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
        theApp.SetIndicators(m_wndStatusBar, StatusbarIndicators,
                        countof(StatusbarIndicators));
 
-       m_wndStatusBar.SetPaneInfo(1, ID_STATUS_PLUGIN, 0, 300);
-       m_wndStatusBar.SetPaneInfo(2, ID_STATUS_MERGINGMODE, 0, 100); 
-       m_wndStatusBar.SetPaneInfo(3, ID_STATUS_DIFFNUM, 0, 150); 
+       const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
+       auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+       m_wndStatusBar.SetPaneInfo(1, ID_STATUS_PLUGIN, 0, pointToPixel(225));
+       m_wndStatusBar.SetPaneInfo(2, ID_STATUS_MERGINGMODE, 0, pointToPixel(75)); 
+       m_wndStatusBar.SetPaneInfo(3, ID_STATUS_DIFFNUM, 0, pointToPixel(112)); 
 
        if (GetOptionsMgr()->GetBool(OPT_SHOW_STATUSBAR) == false)
                CMDIFrameWnd::ShowControlBar(&m_wndStatusBar, false, 0);