HRESULT CALLBACK TimeEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { TimeInfo *pti = NULL; EnterCriticalSection (&csTime); for (size_t iTime = 0; !pti && iTime < cTime; ++iTime) { if ( (aTime[ iTime ].hHours == hEdit) || (aTime[ iTime ].hMinutes == hEdit) || ((!aTime[ iTime ].f24Hour) && (aTime[ iTime ].hAMPM == hEdit)) ) { pti = &aTime[ iTime ]; } } LeaveCriticalSection (&csTime); if (pti) { switch (msg) { case WM_SETFOCUS: Time_Edit_OnSetFocus (pti, hEdit); break; } } PVOID oldProc = Subclass_FindNextHook (hEdit, TimeEditProc); if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else return DefWindowProc (hEdit, msg, wp, lp); }
HRESULT CALLBACK ElapsedEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { ElapsedInfo *pei = NULL; EnterCriticalSection (&csElapsed); for (size_t iElapsed = 0; !pei && iElapsed < cElapsed; ++iElapsed) { if ( (aElapsed[ iElapsed ].hHours == hEdit) || (aElapsed[ iElapsed ].hMinutes == hEdit) || (aElapsed[ iElapsed ].hSeconds == hEdit) ) { pei = &aElapsed[ iElapsed ]; } } LeaveCriticalSection (&csElapsed); if (pei) { switch (msg) { case WM_SETFOCUS: Elapsed_Edit_OnSetFocus (pei, hEdit); break; } } PVOID oldProc = Subclass_FindNextHook (hEdit, ElapsedEditProc); if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else return DefWindowProc (hEdit, msg, wp, lp); }
HRESULT CALLBACK Resize_DialogProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID fnNext = Subclass_FindNextHook (hWnd, Resize_DialogProc); switch (msg) { case WM_GETMINMAXINFO: LONG cxMin; LONG cyMin; LONG cxMax; LONG cyMax; FindResizeLimits (hWnd, &cxMin, &cxMax, &cyMin, &cyMax); LPMINMAXINFO lpmmi; lpmmi = (LPMINMAXINFO)lp; if (cxMin) lpmmi->ptMinTrackSize.x = cxMin; if (cyMin) lpmmi->ptMinTrackSize.y = cyMin; if (cxMax) lpmmi->ptMaxTrackSize.x = cxMax; if (cyMax) lpmmi->ptMaxTrackSize.y = cyMax; return FALSE; case WM_DESTROY: rwFindAndRemoveWnd (hWnd); break; } return (fnNext) ? CallWindowProc ((WNDPROC)fnNext, hWnd, msg, wp, lp) : FALSE; }
HRESULT CALLBACK WIZARD::Background_PaintHook (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hBkg, WIZARD::Background_PaintHook); switch (msg) { case WM_PAINT: LPWIZARD pWiz; if ((pWiz = WIZARD::GetWizard (hBkg)) != NULL) { if (pWiz->Background_OnPaint()) return TRUE; } break; case WM_DESTROY: Subclass_RemoveHook (hBkg, WIZARD::Background_PaintHook); break; } if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hBkg, msg, wp, lp); else return DefWindowProc (hBkg, msg, wp, lp); }
HRESULT CALLBACK WIZARD::Template_LeftPaneHook (HWND hLHS, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hLHS, WIZARD::Template_LeftPaneHook); switch (msg) { case WM_PAINT: LPWIZARD pWiz; if ((pWiz = WIZARD::GetWizard (GetParent (hLHS))) != NULL) { if (pWiz->Template_OnPaintLHS (hLHS)) return TRUE; } break; case WM_DESTROY: Subclass_RemoveHook (hLHS, WIZARD::Template_LeftPaneHook); break; } if (oldProc) return (BOOL)CallWindowProc ((WNDPROC)oldProc, hLHS, msg, wp, lp); else return (BOOL)DefWindowProc (hLHS, msg, wp, lp); }
LRESULT CALLBACK Main_TabHookProc (HWND hTab, UINT msg, WPARAM wp, LPARAM lp) { LRESULT rc = CallWindowProc ((WNDPROC)Subclass_FindNextHook (hTab, Main_TabHookProc), hTab, msg, wp, lp); switch (msg) { // Since this is a subclass proc, it's not around when the window // is created. Any WM_CREATE processing we'd ordinarily do here // must therefore be done at the point where the tab control is // subclassed. // // case WM_CREATE: case WM_SIZE: if (lp != 0) ResizeWindow (hTab, awdTabChild, rwaFixupGuts); break; case WM_DESTROY: Subclass_RemoveHook (hTab, Main_TabHookProc); break; } return rc; }
/* * WndProc for our subclass of the wizard's dialog. We do this to detect * the WM_ACTIVATEAPP message, which we use as a trigger to refresh the * partition info that we display. */ static BOOL CALLBACK WizardDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if ((g_pWiz->GetState() == sidSTEP_EIGHT) && (uMsg == WM_ACTIVATEAPP) && wParam) { UpdateDriveList(); ShowPartitionInfo(); } return CallWindowProc((WNDPROC)Subclass_FindNextHook(hwndDlg, WizardDlgProc), hwndDlg, uMsg, wParam, lParam); }
HRESULT CALLBACK ElapsedDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, ElapsedDlgProc); size_t iElapsed; switch (msg) { case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: for (iElapsed = 0; iElapsed < cElapsed; ++iElapsed) { if (aElapsed[ iElapsed ].hElapsed == NULL) continue; if ( (aElapsed[ iElapsed ].hHours == (HWND)lp) || (aElapsed[ iElapsed ].hSep1 == (HWND)lp) || (aElapsed[ iElapsed ].hMinutes == (HWND)lp) || (aElapsed[ iElapsed ].hSep2 == (HWND)lp) || (aElapsed[ iElapsed ].hSeconds == (HWND)lp) ) { COLORREF clr; if (IsWindowEnabled (aElapsed[ iElapsed ].hElapsed)) clr = GetSysColor (COLOR_WINDOW); else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; case WM_COMMAND: for (iElapsed = 0; iElapsed < cElapsed; ++iElapsed) { if (aElapsed[ iElapsed ].hElapsed == NULL) continue; if ( (aElapsed[ iElapsed ].idHours == LOWORD(wp)) || (aElapsed[ iElapsed ].idMinutes == LOWORD(wp)) || (aElapsed[ iElapsed ].idSeconds == LOWORD(wp)) ) { if (HIWORD(wp) == SPN_UPDATE) { Elapsed_Edit_OnUpdate (&aElapsed[ iElapsed ], GetDlgItem (hDlg, LOWORD(wp)), (DWORD)lp); } break; } } break; } if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else return DefWindowProc (hDlg, msg, wp, lp); }
HRESULT CALLBACK SockAddrEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { SockAddrInfo *psai = NULL; EnterCriticalSection (&csSockAddr); for (size_t iSockAddr = 0; !psai && iSockAddr < cSockAddr; ++iSockAddr) { if ( (aSockAddr[ iSockAddr ].hE1 == hEdit) || (aSockAddr[ iSockAddr ].hE2 == hEdit) || (aSockAddr[ iSockAddr ].hE3 == hEdit) || (aSockAddr[ iSockAddr ].hE4 == hEdit) ) { psai = &aSockAddr[ iSockAddr ]; } } LeaveCriticalSection (&csSockAddr); if (psai) { switch (msg) { case WM_KILLFOCUS: SockAddr_Edit_SetText (psai, hEdit); break; case WM_CHAR: if (wp == TEXT('.')) { // advance to the next field PostMessage (GetParent(hEdit), WM_NEXTDLGCTL, 0, 0); return FALSE; } break; } } PVOID oldProc = Subclass_FindNextHook (hEdit, SockAddrEditProc); if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else return DefWindowProc (hEdit, msg, wp, lp); }
HRESULT CALLBACK TimeDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, TimeDlgProc); size_t iTime; switch (msg) { case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: case WM_CTLCOLORLISTBOX: for (iTime = 0; iTime < cTime; ++iTime) { if (aTime[ iTime ].hTime == NULL) continue; if ( (aTime[ iTime ].hHours == (HWND)lp) || (aTime[ iTime ].hSep1 == (HWND)lp) || (aTime[ iTime ].hMinutes == (HWND)lp) || ((!aTime[ iTime ].f24Hour) && (aTime[ iTime ].hSep2 == (HWND)lp)) || ((!aTime[ iTime ].f24Hour) && (aTime[ iTime ].hAMPM == (HWND)lp)) ) { COLORREF clr; if (IsWindowEnabled (aTime[ iTime ].hTime)) clr = GetSysColor (COLOR_WINDOW); else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; case WM_MEASUREITEM: LPMEASUREITEMSTRUCT lpmis; lpmis = (LPMEASUREITEMSTRUCT)lp; HDC hdc; hdc = GetDC (hDlg); SIZE sAMPM; Time_GetAMPMSize (hdc, &sAMPM, NULL, NULL); ReleaseDC (hDlg, hdc); lpmis->itemHeight = sAMPM.cy; return TRUE; case WM_DRAWITEM: LPDRAWITEMSTRUCT lpdis; lpdis = (LPDRAWITEMSTRUCT)lp; COLORREF clrBack; COLORREF clrFore; if (!IsWindowEnabled (lpdis->hwndItem)) { clrBack = GetSysColor (COLOR_BTNFACE); clrFore = GetSysColor (COLOR_GRAYTEXT); } else if ((lpdis->itemState & ODS_SELECTED) && (GetFocus() == lpdis->hwndItem)) { clrBack = GetSysColor (COLOR_HIGHLIGHT); clrFore = GetSysColor (COLOR_HIGHLIGHTTEXT); } else { clrBack = GetSysColor (COLOR_WINDOW); clrFore = GetSysColor (COLOR_BTNTEXT); } TCHAR szText[ cchRESOURCE ]; SendMessage (lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, (LPARAM)szText); SetTextColor (lpdis->hDC, clrFore); SetBkColor (lpdis->hDC, clrBack); SetBkMode (lpdis->hDC, OPAQUE); TextOut (lpdis->hDC, 0, lpdis->rcItem.top, szText, lstrlen(szText)); return TRUE; case WM_COMMAND: for (iTime = 0; iTime < cTime; ++iTime) { if (aTime[ iTime ].hTime == NULL) continue; if ( (aTime[ iTime ].idHours == LOWORD(wp)) || (aTime[ iTime ].idMinutes == LOWORD(wp)) || ((!aTime[ iTime ].f24Hour) && (aTime[ iTime ].idAMPM == LOWORD(wp))) ) { if (HIWORD(wp) == SPN_UPDATE) { Time_Edit_OnUpdate (&aTime[ iTime ], GetDlgItem(hDlg,LOWORD(wp))); } break; } } break; } if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else return DefWindowProc (hDlg, msg, wp, lp); }
HRESULT CALLBACK SockAddrDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, SockAddrDlgProc); size_t iSockAddr; switch (msg) { case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: for (iSockAddr = 0; iSockAddr < cSockAddr; ++iSockAddr) { if (aSockAddr[ iSockAddr ].hSockAddr == NULL) continue; if ( (aSockAddr[ iSockAddr ].hE1 == (HWND)lp) || (aSockAddr[ iSockAddr ].hSep1 == (HWND)lp) || (aSockAddr[ iSockAddr ].hE2 == (HWND)lp) || (aSockAddr[ iSockAddr ].hSep2 == (HWND)lp) || (aSockAddr[ iSockAddr ].hE3 == (HWND)lp) || (aSockAddr[ iSockAddr ].hSep3 == (HWND)lp) || (aSockAddr[ iSockAddr ].hE4 == (HWND)lp) ) { COLORREF clr; if (IsWindowEnabled (aSockAddr[ iSockAddr ].hSockAddr)) clr = GetSysColor (COLOR_WINDOW); else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; case WM_COMMAND: for (iSockAddr = 0; iSockAddr < cSockAddr; ++iSockAddr) { if (aSockAddr[ iSockAddr ].hSockAddr == NULL) continue; if ( (aSockAddr[ iSockAddr ].idE1 == LOWORD(wp)) || (aSockAddr[ iSockAddr ].idE2 == LOWORD(wp)) || (aSockAddr[ iSockAddr ].idE3 == LOWORD(wp)) || (aSockAddr[ iSockAddr ].idE4 == LOWORD(wp)) ) { static BOOL fInHere = FALSE; if (!fInHere) { fInHere = TRUE; if (HIWORD(wp) == EN_CHANGE) { SockAddr_Edit_OnChange (&aSockAddr[ iSockAddr ], GetDlgItem (hDlg, LOWORD(wp))); } else if (HIWORD(wp) == EN_UPDATE) { SockAddr_Edit_OnUpdate (&aSockAddr[ iSockAddr ], GetDlgItem (hDlg, LOWORD(wp))); } fInHere = FALSE; } break; } } break; } if (oldProc) return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else return DefWindowProc (hDlg, msg, wp, lp); }