From 2a08707cf5a5207a19715907cdef6c2f7a8a52e7 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Sat, 9 May 2020 16:15:41 +0200 Subject: remove half-baked compat implementation of SetWindowSubclass --- alf/alfnotebook.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'alf/alfnotebook.cpp') diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp index ea4517c..b54829a 100644 --- a/alf/alfnotebook.cpp +++ b/alf/alfnotebook.cpp @@ -266,10 +266,9 @@ ALF_Notebook_InternalAddTab(HWND notebook, ALFNotebookPriv *priv, const TCHAR *t static LRESULT CALLBACK -ALF_Notebook_TabCtrlSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) +ALF_Notebook_TabCtrlWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - (void)uIdSubclass; - (void)dwRefData; + WNDPROC oldWndProc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (uMsg == WM_ERASEBKGND) { // see: http://www.virtualdub.org/blog/pivot/entry.php?id=291 @@ -281,19 +280,12 @@ ALF_Notebook_TabCtrlSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa ExcludeClipRect(hdc, r.left, r.top, r.right, r.bottom); } - if (uMsg == 0x2000 + WM_NOTIFY) { - NMHDR *pnmh = (NMHDR*)lParam; - if (pnmh->code == TCN_SELCHANGE) { - ALF_Notebook_InternalHandleTabChange(GetParent(hwnd), hwnd); - - return TRUE; - } - } if (uMsg == WM_DESTROY) { - ALF_Compat_RemoveWindowSubclass(hwnd, ALF_Notebook_TabCtrlSubclassProc, 0); + SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)oldWndProc); + SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); } - return ALF_Compat_DefSubclassProc(hwnd, uMsg, wParam, lParam); + return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam); } static void @@ -383,11 +375,20 @@ ALF_Notebook_SetWidgetFlags(HWND hwndNotebook, ALFNotebookPriv *priv, HWND widge static LRESULT CALLBACK ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + ALFNotebookPriv *priv = (ALFNotebookPriv *)GetWindowLongPtr(hwnd, 0); + + if (uMsg == WM_NOTIFY) { + NMHDR *pnmh = (NMHDR*)lParam; + if (pnmh->hwndFrom == priv->hwndTabCtrl && pnmh->code == TCN_SELCHANGE) { + ALF_Notebook_InternalHandleTabChange(hwnd, priv->hwndTabCtrl); + + return TRUE; + } + } + if (ALF_ShouldMessageBubble(hwnd, uMsg, wParam, lParam)) return SendMessage(GetParent(hwnd), uMsg, wParam, lParam); - ALFNotebookPriv *priv = (ALFNotebookPriv *)GetWindowLongPtr(hwnd, 0); - if (uMsg == WM_CREATE && priv == NULL) { priv = ALF_Notebook_CreatePriv(); priv->hwndTabCtrl = CreateWindowEx(0, @@ -402,7 +403,9 @@ ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) TabCtrl_SetItemExtra(priv->hwndTabCtrl, sizeof(ALFNotebookPage) - sizeof(TCITEMHEADER)); - ALF_Compat_SetWindowSubclass(priv->hwndTabCtrl, ALF_Notebook_TabCtrlSubclassProc, 0, 0); + LONG_PTR wndProc = GetWindowLongPtr(priv->hwndTabCtrl, GWLP_WNDPROC); + SetWindowLongPtr(priv->hwndTabCtrl, GWLP_USERDATA, wndProc); + SetWindowLongPtr(priv->hwndTabCtrl, GWLP_WNDPROC, (LONG_PTR)ALF_Notebook_TabCtrlWndProc); SetWindowLongPtr(hwnd, 0, (LONG_PTR)priv); ALF_Notebook_InternalHandleThemeChange(hwnd, priv); -- cgit v1.2.3