@@ -163,10 +163,27 @@ typedef struct tagIMEMESSAGE16 {
163163 WORD unknown8 ;
164164} IMEMESSAGE16 , FAR * LPIMEMESSAGE16 ;
165165#include <poppack.h>
166- LRESULT WINAPI SendIMEMessageEx16 (
167- _In_ HWND16 hwnd ,
168- _In_ LPARAM lParam
169- );
166+
167+ /* convert a LOGFONT16 to a LOGFONTA */
168+ static void logfont_16_to_A (const LOGFONT16 * font16 , LPLOGFONTA font32 )
169+ {
170+ font32 -> lfHeight = font16 -> lfHeight ;
171+ font32 -> lfWidth = font16 -> lfWidth ;
172+ font32 -> lfEscapement = font16 -> lfEscapement ;
173+ font32 -> lfOrientation = font16 -> lfOrientation ;
174+ font32 -> lfWeight = font16 -> lfWeight ;
175+ font32 -> lfItalic = font16 -> lfItalic ;
176+ font32 -> lfUnderline = font16 -> lfUnderline ;
177+ font32 -> lfStrikeOut = font16 -> lfStrikeOut ;
178+ font32 -> lfCharSet = font16 -> lfCharSet ;
179+ font32 -> lfOutPrecision = font16 -> lfOutPrecision ;
180+ font32 -> lfClipPrecision = font16 -> lfClipPrecision ;
181+ font32 -> lfQuality = font16 ;
182+ font32 -> lfPitchAndFamily = font16 -> lfPitchAndFamily ;
183+ memcpy (font32 -> lfFaceName , font16 -> lfFaceName , LF_FACESIZE );
184+ font32 -> lfFaceName [LF_FACESIZE - 1 ] = 0 ;
185+ }
186+
170187LRESULT WINAPI SendIMEMessageEx16 (
171188 _In_ HWND16 hwnd ,
172189 _In_ LPARAM lParam
@@ -187,15 +204,6 @@ LRESULT WINAPI SendIMEMessageEx16(
187204 lpime32 -> lParam1 = lpime -> lParam1 ;
188205 lpime32 -> lParam2 = lpime -> lParam2 ;
189206 lpime32 -> lParam3 = lpime -> lParam3 ;
190- /* PBRUSH.EXE(windows 3.1, JP) calls 0x12*/
191- if (lpime -> fnc == 0x12 /*IME_SETCONVERSIONFONT?*/ )
192- {
193- lpime32 -> fnc = IME_SETCONVERSIONFONTEX ;
194- }
195- //const char *a = GlobalLock16(lpime->lParam1);
196- //const char *b = GlobalLock16(lpime->lParam2);
197- //GlobalUnlock16(lpime->lParam1);
198- //GlobalUnlock16(lpime->lParam2);
199207 switch (lpime32 -> fnc )
200208 {
201209 case IME_SETCONVERSIONWINDOW :
@@ -238,22 +246,34 @@ LRESULT WINAPI SendIMEMessageEx16(
238246 case IME_GETCONVERSIONMODE :
239247 TRACE ("IME_GETCONVERSIONMODE\n" );
240248 break ;
249+ case 0x12 :
241250 case IME_SETCONVERSIONFONTEX :
242251 {
243- TRACE ("IME_SETCONVERSIONFONTEX\n" );
244-
245- HFONT hFont32 = HFONT_32 (lpime -> wParam );
246252 LPLOGFONTA lplogfont = & lfont ;
247- if (!hFont32 || !GetObjectA (hFont32 , sizeof (LOGFONTA ), lplogfont ))
253+ TRACE ("IME_SETCONVERSIONFONTEX %d\n" , lpime32 -> fnc );
254+
255+ if (lpime32 -> fnc == 0x12 )
248256 {
249- ret = 0 ;
250- goto done ;
257+ HFONT hFont32 = HFONT_32 (lpime -> wParam );
258+ if (!hFont32 || !GetObjectA (hFont32 , sizeof (LOGFONTA ), lplogfont ))
259+ {
260+ ret = 0 ;
261+ goto done ;
262+ }
251263 }
252- lpime32 -> wParam = 0 ;
253- /*lpime32->wParam = lpime32->wCount = lpime32->dchSource = lpime32->dchDest = */ lpime32 -> lParam1 = /*lpime32->lParam2 = lpime32->lParam3 = */ lplogfont ;
264+ else if (lpime32 -> fnc == IME_SETCONVERSIONFONTEX )
265+ {
266+ LPLOGFONT16 l16 = (LPLOGFONT16 )GlobalLock16 (lpime32 -> lParam1 );
267+ logfont_16_to_A (l16 , & lfont );
268+ }
269+ lpime32 -> lParam1 = lplogfont ;
254270 HIMC himc = ImmGetContext (hwnd32 );
255271 //IME_SETCONVERSIONFONTEX doesnt work well
256272 ImmSetCompositionFontA (himc , lplogfont );
273+ if (lpime32 -> fnc == IME_SETCONVERSIONFONTEX )
274+ {
275+ GlobalUnlock16 (lpime32 -> lParam1 );
276+ }
257277 }
258278 break ;
259279 case IME_SETCONVERSIONMODE :
@@ -271,9 +291,11 @@ LRESULT WINAPI SendIMEMessageEx16(
271291 case IME_GETVERSION :
272292 TRACE ("IME_GETVERSION\n" );
273293 break ;
294+ /*
274295 case IME_SET_MODE:
275296 TRACE("IME_SET_MODE\n");
276297 break;
298+ */
277299 case IME_GETIMECAPS :
278300 TRACE ("IME_GETIMECAPS\n" );
279301 break ;
0 commit comments