static LRESULT WINAPI StatusWindowProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { STATUS_INFO *infoPtr = (STATUS_INFO *)GetWindowLongPtrW (hwnd, 0); INT nPart = ((INT) wParam) & 0x00ff; LRESULT res; TRACE("hwnd=%p msg=%x wparam=%lx lparam=%lx\n", hwnd, msg, wParam, lParam); if (!infoPtr && msg != WM_CREATE) return DefWindowProcW (hwnd, msg, wParam, lParam); switch (msg) { case SB_GETBORDERS: return STATUSBAR_GetBorders (infoPtr, (INT *)lParam); case SB_GETICON: return (LRESULT)STATUSBAR_GetIcon (infoPtr, nPart); case SB_GETPARTS: return STATUSBAR_GetParts (infoPtr, (INT)wParam, (INT *)lParam); case SB_GETRECT: return STATUSBAR_GetRect (infoPtr, nPart, (LPRECT)lParam); case SB_GETTEXTA: return STATUSBAR_GetTextA (infoPtr, nPart, (LPSTR)lParam); case SB_GETTEXTW: return STATUSBAR_GetTextW (infoPtr, nPart, (LPWSTR)lParam); case SB_GETTEXTLENGTHA: case SB_GETTEXTLENGTHW: return STATUSBAR_GetTextLength (infoPtr, nPart); case SB_GETTIPTEXTA: return STATUSBAR_GetTipTextA (infoPtr, LOWORD(wParam), (LPSTR)lParam, HIWORD(wParam)); case SB_GETTIPTEXTW: return STATUSBAR_GetTipTextW (infoPtr, LOWORD(wParam), (LPWSTR)lParam, HIWORD(wParam)); case SB_GETUNICODEFORMAT: return infoPtr->bUnicode; case SB_ISSIMPLE: return infoPtr->simple; case SB_SETBORDERS: return STATUSBAR_SetBorders (infoPtr, (INT *)lParam); case SB_SETBKCOLOR: return STATUSBAR_SetBkColor (infoPtr, (COLORREF)lParam); case SB_SETICON: return STATUSBAR_SetIcon (infoPtr, nPart, (HICON)lParam); case SB_SETMINHEIGHT: return STATUSBAR_SetMinHeight (infoPtr, (INT)wParam); case SB_SETPARTS: return STATUSBAR_SetParts (infoPtr, (INT)wParam, (LPINT)lParam); case SB_SETTEXTA: return STATUSBAR_SetTextT (infoPtr, nPart, wParam & 0xff00, (LPWSTR)lParam, FALSE); case SB_SETTEXTW: return STATUSBAR_SetTextT (infoPtr, nPart, wParam & 0xff00, (LPWSTR)lParam, TRUE); case SB_SETTIPTEXTA: return STATUSBAR_SetTipTextA (infoPtr, (INT)wParam, (LPSTR)lParam); case SB_SETTIPTEXTW: return STATUSBAR_SetTipTextW (infoPtr, (INT)wParam, (LPWSTR)lParam); case SB_SETUNICODEFORMAT: return STATUSBAR_SetUnicodeFormat (infoPtr, (BOOL)wParam); case SB_SIMPLE: return STATUSBAR_Simple (infoPtr, (BOOL)wParam); case WM_CREATE: return STATUSBAR_WMCreate (hwnd, (LPCREATESTRUCTA)lParam); case WM_DESTROY: return STATUSBAR_WMDestroy (infoPtr); case WM_GETFONT: return (LRESULT)(infoPtr->hFont? infoPtr->hFont : infoPtr->hDefaultFont); case WM_GETTEXT: return STATUSBAR_WMGetText (infoPtr, (INT)wParam, (LPWSTR)lParam); case WM_GETTEXTLENGTH: return LOWORD(STATUSBAR_GetTextLength (infoPtr, 0)); case WM_LBUTTONDBLCLK: return STATUSBAR_SendMouseNotify(infoPtr, NM_DBLCLK, msg, wParam, lParam); case WM_LBUTTONUP: return STATUSBAR_SendMouseNotify(infoPtr, NM_CLICK, msg, wParam, lParam); case WM_MOUSEMOVE: return STATUSBAR_Relay2Tip (infoPtr, msg, wParam, lParam); case WM_NCHITTEST: res = STATUSBAR_WMNCHitTest(infoPtr, (short)LOWORD(lParam), (short)HIWORD(lParam)); if (res != HTERROR) return res; return DefWindowProcW (hwnd, msg, wParam, lParam); case WM_NCLBUTTONUP: case WM_NCLBUTTONDOWN: PostMessageW (infoPtr->Notify, msg, wParam, lParam); return 0; case WM_NOTIFYFORMAT: return STATUSBAR_NotifyFormat(infoPtr, (HWND)wParam, (INT)lParam); case WM_PRINTCLIENT: case WM_PAINT: return STATUSBAR_WMPaint (infoPtr, (HDC)wParam); case WM_RBUTTONDBLCLK: return STATUSBAR_SendMouseNotify(infoPtr, NM_RDBLCLK, msg, wParam, lParam); case WM_RBUTTONUP: return STATUSBAR_SendMouseNotify(infoPtr, NM_RCLICK, msg, wParam, lParam); case WM_SETFONT: return STATUSBAR_WMSetFont (infoPtr, (HFONT)wParam, LOWORD(lParam)); case WM_SETTEXT: return STATUSBAR_WMSetText (infoPtr, (LPCSTR)lParam); case WM_SIZE: if (STATUSBAR_WMSize (infoPtr, (WORD)wParam)) return 0; return DefWindowProcW (hwnd, msg, wParam, lParam); case WM_SYSCOLORCHANGE: COMCTL32_RefreshSysColors(); return 0; case WM_THEMECHANGED: return theme_changed (infoPtr); default: if ((msg >= WM_USER) && (msg < WM_APP) && !COMCTL32_IsReflectedMessage(msg)) ERR("unknown msg %04x wp=%04lx lp=%08lx\n", msg, wParam, lParam); return DefWindowProcW (hwnd, msg, wParam, lParam); } }
/*********************************************************************** * SysLinkWindowProc */ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { SYSLINK_INFO *infoPtr; TRACE("hwnd=%p msg=%04x wparam=%lx lParam=%lx\n", hwnd, message, wParam, lParam); infoPtr = (SYSLINK_INFO *)GetWindowLongPtrW(hwnd, 0); if (!infoPtr && message != WM_CREATE) return DefWindowProcW(hwnd, message, wParam, lParam); switch(message) { case WM_PRINTCLIENT: case WM_PAINT: return SYSLINK_Paint (infoPtr, (HDC)wParam); case WM_ERASEBKGND: return 0; case WM_SETCURSOR: { LHITTESTINFO ht; DWORD mp = GetMessagePos(); ht.pt.x = (short)LOWORD(mp); ht.pt.y = (short)HIWORD(mp); ScreenToClient(infoPtr->Self, &ht.pt); if(SYSLINK_HitTest (infoPtr, &ht)) { SetCursor(LoadCursorW(0, (LPCWSTR)IDC_HAND)); return TRUE; } return DefWindowProcW(hwnd, message, wParam, lParam); } case WM_SIZE: { RECT rcClient; if (GetClientRect(infoPtr->Self, &rcClient)) { HDC hdc = GetDC(infoPtr->Self); if(hdc != NULL) { SYSLINK_Render(infoPtr, hdc, &rcClient); ReleaseDC(infoPtr->Self, hdc); } } return 0; } case WM_GETFONT: return (LRESULT)infoPtr->Font; case WM_SETFONT: return (LRESULT)SYSLINK_SetFont(infoPtr, (HFONT)wParam, (BOOL)lParam); case WM_SETTEXT: SYSLINK_SetText(infoPtr, (LPWSTR)lParam); return DefWindowProcW(hwnd, message, wParam, lParam); case WM_LBUTTONDOWN: { POINT pt; pt.x = (short)LOWORD(lParam); pt.y = (short)HIWORD(lParam); return SYSLINK_LButtonDown(infoPtr, &pt); } case WM_LBUTTONUP: { POINT pt; pt.x = (short)LOWORD(lParam); pt.y = (short)HIWORD(lParam); return SYSLINK_LButtonUp(infoPtr, &pt); } case WM_KEYDOWN: { switch(wParam) { case VK_RETURN: SYSLINK_OnEnter(infoPtr); return 0; case VK_TAB: { BOOL shift = GetKeyState(VK_SHIFT) & 0x8000; SYSKEY_SelectNextPrevLink(infoPtr, shift); return 0; } default: return DefWindowProcW(hwnd, message, wParam, lParam); } } case WM_GETDLGCODE: { LRESULT Ret = DLGC_HASSETSEL; int vk = (lParam != 0 ? (int)((LPMSG)lParam)->wParam : 0); switch(vk) { case VK_RETURN: Ret |= DLGC_WANTMESSAGE; break; case VK_TAB: { BOOL shift = GetKeyState(VK_SHIFT) & 0x8000; if(!SYSLINK_NoNextLink(infoPtr, shift)) { Ret |= DLGC_WANTTAB; } else { Ret |= DLGC_WANTCHARS; } break; } } return Ret; } case WM_NCHITTEST: { POINT pt; RECT rc; pt.x = (short)LOWORD(lParam); pt.y = (short)HIWORD(lParam); GetClientRect(infoPtr->Self, &rc); ScreenToClient(infoPtr->Self, &pt); if(pt.x < 0 || pt.y < 0 || pt.x > rc.right || pt.y > rc.bottom) { return HTNOWHERE; } if(SYSLINK_LinkAtPt(infoPtr, &pt, NULL, FALSE)) { return HTCLIENT; } return HTTRANSPARENT; } case LM_HITTEST: return SYSLINK_HitTest(infoPtr, (PLHITTESTINFO)lParam); case LM_SETITEM: return SYSLINK_SetItem(infoPtr, (PLITEM)lParam); case LM_GETITEM: return SYSLINK_GetItem(infoPtr, (PLITEM)lParam); case LM_GETIDEALHEIGHT: if (lParam) { /* LM_GETIDEALSIZE */ SYSLINK_GetIdealSize(infoPtr, (int)wParam, (LPSIZE)lParam); } return SYSLINK_GetIdealHeight(infoPtr); case WM_SETFOCUS: return SYSLINK_SetFocus(infoPtr); case WM_KILLFOCUS: return SYSLINK_KillFocus(infoPtr); case WM_ENABLE: infoPtr->Style &= ~WS_DISABLED; infoPtr->Style |= (wParam ? 0 : WS_DISABLED); InvalidateRect (infoPtr->Self, NULL, FALSE); return 0; case WM_STYLECHANGED: if (wParam == GWL_STYLE) { infoPtr->Style = ((LPSTYLESTRUCT)lParam)->styleNew; InvalidateRect(infoPtr->Self, NULL, TRUE); } return 0; case WM_CREATE: /* allocate memory for info struct */ infoPtr = Alloc (sizeof(SYSLINK_INFO)); if (!infoPtr) return -1; SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr); /* initialize the info struct */ infoPtr->Self = hwnd; infoPtr->Notify = ((LPCREATESTRUCTW)lParam)->hwndParent; infoPtr->Style = ((LPCREATESTRUCTW)lParam)->style; infoPtr->Font = 0; infoPtr->LinkFont = 0; infoPtr->Items = NULL; infoPtr->HasFocus = FALSE; infoPtr->MouseDownID = -1; infoPtr->TextColor = comctl32_color.clrWindowText; infoPtr->LinkColor = comctl32_color.clrHighlight; infoPtr->VisitedColor = comctl32_color.clrHighlight; infoPtr->BackColor = infoPtr->Style & LWS_TRANSPARENT ? comctl32_color.clrWindow : comctl32_color.clrBtnFace; infoPtr->BreakChar = ' '; infoPtr->IgnoreReturn = infoPtr->Style & LWS_IGNORERETURN; TRACE("SysLink Ctrl creation, hwnd=%p\n", hwnd); SYSLINK_SetText(infoPtr, ((LPCREATESTRUCTW)lParam)->lpszName); return 0; case WM_DESTROY: TRACE("SysLink Ctrl destruction, hwnd=%p\n", hwnd); SYSLINK_ClearDoc(infoPtr); if(infoPtr->Font != 0) DeleteObject(infoPtr->Font); if(infoPtr->LinkFont != 0) DeleteObject(infoPtr->LinkFont); SetWindowLongPtrW(hwnd, 0, 0); Free (infoPtr); return 0; case WM_SYSCOLORCHANGE: COMCTL32_RefreshSysColors(); if (infoPtr->Style & LWS_TRANSPARENT) infoPtr->BackColor = comctl32_color.clrWindow; return 0; default: if ((message >= WM_USER) && (message < WM_APP) && !COMCTL32_IsReflectedMessage(message)) { ERR("unknown msg %04x wp=%04lx lp=%08lx\n", message, wParam, lParam ); } return DefWindowProcW(hwnd, message, wParam, lParam); } }
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved); switch (fdwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hinstDLL); COMCTL32_hModule = hinstDLL; /* add global subclassing atom (used by 'tooltip' and 'updown') */ COMCTL32_wSubclass = (LPWSTR)(DWORD_PTR)GlobalAddAtomW (strCC32SubclassInfo); TRACE("Subclassing atom added: %p\n", COMCTL32_wSubclass); /* create local pattern brush */ COMCTL32_hPattern55AABitmap = CreateBitmap (8, 8, 1, 1, wPattern55AA); COMCTL32_hPattern55AABrush = CreatePatternBrush (COMCTL32_hPattern55AABitmap); /* Get all the colors at DLL load */ COMCTL32_RefreshSysColors(); /* like comctl32 5.82+ register all the common control classes */ ANIMATE_Register (); COMBOEX_Register (); DATETIME_Register (); FLATSB_Register (); HEADER_Register (); HOTKEY_Register (); IPADDRESS_Register (); LISTVIEW_Register (); MONTHCAL_Register (); NATIVEFONT_Register (); PAGER_Register (); PROGRESS_Register (); REBAR_Register (); STATUS_Register (); SYSLINK_Register (); TAB_Register (); TOOLBAR_Register (); TOOLTIPS_Register (); TRACKBAR_Register (); TREEVIEW_Register (); UPDOWN_Register (); /* subclass user32 controls */ THEMING_Initialize (); break; case DLL_PROCESS_DETACH: if (lpvReserved) break; /* clean up subclassing */ THEMING_Uninitialize(); /* unregister all common control classes */ ANIMATE_Unregister (); COMBOEX_Unregister (); DATETIME_Unregister (); FLATSB_Unregister (); HEADER_Unregister (); HOTKEY_Unregister (); IPADDRESS_Unregister (); LISTVIEW_Unregister (); MONTHCAL_Unregister (); NATIVEFONT_Unregister (); PAGER_Unregister (); PROGRESS_Unregister (); REBAR_Unregister (); STATUS_Unregister (); SYSLINK_Unregister (); TAB_Unregister (); TOOLBAR_Unregister (); TOOLTIPS_Unregister (); TRACKBAR_Unregister (); TREEVIEW_Unregister (); UPDOWN_Unregister (); /* delete local pattern brush */ DeleteObject (COMCTL32_hPattern55AABrush); DeleteObject (COMCTL32_hPattern55AABitmap); /* delete global subclassing atom */ GlobalDeleteAtom (LOWORD(COMCTL32_wSubclass)); TRACE("Subclassing atom deleted: %p\n", COMCTL32_wSubclass); break; } return TRUE; }
static LRESULT WINAPI IPADDRESS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { IPADDRESS_INFO *infoPtr = (IPADDRESS_INFO *)GetWindowLongPtrW (hwnd, 0); TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam); if (!infoPtr && (uMsg != WM_CREATE)) return DefWindowProcW (hwnd, uMsg, wParam, lParam); switch (uMsg) { case WM_CREATE: return IPADDRESS_Create (hwnd, (LPCREATESTRUCTA)lParam); case WM_DESTROY: return IPADDRESS_Destroy (infoPtr); case WM_ENABLE: return IPADDRESS_Enable (infoPtr, (BOOL)wParam); case WM_PAINT: return IPADDRESS_Paint (infoPtr, (HDC)wParam); case WM_COMMAND: switch(wParam >> 16) { case EN_CHANGE: IPADDRESS_UpdateText(infoPtr); IPADDRESS_Notify(infoPtr, EN_CHANGE); break; case EN_KILLFOCUS: IPADDRESS_ConstrainField(infoPtr, IPADDRESS_GetPartIndex(infoPtr, (HWND)lParam)); break; } break; case WM_SYSCOLORCHANGE: COMCTL32_RefreshSysColors(); return 0; case IPM_CLEARADDRESS: IPADDRESS_ClearAddress (infoPtr); break; case IPM_SETADDRESS: return IPADDRESS_SetAddress (infoPtr, (DWORD)lParam); case IPM_GETADDRESS: return IPADDRESS_GetAddress (infoPtr, (LPDWORD)lParam); case IPM_SETRANGE: return IPADDRESS_SetRange (infoPtr, (int)wParam, (WORD)lParam); case IPM_SETFOCUS: IPADDRESS_SetFocusToField (infoPtr, (int)wParam); break; case IPM_ISBLANK: return IPADDRESS_IsBlank (infoPtr); default: if ((uMsg >= WM_USER) && (uMsg < WM_APP) && !COMCTL32_IsReflectedMessage(uMsg)) ERR("unknown msg %04x wp=%08lx lp=%08lx\n", uMsg, wParam, lParam); return DefWindowProcW (hwnd, uMsg, wParam, lParam); } return 0; }