3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS user32.dll
5 * FILE: lib/user32/windows/message.c
7 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
9 * 06-06-2001 CSH Created
18 GetMessageExtraInfo(VOID)
66 User32FreeAsciiConvertedMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
72 ANSI_STRING AnsiString;
73 UNICODE_STRING UnicodeString;
76 InString = (LPSTR)lParam;
77 TempString = RtlAllocateHeap(RtlGetProcessHeap(), 0, strlen(InString));
78 strcpy(TempString, InString);
79 RtlInitAnsiString(&AnsiString, TempString);
80 UnicodeString.Length = wParam;
81 UnicodeString.MaximumLength = wParam;
82 UnicodeString.Buffer = (PWSTR)lParam;
83 RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
84 RtlFreeHeap(RtlGetProcessHeap(), 0, TempString);
91 Cs = (CREATESTRUCTA*)lParam;
92 RtlFreeHeap(RtlGetProcessHeap(), 0, (LPSTR)Cs->lpszName);
93 RtlFreeHeap(RtlGetProcessHeap(), 0, (LPSTR)Cs->lpszClass);
94 RtlFreeHeap(RtlGetProcessHeap(), 0, Cs);
101 User32ConvertToAsciiMessage(UINT* Msg, WPARAM* wParam, LPARAM* lParam)
109 UNICODE_STRING UString;
112 CsW = (CREATESTRUCTW*)(*lParam);
113 CsA = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(CREATESTRUCTA));
114 memcpy(CsA, CsW, sizeof(CREATESTRUCTW));
116 RtlInitUnicodeString(&UString, CsW->lpszName);
117 RtlUnicodeStringToAnsiString(&AString, &UString, TRUE);
118 CsA->lpszName = AString.Buffer;
120 RtlInitUnicodeString(&UString, CsW->lpszClass);
121 RtlUnicodeStringToAnsiString(&AString, &UString, TRUE);
122 CsA->lpszClass = AString.Buffer;
124 (*lParam) = (LPARAM)CsA;
132 User32FreeUnicodeConvertedMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
137 User32ConvertToUnicodeMessage(UINT* Msg, WPARAM* wParam, LPARAM* lParam)
142 CallWindowProcA(WNDPROC lpPrevWndFunc,
148 if (IsWindowUnicode(hWnd))
151 User32ConvertToUnicodeMessage(&Msg, &wParam, &lParam);
152 Result = lpPrevWndFunc(hWnd, Msg, wParam, lParam);
153 User32FreeUnicodeConvertedMessage(Msg, wParam, lParam);
158 return(lpPrevWndFunc(hWnd, Msg, wParam, lParam));
163 CallWindowProcW(WNDPROC lpPrevWndFunc,
169 if (!IsWindowUnicode(hWnd))
172 User32ConvertToAsciiMessage(&Msg, &wParam, &lParam);
173 Result = lpPrevWndFunc(hWnd, Msg, wParam, lParam);
174 User32FreeAsciiConvertedMessage(Msg, wParam, lParam);
179 return(lpPrevWndFunc(hWnd, Msg, wParam, lParam));
185 MsgiAnsiToUnicodeMessage(LPMSG UnicodeMsg, LPMSG AnsiMsg)
187 *UnicodeMsg = *AnsiMsg;
188 switch (AnsiMsg->message)
192 UnicodeMsg->wParam = UnicodeMsg->wParam / 2;
200 MsgiAnsiToUnicodeReply(LPMSG UnicodeMsg, LPMSG AnsiMsg, LRESULT Result)
202 switch (AnsiMsg->message)
206 ANSI_STRING AnsiString;
207 UNICODE_STRING UnicodeString;
210 InString = (LPWSTR)UnicodeMsg->lParam;
211 TempString = RtlAllocateHeap(RtlGetProcessHeap(), 0,
212 wcslen(InString) * sizeof(WCHAR));
213 wcscpy(TempString, InString);
214 RtlInitUnicodeString(&UnicodeString, TempString);
215 AnsiString.Length = AnsiMsg->wParam;
216 AnsiString.MaximumLength = AnsiMsg->wParam;
217 AnsiString.Buffer = (PSTR)AnsiMsg->lParam;
218 RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, FALSE);
219 RtlFreeHeap(RtlGetProcessHeap(), 0, TempString);
228 DispatchMessageA(CONST MSG *lpmsg)
230 return(NtUserDispatchMessage(lpmsg));
234 DispatchMessageW(CONST MSG *lpmsg)
236 return(NtUserDispatchMessage((LPMSG)lpmsg));
247 return NtUserGetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
258 return NtUserGetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
270 return NtUserPeekMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
282 return NtUserPeekMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
293 return NtUserPostMessage(hWnd, Msg, wParam, lParam);
304 return NtUserPostMessage(hWnd, Msg, wParam, lParam);
312 (void) NtUserPostMessage(NULL, WM_QUIT, nExitCode, 0);
323 return NtUserPostThreadMessage(idThread, Msg, wParam, lParam);
334 return NtUserPostThreadMessage(idThread, Msg, wParam, lParam);
338 SendMessageW(HWND hWnd,
343 return(NtUserSendMessage(hWnd, Msg, wParam, lParam));
348 SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
355 AnsiMsg.message = Msg;
356 AnsiMsg.wParam = wParam;
357 AnsiMsg.lParam = lParam;
359 if (!MsgiAnsiToUnicodeMessage(&UcMsg, &AnsiMsg))
363 Result = SendMessageW(UcMsg.hwnd, UcMsg.message, UcMsg.wParam, UcMsg.lParam);
364 if (!MsgiAnsiToUnicodeReply(&UcMsg, &AnsiMsg, Result))
373 SendMessageCallbackA(
378 SENDASYNCPROC lpCallBack,
381 return NtUserSendMessageCallback(
392 SendMessageCallbackW(
397 SENDASYNCPROC lpCallBack,
400 return NtUserSendMessageCallback(
418 PDWORD_PTR lpdwResult)
432 PDWORD_PTR lpdwResult)
462 TranslateMessage(CONST MSG *lpMsg)
464 return(NtUserTranslateMessage((LPMSG)lpMsg, 0));
475 RegisterWindowMessageA(LPCSTR lpString)
477 UNICODE_STRING String;
481 Result = RtlCreateUnicodeStringFromAsciiz(&String, (PCSZ)lpString);
486 Atom = RegisterWindowMessageW(String.Buffer);
487 RtlFreeUnicodeString(&String);
492 RegisterWindowMessageW(LPCWSTR lpString)
494 return(NtUserRegisterWindowMessage(lpString));