diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-05-09 16:15:41 +0200 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-05-09 16:15:41 +0200 |
| commit | 2a08707cf5a5207a19715907cdef6c2f7a8a52e7 (patch) | |
| tree | f15eafe651a7892e3f88da506328e485ccc2d85b /alf/alfnotebook.cpp | |
| parent | 97fd5d9ba445dbac0deaef763dce1382a88211d9 (diff) | |
remove half-baked compat implementation of SetWindowSubclass
Diffstat (limited to 'alf/alfnotebook.cpp')
| -rw-r--r-- | alf/alfnotebook.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
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); |
