From: <sag...@us...> - 2015-01-01 01:52:10
|
Revision: 4695 http://sourceforge.net/p/modplug/code/4695 Author: saga-games Date: 2015-01-01 01:52:01 +0000 (Thu, 01 Jan 2015) Log Message: ----------- [Fix] OpenMPT was leaking DC handles. Modified Paths: -------------- trunk/OpenMPT/mptrack/CListCtrl.h trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/Ctrl_com.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectVis.cpp trunk/OpenMPT/mptrack/Globals.cpp trunk/OpenMPT/mptrack/Globals.h trunk/OpenMPT/mptrack/MPTrackUtil.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/PatternFont.cpp trunk/OpenMPT/mptrack/PatternFont.h trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/plugins/common/WindowBase.h Modified: trunk/OpenMPT/mptrack/CListCtrl.h =================================================================== --- trunk/OpenMPT/mptrack/CListCtrl.h 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/CListCtrl.h 2015-01-01 01:52:01 UTC (rev 4695) @@ -28,7 +28,7 @@ { for(int i = 0; i < numItems; i++) { - InsertColumn(i, header[i].text, header[i].mask, Util::ScalePixels(header[i].width, GetDC())); + InsertColumn(i, header[i].text, header[i].mask, Util::ScalePixels(header[i].width, m_hWnd)); } } Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -611,8 +611,8 @@ CRect wnd; GetClientRect(&wnd); - const int dpiX = ::GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSY); + const int dpiX = Util::GetDPIx(m_hWnd); + const int dpiY = Util::GetDPIy(m_hWnd); // Move butttons to bottom of the window static const int buttons[] = { IDC_BUTTON1, IDC_BUTTON2, IDC_BUTTON3, IDC_BUTTON4, IDC_BUTTON5, IDC_BUTTON6 }; @@ -633,15 +633,17 @@ buttonHeight = MulDiv(CM_BT_HEIGHT, dpiY, 96); if(bkgnd) DeleteObject(bkgnd); - bkgnd = ::CreateCompatibleBitmap(::GetDC(m_hWnd), wnd.Width(), wnd.Height()); + HDC dc = ::GetDC(m_hWnd); + bkgnd = ::CreateCompatibleBitmap(dc, wnd.Width(), wnd.Height()); if(!moveRect && bkgnd) { - HDC bdc = ::CreateCompatibleDC(::GetDC(m_hWnd)); + HDC bdc = ::CreateCompatibleDC(dc); ::SelectObject(bdc,bkgnd); - ::BitBlt(bdc,0,0,wnd.Width(),wnd.Height(),::GetDC(m_hWnd),wnd.left,wnd.top,SRCCOPY); + ::BitBlt(bdc,0,0,wnd.Width(),wnd.Height(), dc,wnd.left,wnd.top,SRCCOPY); ::SelectObject(bdc,(HBITMAP)NULL); ::DeleteDC(bdc); } + ::ReleaseDC(m_hWnd, dc); nChannelsOld = 0; InvalidateRect(NULL, FALSE); @@ -682,8 +684,8 @@ PAINTSTRUCT pDC; ::BeginPaint(m_hWnd,&pDC); - const int dpiX = ::GetDeviceCaps(pDC.hdc, LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(pDC.hdc, LOGPIXELSY); + const int dpiX = Util::GetDPIx(m_hWnd); + const int dpiY = Util::GetDPIy(m_hWnd); CHAR s[256]; UINT c=0,l=0; @@ -1130,14 +1132,16 @@ if(select[n] || button == 0) { invalidate = client = m_drawableArea; - if(!bkgnd) bkgnd = ::CreateCompatibleBitmap(::GetDC(m_hWnd),client.Width(),client.Height()); + HDC dc = ::GetDC(m_hWnd); + if(!bkgnd) bkgnd = ::CreateCompatibleBitmap(dc,client.Width(),client.Height()); if(!moveRect && bkgnd){ - HDC bdc = ::CreateCompatibleDC(::GetDC(m_hWnd)); + HDC bdc = ::CreateCompatibleDC(dc); ::SelectObject(bdc,bkgnd); - ::BitBlt(bdc,0,0,client.Width(),client.Height(),::GetDC(m_hWnd),client.left,client.top,SRCCOPY); + ::BitBlt(bdc,0,0,client.Width(),client.Height(), dc,client.left,client.top,SRCCOPY); ::SelectObject(bdc,(HBITMAP)NULL); ::DeleteDC(bdc); } + ::ReleaseDC(m_hWnd, dc); moveRect = true; } break; Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -119,7 +119,7 @@ //------------------------------------------ { if (cy <= 1) cy = 188; //default to 188? why not.. - m_wndSplitter.SetRowInfo(0, Util::ScalePixels(cy, GetDC()), 15); + m_wndSplitter.SetRowInfo(0, Util::ScalePixels(cy, m_hWnd), 15); } @@ -248,7 +248,7 @@ if (pWnd) { pWnd->GetWindowRect(&rect); - int l = Util::ScalePixelsInv(rect.Height(), GetDC()); + int l = Util::ScalePixelsInv(rect.Height(), m_hWnd); //rewbs.varWindowSize - not the nicest piece of code, but we need to distinguish btw the views: if (strcmp(CViewGlobals::classCViewGlobals.m_lpszClassName, m_szCurrentViewClassName) == 0) TrackerSettings::Instance().glGeneralWindowHeight = l; @@ -277,7 +277,7 @@ if (pWnd) { pWnd->GetWindowRect(&rect); - return Util::ScalePixelsInv(rect.Height(), GetDC()); + return Util::ScalePixelsInv(rect.Height(), m_hWnd); } } return 15; // tidy default Modified: trunk/OpenMPT/mptrack/Ctrl_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_com.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Ctrl_com.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -117,7 +117,7 @@ static FontSetting previousFont; FontSetting font = TrackerSettings::Instance().commentsFont; // Point size to pixels - int32_t fontSize = -MulDiv(font.size, ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 720); + int32_t fontSize = -MulDiv(font.size, m_nDPIy, 720); charWidth = (-fontSize + 1) / 2; if(previousFont != font) { Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -890,6 +890,7 @@ { CModControlDlg::OnInitDialog(); m_bInitialized = FALSE; + SetRedraw(FALSE); m_ToolBar.Init(CMainFrame::GetMainFrame()->m_PatternIcons,CMainFrame::GetMainFrame()->m_PatternIconsDisabled); m_ToolBar.AddButton(IDC_INSTRUMENT_NEW, TIMAGE_INSTR_NEW); @@ -970,6 +971,7 @@ CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); m_EditPitchTempoLock.SetLimitText(4); + SetRedraw(TRUE); return FALSE; } Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -125,6 +125,7 @@ CModControlDlg::OnInitDialog(); if(!pMainFrm) return TRUE; + SetRedraw(FALSE); LockControls(); // Order List m_BtnNext.GetWindowRect(&rect); @@ -206,6 +207,7 @@ m_bInitialized = TRUE; UnlockControls(); + SetRedraw(TRUE); return FALSE; } Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -199,6 +199,7 @@ { CModControlDlg::OnInitDialog(); m_bInitialized = FALSE; + SetRedraw(FALSE); // Zoom Selection m_ComboZoom.SetItemData(m_ComboZoom.AddString("Auto"), 0); @@ -315,6 +316,7 @@ // Stretch to size check box OnEnableStretchToSize(); + SetRedraw(TRUE); return TRUE; } Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -132,11 +132,9 @@ if (m_nDetailLevel >= PatternCursor::effectColumn) m_szCell.cx += pfnt->nEltWidths[3] + pfnt->nEltWidths[4]; m_szCell.cy = pfnt->nHeight; - const int dpiX = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY); - m_szHeader.cx = MulDiv(m_szHeader.cx, dpiX, 96); - m_szHeader.cy = MulDiv(m_szHeader.cy, dpiY, 96); - m_szPluginHeader.cy = MulDiv(m_szPluginHeader.cy, dpiY, 96); + m_szHeader.cx = MulDiv(m_szHeader.cx, m_nDPIx, 96); + m_szHeader.cy = MulDiv(m_szHeader.cy, m_nDPIy, 96); + m_szPluginHeader.cy = MulDiv(m_szPluginHeader.cy, m_nDPIy, 96); m_szHeader.cy += m_szPluginHeader.cy; if(oldy != m_szCell.cy) @@ -168,7 +166,7 @@ } if(hint.GetType()[HINT_MPTOPTIONS]) { - PatternFont::UpdateFont(GetDC()); + PatternFont::UpdateFont(m_hWnd); UpdateColors(); UpdateSizes(); UpdateScrollSize(); @@ -226,7 +224,7 @@ } if (pt.x < 0) pt.x = 0; - pt.x += Util::ScalePixels(ROWHDR_WIDTH, GetDC()); + pt.x += Util::ScalePixels(ROWHDR_WIDTH, m_hWnd); pt.y = (cursor.GetRow() - yofs + m_nMidRow) * m_szCell.cy; if (pt.y < 0) pt.y = 0; @@ -468,11 +466,9 @@ UpdateSizes(); if ((pModDoc = GetDocument()) == nullptr) return; - const int dpiX = ::GetDeviceCaps(pDC->m_hDC, LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(pDC->m_hDC, LOGPIXELSY); - const int vuHeight = MulDiv(VUMETERS_HEIGHT, dpiY, 96); - const int colHeight = MulDiv(COLHDR_HEIGHT, dpiY, 96); - const int recordInsX = MulDiv(3, dpiY, 96); + const int vuHeight = MulDiv(VUMETERS_HEIGHT, m_nDPIy, 96); + const int colHeight = MulDiv(COLHDR_HEIGHT, m_nDPIy, 96); + const int recordInsX = MulDiv(3, m_nDPIy, 96); GetClientRect(&rcClient); hdc = pDC->m_hDC; @@ -1679,7 +1675,7 @@ const bool isPlaying = (pMainFrm->GetFollowSong(pModDoc) == m_hWnd); int x = m_szHeader.cx; CHANNELINDEX nChn = static_cast<CHANNELINDEX>(xofs); - const int yPos = rcClient.top + MulDiv(COLHDR_HEIGHT, ::GetDeviceCaps(hdc, LOGPIXELSY), 96); + const int yPos = rcClient.top + MulDiv(COLHDR_HEIGHT, m_nDPIy, 96); while ((nChn < pModDoc->GetNumChannels()) && (x < rcClient.right)) { ChnVUMeters[nChn] = (WORD)pnotify->pos[nChn]; Modified: trunk/OpenMPT/mptrack/EffectVis.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectVis.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/EffectVis.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -429,7 +429,7 @@ return; //Draw - const int lineWidth = Util::ScalePixels(1, GetDC()); + const int lineWidth = Util::ScalePixels(1, m_hWnd); const int nodeSizeHalf = m_nodeSizeHalf; const int nodeSizeHalf2 = nodeSizeHalf - lineWidth + 1; const int nodeSize = 2 * nodeSizeHalf + 1; @@ -753,7 +753,7 @@ { CDialog::OnInitDialog(); - int dpi = GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX); + int dpi = Util::GetDPIx(m_hWnd); m_nodeSizeHalf = MulDiv(3, dpi, 96); m_marginBottom = MulDiv(20, dpi, 96); m_innerBorder = MulDiv(4, dpi, 96); Modified: trunk/OpenMPT/mptrack/Globals.cpp =================================================================== --- trunk/OpenMPT/mptrack/Globals.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Globals.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -37,6 +37,11 @@ BEGIN_MESSAGE_MAP(CModControlDlg, CDialog) //{{AFX_MSG_MAP(CModControlDlg) ON_WM_SIZE() +#ifdef WM_DPICHANGED + ON_MESSAGE(WM_DPICHANGED, OnDPIChanged) +#else + ON_MESSAGE(0x02E0, OnDPIChanged) +#endif ON_MESSAGE(WM_MOD_UNLOCKCONTROLS, OnUnlockControls) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) @@ -64,11 +69,22 @@ //--------------------------------- { CDialog::OnInitDialog(); + m_nDPIx = Util::GetDPIx(m_hWnd); + m_nDPIy = Util::GetDPIy(m_hWnd); EnableToolTips(TRUE); return TRUE; } +LRESULT CModControlDlg::OnDPIChanged(WPARAM wParam, LPARAM) +//--------------------------------------------------------- +{ + m_nDPIx = LOWORD(wParam); + m_nDPIy = HIWORD(wParam); + return 0; +} + + void CModControlDlg::OnSize(UINT nType, int cx, int cy) //----------------------------------------------------- { @@ -227,6 +243,7 @@ void CModControlView::OnInitialUpdate() // called first time after construct //------------------------------------- { + CView::OnInitialUpdate(); CRect rect; CChildFrame *pParentFrame = (CChildFrame *)GetParentFrame(); @@ -545,6 +562,11 @@ //{{AFX_MSG_MAP(CModScrollView) ON_WM_DESTROY() ON_WM_MOUSEWHEEL() +#ifdef WM_DPICHANGED + ON_MESSAGE(WM_DPICHANGED, OnDPIChanged) +#else + ON_MESSAGE(0x02E0, OnDPIChanged) +#endif ON_MESSAGE(WM_MOD_VIEWMSG, OnReceiveModViewMsg) ON_MESSAGE(WM_MOD_DRAGONDROPPING, OnDragonDropping) ON_MESSAGE(WM_MOD_UPDATEPOSITION, OnUpdatePosition) @@ -601,6 +623,24 @@ } +void CModScrollView::OnInitialUpdate() +//------------------------------------ +{ + CScrollView::OnInitialUpdate(); + m_nDPIx = Util::GetDPIx(m_hWnd); + m_nDPIy = Util::GetDPIy(m_hWnd); +} + + +LRESULT CModScrollView::OnDPIChanged(WPARAM wParam, LPARAM) +//--------------------------------------------------------- +{ + m_nDPIx = LOWORD(wParam); + m_nDPIy = HIWORD(wParam); + return 0; +} + + void CModScrollView::UpdateIndicator(LPCSTR lpszText) //--------------------------------------------------- { Modified: trunk/OpenMPT/mptrack/Globals.h =================================================================== --- trunk/OpenMPT/mptrack/Globals.h 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Globals.h 2015-01-01 01:52:01 UTC (rev 4695) @@ -48,6 +48,7 @@ CModControlView &m_parent; HWND m_hWndView; LONG m_nLockCount; + int m_nDPIx, m_nDPIy; // Cached DPI settings BOOL m_bInitialized; public: @@ -96,6 +97,7 @@ afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg LRESULT OnUnlockControls(WPARAM, LPARAM) { if (m_nLockCount > 0) m_nLockCount--; return 0; } afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult); + afx_msg LRESULT OnDPIChanged(WPARAM = 0, LPARAM = 0); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; @@ -199,6 +201,7 @@ protected: HWND m_hWndCtrl; int m_nScrollPosX, m_nScrollPosY; + int m_nDPIx, m_nDPIy; // Cached DPI settings public: DECLARE_SERIAL(CModScrollView) @@ -213,6 +216,7 @@ public: //{{AFX_VIRTUAL(CModScrollView) + virtual void OnInitialUpdate(); virtual void OnDraw(CDC *) {} virtual void OnPrepareDC(CDC*, CPrintInfo*) {} virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint); @@ -230,7 +234,8 @@ afx_msg LRESULT OnReceiveModViewMsg(WPARAM wParam, LPARAM lParam); afx_msg BOOL OnMouseWheel(UINT fFlags, short zDelta, CPoint point); afx_msg LRESULT OnDragonDropping(WPARAM bDoDrop, LPARAM lParam) { return OnDragonDrop((BOOL)bDoDrop, (const DRAGONDROP *)lParam); } - LRESULT OnUpdatePosition(WPARAM, LPARAM); + afx_msg LRESULT OnUpdatePosition(WPARAM, LPARAM); + afx_msg LRESULT OnDPIChanged(WPARAM = 0, LPARAM = 0); // Fixes for 16-bit limitation in MFC's CScrollView virtual BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE); Modified: trunk/OpenMPT/mptrack/MPTrackUtil.h =================================================================== --- trunk/OpenMPT/mptrack/MPTrackUtil.h 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/MPTrackUtil.h 2015-01-01 01:52:01 UTC (rev 4695) @@ -96,16 +96,34 @@ } } + // Get horizontal DPI resolution + forceinline int GetDPIx(HWND hwnd) + { + HDC dc = ::GetDC(hwnd); + int dpi = ::GetDeviceCaps(dc, LOGPIXELSX); + ::ReleaseDC(hwnd, dc); + return dpi; + } + + // Get vertical DPI resolution + forceinline int GetDPIy(HWND hwnd) + { + HDC dc = ::GetDC(hwnd); + int dpi = ::GetDeviceCaps(dc, LOGPIXELSY); + ::ReleaseDC(hwnd, dc); + return dpi; + } + // Applies DPI scaling factor to some given size - forceinline int ScalePixels(int pixels, CDC *pDC) + forceinline int ScalePixels(int pixels, HWND hwnd) { - return MulDiv(pixels, ::GetDeviceCaps(pDC->m_hDC, LOGPIXELSX), 96); + return MulDiv(pixels, GetDPIx(hwnd), 96); } // Removes DPI scaling factor from some given size - forceinline int ScalePixelsInv(int pixels, CDC *pDC) + forceinline int ScalePixelsInv(int pixels, HWND hwnd) { - return MulDiv(pixels, 96, ::GetDeviceCaps(pDC->m_hDC, LOGPIXELSX)); + return MulDiv(pixels, 96, GetDPIx(hwnd)); } } Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -289,12 +289,14 @@ m_hIcon = theApp.LoadIcon(IDR_MAINFRAME); // Toolbar and other icons - m_MiscIcons.Create(IDB_IMAGELIST, 16, 16, IMGLIST_NUMIMAGES, 1, GetDC()); - m_MiscIconsDisabled.Create(IDB_IMAGELIST, 16, 16, IMGLIST_NUMIMAGES, 1, GetDC(), true); - m_PatternIcons.Create(IDB_PATTERNS, 16, 16, PATTERNIMG_NUMIMAGES, 1, GetDC()); - m_PatternIconsDisabled.Create(IDB_PATTERNS, 16, 16, PATTERNIMG_NUMIMAGES, 1, GetDC(), true); - m_EnvelopeIcons.Create(IDB_ENVTOOLBAR, 20, 18, ENVIMG_NUMIMAGES, 1, GetDC()); - m_SampleIcons.Create(IDB_SMPTOOLBAR, 20, 18, SAMPLEIMG_NUMIMAGES, 1, GetDC()); + CDC *dc = GetDC(); + m_MiscIcons.Create(IDB_IMAGELIST, 16, 16, IMGLIST_NUMIMAGES, 1, dc); + m_MiscIconsDisabled.Create(IDB_IMAGELIST, 16, 16, IMGLIST_NUMIMAGES, 1, dc, true); + m_PatternIcons.Create(IDB_PATTERNS, 16, 16, PATTERNIMG_NUMIMAGES, 1, dc); + m_PatternIconsDisabled.Create(IDB_PATTERNS, 16, 16, PATTERNIMG_NUMIMAGES, 1, dc, true); + m_EnvelopeIcons.Create(IDB_ENVTOOLBAR, 20, 18, ENVIMG_NUMIMAGES, 1, dc); + m_SampleIcons.Create(IDB_SMPTOOLBAR, 20, 18, SAMPLEIMG_NUMIMAGES, 1, dc); + ReleaseDC(dc); m_hGUIFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); if (m_hGUIFont == NULL) m_hGUIFont = (HFONT)GetStockObject(ANSI_VAR_FONT); Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -130,7 +130,7 @@ ///////////////////////////////////////////////////////////////////// // CMainToolBar -#define SCALEWIDTH(x) (Util::ScalePixels(x, GetDC())) +#define SCALEWIDTH(x) (Util::ScalePixels(x, m_hWnd)) // Play Command #define PLAYCMD_INDEX 10 @@ -237,8 +237,10 @@ if (!CToolBar::Create(parent, dwStyle)) return FALSE; - m_ImageList.Create(IDB_MAINBAR, 16, 16, IMGLIST_NUMIMAGES, 1, GetDC()); - m_ImageListDisabled.Create(IDB_MAINBAR, 16, 16, IMGLIST_NUMIMAGES, 1, GetDC(), true); + CDC *dc = GetDC(); + m_ImageList.Create(IDB_MAINBAR, 16, 16, IMGLIST_NUMIMAGES, 1, dc); + m_ImageListDisabled.Create(IDB_MAINBAR, 16, 16, IMGLIST_NUMIMAGES, 1, dc, true); + ReleaseDC(dc); GetToolBarCtrl().SetImageList(&m_ImageList); GetToolBarCtrl().SetDisabledImageList(&m_ImageListDisabled); @@ -640,7 +642,7 @@ m_pModTree = new CModTree(m_pModTreeData); if (m_pModTree) m_pModTree->SubclassDlgItem(IDC_TREEVIEW, this); m_dwStatus = 0; - m_sizeDefault.cx = Util::ScalePixels(TrackerSettings::Instance().glTreeWindowWidth, GetDC()) + 3; + m_sizeDefault.cx = Util::ScalePixels(TrackerSettings::Instance().glTreeWindowWidth, m_hWnd) + 3; m_sizeDefault.cy = 32767; return l; } @@ -718,7 +720,7 @@ CSize CModTreeBar::CalcFixedLayout(BOOL, BOOL) //-------------------------------------------- { - int width = Util::ScalePixels(TrackerSettings::Instance().glTreeWindowWidth, GetDC()); + int width = Util::ScalePixels(TrackerSettings::Instance().glTreeWindowWidth, m_hWnd); CSize sz; m_sizeDefault.cx = width; m_sizeDefault.cy = 32767; @@ -870,7 +872,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if ((m_nTrackPos != (UINT)rect.Width()) && (pMainFrm)) { - TrackerSettings::Instance().glTreeWindowWidth = Util::ScalePixelsInv(m_nTrackPos - 3, GetDC()); + TrackerSettings::Instance().glTreeWindowWidth = Util::ScalePixelsInv(m_nTrackPos - 3, m_hWnd); m_sizeDefault.cx = m_nTrackPos; m_sizeDefault.cy = 32767; pMainFrm->RecalcLayout(); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -225,7 +225,7 @@ MemsetZero(lf); const int32_t size = patternFont.size < 10 ? 120 : patternFont.size; // Point size to pixels - lf.lfHeight = -MulDiv(size, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 720); + lf.lfHeight = -MulDiv(size, Util::GetDPIy(m_hWnd), 720); lf.lfWeight = patternFont.flags[FontSetting::Bold] ? FW_BOLD : FW_NORMAL; lf.lfItalic = patternFont.flags[FontSetting::Italic] ? TRUE : FALSE; mpt::String::Copy(lf.lfFaceName, patternFont.name); @@ -261,7 +261,7 @@ LOGFONT lf; MemsetZero(lf); // Point size to pixels - lf.lfHeight = -MulDiv(commentFont.size, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 720); + lf.lfHeight = -MulDiv(commentFont.size, Util::GetDPIy(m_hWnd), 720); lf.lfWeight = commentFont.flags[FontSetting::Bold] ? FW_BOLD : FW_NORMAL; lf.lfItalic = commentFont.flags[FontSetting::Italic] ? TRUE : FALSE; mpt::String::Copy(lf.lfFaceName, commentFont.name); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -1052,7 +1052,7 @@ { // On high-DPI devices, automatically upscale pattern font FontSetting font = TrackerSettings::Instance().patternFont; - font.size = Clamp(::GetDeviceCaps(m_pMainWnd->GetDC()->m_hDC, LOGPIXELSX) / 96 - 1, 0, 9); + font.size = Clamp(Util::GetDPIy(m_pMainWnd->m_hWnd) / 96 - 1, 0, 9); TrackerSettings::Instance().patternFont = font; new WelcomeDlg(m_pMainWnd); } @@ -1348,7 +1348,9 @@ BOOL CSplashScreen::OnInitDialog() //-------------------------------- { - bitmap->ToDIB(m_Bitmap, GetDC()); + CDC *dc = GetDC(); + bitmap->ToDIB(m_Bitmap, dc); + ReleaseDC(dc); CRect rect; int cx, cy, newcx, newcy; Modified: trunk/OpenMPT/mptrack/PatternFont.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternFont.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/PatternFont.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -107,8 +107,8 @@ } } -void PatternFont::UpdateFont(CDC *dc) -//----------------------------------- +void PatternFont::UpdateFont(HWND hwnd) +//------------------------------------- { FontSetting font = TrackerSettings::Instance().patternFont; const PATTERNFONT *builtinFont = nullptr; @@ -238,11 +238,11 @@ } // Create our own font! - // Point size to pixels - font.size = -MulDiv(font.size, ::GetDeviceCaps(dc->m_hDC, LOGPIXELSY), 720); CDC hDC; - hDC.CreateCompatibleDC(dc); + hDC.CreateCompatibleDC(CDC::FromHandle(::GetDC(hwnd))); + // Point size to pixels + font.size = -MulDiv(font.size, Util::GetDPIy(hwnd), 720); CFont gdiFont; gdiFont.CreateFont(font.size, 0, 0, 0, font.flags[FontSetting::Bold] ? FW_BOLD : FW_NORMAL, font.flags[FontSetting::Italic] ? TRUE : FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS, NONANTIALIASED_QUALITY, FIXED_PITCH | FF_DONTCARE, font.name.c_str()); Modified: trunk/OpenMPT/mptrack/PatternFont.h =================================================================== --- trunk/OpenMPT/mptrack/PatternFont.h 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/PatternFont.h 2015-01-01 01:52:01 UTC (rev 4695) @@ -46,7 +46,7 @@ public: static const PATTERNFONT *currentFont; - static void UpdateFont(CDC *dc); + static void UpdateFont(HWND hwnd); static void DeleteFontData(); }; Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -105,8 +105,8 @@ ::EnableWindow(::GetDlgItem(m_hWnd, IDOK), FALSE); } - const int dpiX = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY); + const int dpiX = Util::GetDPIx(m_hWnd); + const int dpiY = Util::GetDPIy(m_hWnd); MoveWindow(MulDiv(TrackerSettings::Instance().gnPlugWindowX, dpiX, 96), MulDiv(TrackerSettings::Instance().gnPlugWindowY, dpiY, 96), MulDiv(TrackerSettings::Instance().gnPlugWindowWidth, dpiX, 96), @@ -223,8 +223,8 @@ { CRect rect; GetWindowRect(&rect); - const int dpiX = ::GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSY); + const int dpiX = Util::GetDPIx(m_hWnd); + const int dpiY = Util::GetDPIy(m_hWnd); TrackerSettings::Instance().gnPlugWindowX = MulDiv(rect.left, 96, dpiX); TrackerSettings::Instance().gnPlugWindowY = MulDiv(rect.top, 96, dpiY); TrackerSettings::Instance().gnPlugWindowWidth = MulDiv(rect.Width(), 96, dpiY); @@ -728,8 +728,8 @@ { CDialog::OnSize(nType, cx, cy); - const int dpiX = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX); - const int dpiY = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY); + const int dpiX = Util::GetDPIx(m_hWnd); + const int dpiY = Util::GetDPIy(m_hWnd); if (m_treePlugins) { @@ -755,8 +755,8 @@ void CSelectPluginDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI) //------------------------------------------------------- { - lpMMI->ptMinTrackSize.x = MulDiv(350, ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), 96); - lpMMI->ptMinTrackSize.y = MulDiv(270, ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 96); + lpMMI->ptMinTrackSize.x = MulDiv(350, Util::GetDPIx(m_hWnd), 96); + lpMMI->ptMinTrackSize.y = MulDiv(270, Util::GetDPIy(m_hWnd), 96); CDialog::OnGetMinMaxInfo(lpMMI); } Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -153,8 +153,8 @@ void CViewInstrument::OnInitialUpdate() //------------------------------------- { + CModScrollView::OnInitialUpdate(); ModifyStyleEx(0, WS_EX_ACCEPTFILES); - CModScrollView::OnInitialUpdate(); UpdateScrollSize(); } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -168,6 +168,7 @@ void CViewPattern::OnInitialUpdate() //---------------------------------- { + CModScrollView::OnInitialUpdate(); MemsetZero(ChnVUMeters); MemsetZero(OldVUMeters); // -> CODE#0012 @@ -186,8 +187,7 @@ m_nPattern = 0; m_nSpacing = 0; m_nAccelChar = 0; - CScrollView::OnInitialUpdate(); - PatternFont::UpdateFont(GetDC()); + PatternFont::UpdateFont(m_hWnd); UpdateSizes(); UpdateScrollSize(); SetCurrentPattern(0); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -149,10 +149,10 @@ void CViewSample::OnInitialUpdate() //--------------------------------- { + CModScrollView::OnInitialUpdate(); m_dwBeginSel = m_dwEndSel = 0; m_dwStatus.reset(SMPSTATUS_DRAWING); ModifyStyleEx(0, WS_EX_ACCEPTFILES); - CModScrollView::OnInitialUpdate(); CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm) { Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -1131,7 +1131,9 @@ // Find out how big our label shall be CSize size; - GetTextExtentPoint32(GetDC()->GetSafeHdc(), description, strlen(description), &size); + HDC dc = ::GetDC(m_hWnd); + GetTextExtentPoint32(dc, description, strlen(description), &size); + ::ReleaseDC(m_hWnd, dc); if(size.cx < 320) size.cx = 320; const int windowWidth = windowRect.Width() - labelRect.Width() + size.cx; const int windowHeight = windowRect.Height() - labelRect.Height() + size.cy; Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/mptrack/view_com.cpp 2015-01-01 01:52:01 UTC (rev 4695) @@ -108,6 +108,7 @@ void CViewComments::OnInitialUpdate() //----------------------------------- { + CModScrollView::OnInitialUpdate(); if(m_nListId == 0) { m_nListId = IDC_LIST_SAMPLES; Modified: trunk/OpenMPT/plugins/common/WindowBase.h =================================================================== --- trunk/OpenMPT/plugins/common/WindowBase.h 2014-12-31 21:32:40 UTC (rev 4694) +++ trunk/OpenMPT/plugins/common/WindowBase.h 2015-01-01 01:52:01 UTC (rev 4695) @@ -56,9 +56,21 @@ } // Scale X coordinate for DPI-awareness - static int ScaleX(HWND hwnd, int x) { return MulDiv(x, ::GetDeviceCaps(::GetDC(hwnd), LOGPIXELSX), 96); } + static int ScaleX(HWND hwnd, int x) + { + HDC dc = ::GetDC(hwnd); + int dpi = MulDiv(x, ::GetDeviceCaps(dc, LOGPIXELSX), 96); + ::ReleaseDC(hwnd, dc); + return dpi; + } // Scale Y coordinate for DPI-awareness - static int ScaleY(HWND hwnd, int y) { return MulDiv(y, ::GetDeviceCaps(::GetDC(hwnd), LOGPIXELSY), 96); } + static int ScaleY(HWND hwnd, int y) + { + HDC dc = ::GetDC(hwnd); + int dpi = MulDiv(y, ::GetDeviceCaps(dc, LOGPIXELSY), 96); + ::ReleaseDC(hwnd, dc); + return dpi; + } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |