// WM_SETICON LRESULT FASTCALL DefWndSetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam) { HICON hIcon, hIconSmall, hIconOld; if ( wParam > ICON_SMALL2 ) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } hIconSmall = UserGetProp(UserHMGetHandle(pWnd), gpsi->atomIconSmProp); hIcon = UserGetProp(UserHMGetHandle(pWnd), gpsi->atomIconProp); hIconOld = wParam == ICON_BIG ? hIcon : hIconSmall; switch(wParam) { case ICON_BIG: hIcon = (HICON)lParam; break; case ICON_SMALL: hIconSmall = (HICON)lParam; break; case ICON_SMALL2: ERR("FIXME: Set ICON_SMALL2 support!\n"); default: break; } NtUserSetProp(UserHMGetHandle(pWnd), gpsi->atomIconProp, hIcon); NtUserSetProp(UserHMGetHandle(pWnd), gpsi->atomIconSmProp, hIconSmall); if ((pWnd->style & WS_CAPTION ) == WS_CAPTION) UserPaintCaption(UserHMGetHandle(pWnd)); /* Repaint caption */ return (LRESULT)hIconOld; }
LRESULT WINAPI RealDefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT Result = 0; PWND Wnd; Wnd = ValidateHwnd(hWnd); if ( !Wnd && Msg != WM_CTLCOLORMSGBOX && Msg != WM_CTLCOLORBTN && Msg != WM_CTLCOLORDLG && Msg != WM_CTLCOLORSTATIC ) return 0; SPY_EnterMessage(SPY_DEFWNDPROC, hWnd, Msg, wParam, lParam); switch (Msg) { case WM_NCCREATE: { if ( Wnd && Wnd->style & (WS_HSCROLL | WS_VSCROLL) ) { if (!Wnd->pSBInfo) { SCROLLINFO si = {sizeof si, SIF_ALL, 0, 100, 0, 0, 0}; SetScrollInfo( hWnd, SB_HORZ, &si, FALSE ); SetScrollInfo( hWnd, SB_VERT, &si, FALSE ); } } if (lParam) { LPCREATESTRUCTW cs = (LPCREATESTRUCTW)lParam; /* check for string, as static icons, bitmaps (SS_ICON, SS_BITMAP) * may have child window IDs instead of window name */ if (HIWORD(cs->lpszName)) { DefSetText(hWnd, cs->lpszName, FALSE); } Result = 1; } break; } case WM_GETTEXTLENGTH: { PWSTR buf; ULONG len; if (Wnd != NULL && Wnd->strName.Length != 0) { buf = DesktopPtrToUser(Wnd->strName.Buffer); if (buf != NULL && NT_SUCCESS(RtlUnicodeToMultiByteSize(&len, buf, Wnd->strName.Length))) { Result = (LRESULT) (Wnd->strName.Length / sizeof(WCHAR)); } } else Result = 0L; break; } case WM_GETTEXT: { PWSTR buf = NULL; PWSTR outbuf = (PWSTR)lParam; if (Wnd != NULL && wParam != 0) { if (Wnd->strName.Buffer != NULL) buf = DesktopPtrToUser(Wnd->strName.Buffer); else outbuf[0] = L'\0'; if (buf != NULL) { if (Wnd->strName.Length != 0) { Result = min(Wnd->strName.Length / sizeof(WCHAR), wParam - 1); RtlCopyMemory(outbuf, buf, Result * sizeof(WCHAR)); outbuf[Result] = L'\0'; } else outbuf[0] = L'\0'; } } break; } case WM_SETTEXT: { DefSetText(hWnd, (PCWSTR)lParam, FALSE); if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION) UserPaintCaption(hWnd); Result = 1; break; } case WM_IME_CHAR: { PostMessageW(hWnd, WM_CHAR, wParam, lParam); Result = 0; break; } case WM_IME_KEYDOWN: { Result = PostMessageW(hWnd, WM_KEYDOWN, wParam, lParam); break; } case WM_IME_KEYUP: { Result = PostMessageW(hWnd, WM_KEYUP, wParam, lParam); break; } case WM_IME_STARTCOMPOSITION: case WM_IME_COMPOSITION: case WM_IME_ENDCOMPOSITION: case WM_IME_SELECT: case WM_IME_NOTIFY: { HWND hwndIME; hwndIME = DefWndImmGetDefaultIMEWnd(hWnd); if (hwndIME) Result = SendMessageW(hwndIME, Msg, wParam, lParam); break; } case WM_IME_SETCONTEXT: { HWND hwndIME; hwndIME = DefWndImmGetDefaultIMEWnd(hWnd); if (hwndIME) Result = DefWndImmIsUIMessageW(hwndIME, Msg, wParam, lParam); break; } default: Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, TRUE); } SPY_ExitMessage(SPY_RESULT_DEFWND, hWnd, Msg, Result, wParam, lParam); return Result; }
/* * @implemented */ DWORD_PTR APIENTRY NtUserCallTwoParam( DWORD_PTR Param1, DWORD_PTR Param2, DWORD Routine) { PWND Window; DECLARE_RETURN(DWORD_PTR); TRACE("Enter NtUserCallTwoParam\n"); UserEnterExclusive(); switch(Routine) { case TWOPARAM_ROUTINE_REDRAWTITLE: { DWORD_PTR Ret; Window = UserGetWindowObject((HWND)Param1); Ret = (DWORD_PTR)UserPaintCaption(Window, (INT)Param2); RETURN(Ret); } case TWOPARAM_ROUTINE_SETMENUBARHEIGHT: { DWORD_PTR Ret; PMENU MenuObject = IntGetMenuObject((HMENU)Param1); if(!MenuObject) RETURN( 0); if(Param2 > 0) { Ret = (MenuObject->cyMenu == (int)Param2); MenuObject->cyMenu = (int)Param2; } else Ret = (DWORD_PTR)MenuObject->cyMenu; IntReleaseMenuObject(MenuObject); RETURN( Ret); } case TWOPARAM_ROUTINE_SETGUITHRDHANDLE: { PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); ASSERT(pti->MessageQueue); RETURN( (DWORD_PTR)MsqSetStateWindow(pti, (ULONG)Param1, (HWND)Param2)); } case TWOPARAM_ROUTINE_ENABLEWINDOW: RETURN( IntEnableWindow((HWND)Param1, (BOOL)Param2)); case TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS: { Window = UserGetWindowObject((HWND)Param1); if (!Window) RETURN(0); RETURN( (DWORD_PTR)IntShowOwnedPopups(Window, (BOOL) Param2)); } case TWOPARAM_ROUTINE_ROS_UPDATEUISTATE: { WPARAM wParam; Window = UserGetWindowObject((HWND)Param1); if (!Window) RETURN(0); /* Unpack wParam */ wParam = MAKEWPARAM((Param2 >> 3) & 0x3, Param2 & (UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE)); RETURN( UserUpdateUiState(Window, wParam) ); } case TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW: STUB RETURN( 0); case TWOPARAM_ROUTINE_SETCARETPOS: RETURN( (DWORD_PTR)co_IntSetCaretPos((int)Param1, (int)Param2)); case TWOPARAM_ROUTINE_REGISTERLOGONPROCESS: RETURN( (DWORD_PTR)co_IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2)); case TWOPARAM_ROUTINE_SETCURSORPOS: RETURN( (DWORD_PTR)UserSetCursorPos((int)Param1, (int)Param2, 0, 0, FALSE)); case TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK: RETURN( IntUnhookWindowsHook((int)Param1, (HOOKPROC)Param2)); } ERR("Calling invalid routine number 0x%x in NtUserCallTwoParam(), Param1=0x%x Parm2=0x%x\n", Routine, Param1, Param2); EngSetLastError(ERROR_INVALID_PARAMETER); RETURN( 0); CLEANUP: TRACE("Leave NtUserCallTwoParam, ret=%p\n", (PVOID)_ret_); UserLeave(); END_CLEANUP; }