2 * COMMDLG - Font Dialog
4 * Copyright 1994 Martin Ayotte
5 * Copyright 1996 Albrecht Kleine
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
34 #include "wine/debug.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
44 LPCHOOSEFONTW lpcf32w;
46 } CFn_ENUMSTRUCT, *LPCFn_ENUMSTRUCT;
49 static const WCHAR strWineFontData[] = {'_','_','W','I','N','E','_','F','O','N','T','D','L','G','D','A','T','A',0};
50 static const WCHAR strWineFontData_a[] =
51 {'_','_','W','I','N','E','_','F','O','N','T','D','L','G','D','A','T','A','_','A',0};
52 static const WCHAR chooseFontW[] = {'C','H','O','O','S','E','_','F','O','N','T',0};
54 /* image list with TrueType bitmaps and more */
55 static HIMAGELIST himlTT = 0;
56 #define TTBITMAP_XSIZE 20 /* x-size of the bitmaps */
58 static INT_PTR CALLBACK FormatCharDlgProcA(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
59 static INT_PTR CALLBACK FormatCharDlgProcW(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
61 /* There is a table here of all charsets, and the sample text for each.
62 * There is a second table that translates a charset into an index into
66 #define CI(cs) ((IDS_CHARSET_##cs)-IDS_CHARSET_ANSI)
69 static const WCHAR stWestern[]={'A','a','B','b','Y','y','Z','z',0}; /* Western and default */
70 static const WCHAR stSymbol[]={'S','y','m','b','o','l',0}; /* Symbol */
71 static const WCHAR stShiftJis[]={'A','a',0x3042,0x3041,0x30a2,0x30a1,0x4e9c,0x5b87,0}; /* Shift JIS */
72 static const WCHAR stHangul[]={0xac00,0xb098,0xb2e4,'A','a','B','Y','y','Z','z',0}; /* Hangul */
73 static const WCHAR stGB2312[]={0x5fae,0x8f6f,0x4e2d,0x6587,0x8f6f,0x4ef6,0}; /* GB2312 */
74 static const WCHAR stBIG5[]={0x4e2d,0x6587,0x5b57,0x578b,0x7bc4,0x4f8b,0}; /* BIG5 */
75 static const WCHAR stGreek[]={'A','a','B','b',0x0391,0x03b1,0x0392,0x03b2,0}; /* Greek */
76 static const WCHAR stTurkish[]={'A','a','B','b',0x011e,0x011f,0x015e,0x015f,0}; /* Turkish */
77 static const WCHAR stHebrew[]={'A','a','B','b',0x05e0,0x05e1,0x05e9,0x05ea,0}; /* Hebrew */
78 static const WCHAR stArabic[]={'A','a','B','b',0x0627,0x0628,0x062c,0x062f,0x0647,0x0648,0x0632,0};/* Arabic */
79 static const WCHAR stBaltic[]={'A','a','B','b','Y','y','Z','z',0}; /* Baltic */
80 static const WCHAR stVietname[]={'A','a','B','b',0x01a0,0x01a1,0x01af,0x01b0,0}; /* Vietnamese */
81 static const WCHAR stCyrillic[]={'A','a','B','b',0x0411,0x0431,0x0424,0x0444,0}; /* Cyrillic */
82 static const WCHAR stEastEur[]={'A','a','B','b',0xc1,0xe1,0xd4,0xf4,0}; /* East European */
83 static const WCHAR stThai[]={'A','a','B','b',0x0e2d,0x0e31,0x0e01,0x0e29,0x0e23,0x0e44,0x0e17,0x0e22,0}; /* Thai */
84 static const WCHAR stJohab[]={0xac00,0xb098,0xb2e4,'A','a','B','Y','y','Z','z',0}; /* Johab */
85 static const WCHAR stMac[]={'A','a','B','b','Y','y','Z','z',0}; /* Mac */
86 static const WCHAR stOEM[]={'A','a','B','b',0xf8,0xf1,0xfd,0}; /* OEM */
87 /* the following character sets actually behave different (Win2K observation):
88 * the sample string is 'sticky': it uses the sample string of the previous
89 * selected character set. That behaviour looks like some default, which is
90 * not (yet) implemented. */
91 static const WCHAR stVISCII[]={'A','a','B','b',0}; /* VISCII */
92 static const WCHAR stTCVN[]={'A','a','B','b',0}; /* TCVN */
93 static const WCHAR stKOI8[]={'A','a','B','b',0}; /* KOI-8 */
94 static const WCHAR stIso88593[]={'A','a','B','b',0}; /* ISO-8859-3 */
95 static const WCHAR stIso88594[]={'A','a','B','b',0}; /* ISO-8859-4 */
96 static const WCHAR stIso885910[]={'A','a','B','b',0}; /* ISO-8859-10 */
97 static const WCHAR stCeltic[]={'A','a','B','b',0};/* Celtic */
99 static const WCHAR * const sample_lang_text[]={
100 stWestern,stSymbol,stShiftJis,stHangul,stGB2312,
101 stBIG5,stGreek,stTurkish,stHebrew,stArabic,
102 stBaltic,stVietname,stCyrillic,stEastEur,stThai,
103 stJohab,stMac,stOEM,stVISCII,stTCVN,
104 stKOI8,stIso88593,stIso88594,stIso885910,stCeltic};
107 static const BYTE CHARSET_ORDER[256]={
108 CI(ANSI), 0, CI(SYMBOL), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(MAC), 0, 0,
113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
116 CI(JIS), CI(HANGUL), CI(JOHAB), 0, 0, 0, CI(GB2312), 0, CI(BIG5), 0, 0, 0, 0, 0, 0, 0,
117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
118 0, CI(GREEK), CI(TURKISH), CI(VIETNAMESE), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
119 0, CI(HEBREW), CI(ARABIC), 0, 0, 0, 0, 0, 0, 0, CI(BALTIC), 0, 0, 0, 0, 0,
120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(RUSSIAN), 0, 0, 0,
121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(THAI), 0,
122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(EE), 0,
123 CI(VISCII), CI(TCVN), CI(KOI8), CI(ISO3), CI(ISO4), CI(ISO10), CI(CELTIC), 0, 0, 0, 0, 0, 0, 0, 0, CI(OEM),
126 static const struct {
130 #define XX(x) { x, #x },
135 XX(CF_ENABLETEMPLATE)
136 XX(CF_ENABLETEMPLATEHANDLE)
137 XX(CF_INITTOLOGFONTSTRUCT)
145 XX(CF_FIXEDPITCHONLY)
147 XX(CF_FORCEFONTEXIST)
159 static void _dump_cf_flags(DWORD cflags)
163 for (i = 0; i < sizeof(cfflags)/sizeof(cfflags[0]); i++)
164 if (cfflags[i].mask & cflags)
165 TRACE("%s|",cfflags[i].name);
169 /***********************************************************************
170 * ChooseFontW (COMDLG32.@)
172 * Create a font dialog box.
175 * lpChFont [I/O] in: information to initialize the dialog box.
176 * out: User's color selection
179 * TRUE: Ok button clicked.
180 * FALSE: Cancel button clicked, or error.
182 BOOL WINAPI ChooseFontW(LPCHOOSEFONTW lpChFont)
189 TRACE("(%p)\n", lpChFont);
191 if ( (lpChFont->Flags&CF_ENABLETEMPLATEHANDLE)!=0 )
193 template=lpChFont->hInstance;
196 if ( (lpChFont->Flags&CF_ENABLETEMPLATE)!=0 )
198 hDlginst=lpChFont->hInstance;
199 if( !(hResInfo = FindResourceW(hDlginst, lpChFont->lpTemplateName,
202 COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
207 hDlginst=COMDLG32_hInstance;
208 if (!(hResInfo = FindResourceW(hDlginst, chooseFontW, (LPWSTR)RT_DIALOG)))
210 COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
214 if (!(hDlgTmpl = LoadResource(hDlginst, hResInfo )) ||
215 !(template = LockResource( hDlgTmpl )))
217 COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
221 if (TRACE_ON(commdlg))
222 _dump_cf_flags(lpChFont->Flags);
224 if (lpChFont->Flags & (CF_SELECTSCRIPT | CF_NOVERTFONTS ))
225 FIXME(": unimplemented flag (ignored)\n");
227 return DialogBoxIndirectParamW(COMDLG32_hInstance, template,
228 lpChFont->hwndOwner, FormatCharDlgProcW, (LPARAM)lpChFont );
231 /***********************************************************************
232 * ChooseFontA (COMDLG32.@)
236 BOOL WINAPI ChooseFontA(LPCHOOSEFONTA lpChFont)
243 TRACE("(%p)\n", lpChFont);
245 if ( (lpChFont->Flags&CF_ENABLETEMPLATEHANDLE)!=0 )
247 template=lpChFont->hInstance;
250 if ( (lpChFont->Flags&CF_ENABLETEMPLATE)!=0 )
252 hDlginst=lpChFont->hInstance;
253 if( !(hResInfo = FindResourceA(hDlginst, lpChFont->lpTemplateName,
256 COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
261 hDlginst=COMDLG32_hInstance;
262 if (!(hResInfo = FindResourceW(hDlginst, chooseFontW, (LPWSTR)RT_DIALOG)))
264 COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
268 if (!(hDlgTmpl = LoadResource(hDlginst, hResInfo )) ||
269 !(template = LockResource( hDlgTmpl )))
271 COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
275 if (TRACE_ON(commdlg))
276 _dump_cf_flags(lpChFont->Flags);
277 if (lpChFont->Flags & (CF_SELECTSCRIPT | CF_NOVERTFONTS ))
278 FIXME(": unimplemented flag (ignored)\n");
280 return DialogBoxIndirectParamA(COMDLG32_hInstance, template,
281 lpChFont->hwndOwner, FormatCharDlgProcA, (LPARAM)lpChFont );
284 #define TEXT_EXTRAS 4
285 #define TEXT_COLORS 16
287 static const COLORREF textcolors[TEXT_COLORS]=
289 0x00000000L,0x00000080L,0x00008000L,0x00008080L,
290 0x00800000L,0x00800080L,0x00808000L,0x00808080L,
291 0x00c0c0c0L,0x000000ffL,0x0000ff00L,0x0000ffffL,
292 0x00ff0000L,0x00ff00ffL,0x00ffff00L,0x00FFFFFFL
295 /***********************************************************************
296 * CFn_HookCallChk32 [internal]
298 static BOOL CFn_HookCallChk32(const CHOOSEFONTW *lpcf)
301 if(lpcf->Flags & CF_ENABLEHOOK)
307 /*************************************************************************
308 * AddFontFamily [internal]
310 static INT AddFontFamily(const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM,
311 UINT nFontType, const CHOOSEFONTW *lpcf, HWND hwnd, LPCFn_ENUMSTRUCT e)
315 const LOGFONTW *lplf = &(lpElfex->elfLogFont);
317 TRACE("font=%s (nFontType=%d)\n", debugstr_w(lplf->lfFaceName), nFontType);
319 if (lpcf->Flags & CF_FIXEDPITCHONLY)
320 if (!(lplf->lfPitchAndFamily & FIXED_PITCH))
322 if (lpcf->Flags & CF_ANSIONLY)
323 if (lplf->lfCharSet != ANSI_CHARSET)
325 if (lpcf->Flags & CF_TTONLY)
326 if (!(nFontType & TRUETYPE_FONTTYPE))
331 i=SendMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)lplf->lfFaceName);
333 i = SendMessageW(hwnd, CB_ADDSTRING, 0, (LPARAM)lplf->lfFaceName);
335 /* store some important font information */
336 w = (lplf->lfPitchAndFamily) << 8 |
337 (HIWORD(lpNTM->ntmTm.ntmFlags) & 0xff);
338 SendMessageW(hwnd, CB_SETITEMDATA, i, MAKELONG(nFontType,w));
344 /*************************************************************************
345 * FontFamilyEnumProc32 [internal]
347 static INT WINAPI FontFamilyEnumProc(const ENUMLOGFONTEXW *lpElfex,
348 const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam)
351 e=(LPCFn_ENUMSTRUCT)lParam;
352 return AddFontFamily( lpElfex, (const NEWTEXTMETRICEXW *) metrics,
353 dwFontType, e->lpcf32w, e->hWnd1, e);
356 /*************************************************************************
357 * SetFontStylesToCombo2 [internal]
359 * Fill font style information into combobox (without using font.c directly)
361 static int SetFontStylesToCombo2(HWND hwnd, HDC hdc, const LOGFONTW *lplf)
370 static const struct FONTSTYLE fontstyles[FSTYLES]={
371 { 0, FW_NORMAL, IDS_FONT_REGULAR },
372 { 1, FW_NORMAL, IDS_FONT_ITALIC },
373 { 0, FW_BOLD, IDS_FONT_BOLD },
374 { 1, FW_BOLD, IDS_FONT_BOLD_ITALIC }
383 for (i=0;i<FSTYLES;i++)
385 lf.lfItalic=fontstyles[i].italic;
386 lf.lfWeight=fontstyles[i].weight;
387 hf=CreateFontIndirectW(&lf);
388 hf=SelectObject(hdc,hf);
389 GetTextMetricsW(hdc,&tm);
390 hf=SelectObject(hdc,hf);
392 /* font successful created ? */
393 if (((fontstyles[i].weight == FW_NORMAL && tm.tmWeight <= FW_MEDIUM) ||
394 (fontstyles[i].weight == FW_BOLD && tm.tmWeight > FW_MEDIUM)) &&
395 ((tm.tmItalic != 0)==fontstyles[i].italic))
398 LoadStringW(COMDLG32_hInstance, fontstyles[i].resId, name, 64);
399 j=SendMessageW(hwnd,CB_ADDSTRING,0,(LPARAM)name );
400 if (j==CB_ERR) return 1;
401 j=SendMessageW(hwnd, CB_SETITEMDATA, j,
402 MAKELONG(tm.tmWeight,fontstyles[i].italic));
403 if (j==CB_ERR) return 1;
409 /*************************************************************************
410 * AddFontSizeToCombo3 [internal]
412 static int AddFontSizeToCombo3(HWND hwnd, UINT h, const CHOOSEFONTW *lpcf)
416 static const WCHAR strFormat[] = {'%','2','d',0};
418 if ( (!(lpcf->Flags & CF_LIMITSIZE)) ||
419 ((lpcf->Flags & CF_LIMITSIZE) && (h >= lpcf->nSizeMin) && (h <= lpcf->nSizeMax)))
421 wsprintfW(buffer, strFormat, h);
422 j=SendMessageW(hwnd, CB_FINDSTRINGEXACT, -1, (LPARAM)buffer);
425 j=SendMessageW(hwnd, CB_ADDSTRING, 0, (LPARAM)buffer);
426 if (j!=CB_ERR) j = SendMessageW(hwnd, CB_SETITEMDATA, j, h);
427 if (j==CB_ERR) return 1;
433 /*************************************************************************
434 * SetFontSizesToCombo3 [internal]
436 static int SetFontSizesToCombo3(HWND hwnd, const CHOOSEFONTW *lpcf)
438 static const BYTE sizes[]={6,7,8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72};
441 for (i = 0; i < sizeof(sizes)/sizeof(sizes[0]); i++)
442 if (AddFontSizeToCombo3(hwnd, sizes[i], lpcf)) return 1;
446 /*************************************************************************
447 * CFn_GetDC [internal]
449 static inline HDC CFn_GetDC(const CHOOSEFONTW *lpcf)
451 HDC ret = ((lpcf->Flags & CF_PRINTERFONTS) && lpcf->hDC) ?
454 if(!ret) ERR("HDC failure!!!\n");
458 /*************************************************************************
459 * CFn_ReleaseDC [internal]
461 static inline void CFn_ReleaseDC(const CHOOSEFONTW *lpcf, HDC hdc)
463 if(!((lpcf->Flags & CF_PRINTERFONTS) && lpcf->hDC))
467 /***********************************************************************
468 * AddFontStyle [internal]
470 static INT AddFontStyle( const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM,
471 UINT nFontType, const CHOOSEFONTW *lpcf, HWND hcmb2, HWND hcmb3, HWND hDlg)
474 const LOGFONTW *lplf = &(lpElfex->elfLogFont);
478 TRACE("(nFontType=%d)\n",nFontType);
479 TRACE(" %s h=%d w=%d e=%d o=%d wg=%d i=%d u=%d s=%d"
480 " ch=%d op=%d cp=%d q=%d pf=%xh\n",
481 debugstr_w(lplf->lfFaceName),lplf->lfHeight,lplf->lfWidth,
482 lplf->lfEscapement,lplf->lfOrientation,
483 lplf->lfWeight,lplf->lfItalic,lplf->lfUnderline,
484 lplf->lfStrikeOut,lplf->lfCharSet, lplf->lfOutPrecision,
485 lplf->lfClipPrecision,lplf->lfQuality, lplf->lfPitchAndFamily);
486 if (nFontType & RASTER_FONTTYPE)
489 if(!(hdc = CFn_GetDC(lpcf))) return 0;
490 points = MulDiv( lpNTM->ntmTm.tmHeight - lpNTM->ntmTm.tmInternalLeading,
491 72, GetDeviceCaps(hdc, LOGPIXELSY));
492 CFn_ReleaseDC(lpcf, hdc);
493 i = AddFontSizeToCombo3(hcmb3, points, lpcf);
495 } else if (SetFontSizesToCombo3(hcmb3, lpcf)) return 0;
497 if (!SendMessageW(hcmb2, CB_GETCOUNT, 0, 0))
499 if(!(hdc = CFn_GetDC(lpcf))) return 0;
500 i=SetFontStylesToCombo2(hcmb2,hdc,lplf);
501 CFn_ReleaseDC(lpcf, hdc);
505 if (!( hcmb5 = GetDlgItem(hDlg, cmb5))) return 1;
506 i = SendMessageW( hcmb5, CB_FINDSTRINGEXACT, 0,
507 (LPARAM)lpElfex->elfScript);
509 i = SendMessageW( hcmb5, CB_ADDSTRING, 0,
510 (LPARAM)lpElfex->elfScript);
512 SendMessageW( hcmb5, CB_SETITEMDATA, i, lplf->lfCharSet);
517 static INT CFn_FitFontSize( HWND hDlg, int points)
521 /* look for fitting font size in combobox3 */
522 n=SendDlgItemMessageW(hDlg, cmb3, CB_GETCOUNT, 0, 0);
525 if (points == (int)SendDlgItemMessageW
526 (hDlg,cmb3, CB_GETITEMDATA,i,0))
528 SendDlgItemMessageW(hDlg,cmb3,CB_SETCURSEL,i,0);
529 SendMessageW(hDlg, WM_COMMAND,
530 MAKEWPARAM(cmb3, CBN_SELCHANGE),
531 (LPARAM)GetDlgItem(hDlg,cmb3));
539 static INT CFn_FitFontStyle( HWND hDlg, LONG packedstyle )
543 /* look for fitting font style in combobox2 */
544 for (i=0;i<TEXT_EXTRAS;i++)
546 id = SendDlgItemMessageW(hDlg, cmb2, CB_GETITEMDATA, i, 0);
547 if (packedstyle == id)
549 SendDlgItemMessageW(hDlg, cmb2, CB_SETCURSEL, i, 0);
550 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb2, CBN_SELCHANGE),
551 (LPARAM)GetDlgItem(hDlg,cmb2));
560 static INT CFn_FitCharSet( HWND hDlg, int charset )
563 /* look for fitting char set in combobox5 */
564 n=SendDlgItemMessageW(hDlg, cmb5, CB_GETCOUNT, 0, 0);
567 cs =SendDlgItemMessageW(hDlg, cmb5, CB_GETITEMDATA, i, 0);
570 SendDlgItemMessageW(hDlg, cmb5, CB_SETCURSEL, i, 0);
571 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb5, CBN_SELCHANGE),
572 (LPARAM)GetDlgItem(hDlg,cmb2));
576 /* no charset fits: select the first one in the list */
577 SendDlgItemMessageW(hDlg, cmb5, CB_SETCURSEL, 0, 0);
578 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb5, CBN_SELCHANGE),
579 (LPARAM)GetDlgItem(hDlg,cmb2));
583 /***********************************************************************
584 * FontStyleEnumProc32 [internal]
586 static INT WINAPI FontStyleEnumProc( const ENUMLOGFONTEXW *lpElfex,
587 const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam )
589 LPCFn_ENUMSTRUCT s=(LPCFn_ENUMSTRUCT)lParam;
592 HWND hDlg=GetParent(hcmb3);
593 return AddFontStyle( lpElfex, (const NEWTEXTMETRICEXW *) metrics,
594 dwFontType, s->lpcf32w, hcmb2, hcmb3, hDlg);
597 /***********************************************************************
598 * CFn_WMInitDialog [internal]
600 static LRESULT CFn_WMInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam, LPCHOOSEFONTW lpcf)
607 HCURSOR hcursor=SetCursor(LoadCursorW(0,(LPWSTR)IDC_WAIT));
608 static const WCHAR strColorName[] = {'[','c','o','l','o','r',' ','n','a','m','e',']',0};
610 SetPropW(hDlg, strWineFontData, lpcf);
611 lpxx=lpcf->lpLogFont;
612 TRACE("WM_INITDIALOG lParam=%08lX\n", lParam);
614 if (lpcf->lStructSize != sizeof(CHOOSEFONTW))
616 ERR("structure size failure !!!\n");
621 himlTT = ImageList_LoadImageW( COMDLG32_hInstance, MAKEINTRESOURCEW(38),
622 TTBITMAP_XSIZE, 0, CLR_DEFAULT, IMAGE_BITMAP, 0);
624 /* Set effect flags */
625 if((lpcf->Flags & CF_EFFECTS) && (lpcf->Flags & CF_INITTOLOGFONTSTRUCT))
627 if(lpxx->lfUnderline)
628 CheckDlgButton(hDlg, chx2, TRUE);
629 if(lpxx->lfStrikeOut)
630 CheckDlgButton(hDlg, chx1, TRUE);
633 if (!(lpcf->Flags & CF_SHOWHELP) || !IsWindow(lpcf->hwndOwner))
634 ShowWindow(GetDlgItem(hDlg,pshHelp),SW_HIDE);
635 if (!(lpcf->Flags & CF_APPLY))
636 ShowWindow(GetDlgItem(hDlg,psh3),SW_HIDE);
637 if (lpcf->Flags & CF_NOSCRIPTSEL)
638 EnableWindow(GetDlgItem(hDlg,cmb5),FALSE);
639 if (lpcf->Flags & CF_EFFECTS)
641 for (i=0;i<TEXT_COLORS;i++)
645 if( LoadStringW(COMDLG32_hInstance, IDS_COLOR_BLACK+i, name,
646 sizeof(name)/sizeof(*name) )==0 )
648 memcpy(name, strColorName, sizeof(strColorName));
650 j=SendDlgItemMessageW(hDlg, cmb4, CB_ADDSTRING, 0, (LPARAM)name);
651 SendDlgItemMessageW(hDlg, cmb4, CB_SETITEMDATA, j, textcolors[i]);
652 /* look for a fitting value in color combobox */
653 if (textcolors[i]==lpcf->rgbColors)
654 SendDlgItemMessageW(hDlg,cmb4, CB_SETCURSEL,j,0);
659 ShowWindow(GetDlgItem(hDlg,cmb4),SW_HIDE);
660 ShowWindow(GetDlgItem(hDlg,chx1),SW_HIDE);
661 ShowWindow(GetDlgItem(hDlg,chx2),SW_HIDE);
662 ShowWindow(GetDlgItem(hDlg,grp1),SW_HIDE);
663 ShowWindow(GetDlgItem(hDlg,stc4),SW_HIDE);
665 if(!(hdc = CFn_GetDC(lpcf)))
670 s.hWnd1=GetDlgItem(hDlg,cmb1);
675 elf.lfCharSet = DEFAULT_CHARSET; /* enum all charsets */
676 elf.lfPitchAndFamily = 0;
677 elf.lfFaceName[0] = '\0'; /* enum all fonts */
678 if (!EnumFontFamiliesExW(hdc, &elf, (FONTENUMPROCW)FontFamilyEnumProc, (LPARAM)&s, 0))
680 TRACE("EnumFontFamiliesEx returns 0\n");
684 if (lpcf->Flags & CF_FIXEDPITCHONLY) {
685 FIXME("No font found with fixed pitch only, dropping flag.\n");
686 lpcf->Flags &= ~CF_FIXEDPITCHONLY;
689 if (lpcf->Flags & CF_TTONLY) {
690 FIXME("No font found with truetype only, dropping flag.\n");
691 lpcf->Flags &= ~CF_TTONLY;
698 if (lpcf->Flags & CF_INITTOLOGFONTSTRUCT)
700 /* look for fitting font name in combobox1 */
701 j=SendDlgItemMessageW(hDlg,cmb1,CB_FINDSTRING,-1,(LPARAM)lpxx->lfFaceName);
704 INT height = lpxx->lfHeight < 0 ? -lpxx->lfHeight :
707 int charset = lpxx->lfCharSet;
708 points = MulDiv( height, 72, GetDeviceCaps(hdc, LOGPIXELSY));
709 pstyle = MAKELONG(lpxx->lfWeight > FW_MEDIUM ? FW_BOLD:
710 FW_NORMAL,lpxx->lfItalic !=0);
711 SendDlgItemMessageW(hDlg, cmb1, CB_SETCURSEL, j, 0);
712 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb1, CBN_SELCHANGE),
713 (LPARAM)GetDlgItem(hDlg,cmb1));
715 /* look for fitting font style in combobox2 */
716 CFn_FitFontStyle(hDlg, pstyle);
717 /* look for fitting font size in combobox3 */
718 CFn_FitFontSize(hDlg, points);
719 CFn_FitCharSet( hDlg, charset );
724 SendDlgItemMessageW(hDlg,cmb1,CB_SETCURSEL,0,0);
725 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb1, CBN_SELCHANGE),
726 (LPARAM)GetDlgItem(hDlg,cmb1));
727 SendDlgItemMessageW(hDlg,cmb2,CB_SETCURSEL,0,0);
728 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb2, CBN_SELCHANGE),
729 (LPARAM)GetDlgItem(hDlg,cmb1));
730 SendDlgItemMessageW(hDlg,cmb3,CB_SETCURSEL,0,0);
731 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb3, CBN_SELCHANGE),
732 (LPARAM)GetDlgItem(hDlg,cmb3));
733 SendDlgItemMessageW(hDlg,cmb5,CB_SETCURSEL,0,0);
734 SendMessageW(hDlg, WM_COMMAND, MAKEWPARAM(cmb5, CBN_SELCHANGE),
735 (LPARAM)GetDlgItem(hDlg,cmb5));
737 if ((lpcf->Flags & CF_USESTYLE) && lpcf->lpszStyle)
739 j=SendDlgItemMessageW(hDlg,cmb2,CB_FINDSTRING,-1,(LPARAM)lpcf->lpszStyle);
742 j=SendDlgItemMessageW(hDlg,cmb2,CB_SETCURSEL,j,0);
743 SendMessageW(hDlg,WM_COMMAND,cmb2,
744 MAKELONG(HWND_16(GetDlgItem(hDlg,cmb2)),CBN_SELCHANGE));
747 CFn_ReleaseDC(lpcf, hdc);
753 /***********************************************************************
754 * CFn_WMMeasureItem [internal]
756 static LRESULT CFn_WMMeasureItem(HWND hDlg, WPARAM wParam, LPARAM lParam)
761 LPMEASUREITEMSTRUCT lpmi=(LPMEASUREITEMSTRUCT)lParam;
765 himlTT = ImageList_LoadImageW( COMDLG32_hInstance, MAKEINTRESOURCEW(38),
766 TTBITMAP_XSIZE, 0, CLR_DEFAULT, IMAGE_BITMAP, 0);
767 ImageList_GetIconSize( himlTT, 0, &height);
768 lpmi->itemHeight = height + 2;
769 /* use MAX of bitmap height and tm.tmHeight .*/
772 hfontprev = SelectObject( hdc, GetStockObject( SYSTEM_FONT));
773 GetTextMetricsW(hdc, &tm);
774 if( tm.tmHeight > lpmi->itemHeight) lpmi->itemHeight = tm.tmHeight;
775 SelectObject(hdc, hfontprev);
776 ReleaseDC(hDlg, hdc);
781 /***********************************************************************
782 * CFn_WMDrawItem [internal]
784 static LRESULT CFn_WMDrawItem(HWND hDlg, WPARAM wParam, LPARAM lParam)
788 COLORREF cr, oldText=0, oldBk=0;
792 LPDRAWITEMSTRUCT lpdi = (LPDRAWITEMSTRUCT)lParam;
794 if (lpdi->itemID == (UINT)-1) /* got no items */
795 DrawFocusRect(lpdi->hDC, &lpdi->rcItem);
798 if (lpdi->CtlType == ODT_COMBOBOX)
800 if (lpdi->itemState & ODS_SELECTED)
802 hBrush=GetSysColorBrush(COLOR_HIGHLIGHT);
803 oldText=SetTextColor(lpdi->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
804 oldBk=SetBkColor(lpdi->hDC, GetSysColor(COLOR_HIGHLIGHT));
807 hBrush = SelectObject(lpdi->hDC, GetStockObject(LTGRAY_BRUSH));
808 SelectObject(lpdi->hDC, hBrush);
810 FillRect(lpdi->hDC, &lpdi->rcItem, hBrush);
813 return TRUE; /* this should never happen */
819 /* TRACE(commdlg,"WM_Drawitem cmb1\n"); */
820 SendMessageW(lpdi->hwndItem, CB_GETLBTEXT, lpdi->itemID,
822 TextOutW(lpdi->hDC, lpdi->rcItem.left + TTBITMAP_XSIZE + 10,
823 lpdi->rcItem.top, buffer, lstrlenW(buffer));
824 nFontType = SendMessageW(lpdi->hwndItem, CB_GETITEMDATA, lpdi->itemID,0L);
826 if (nFontType & TRUETYPE_FONTTYPE) {
827 idx = 0; /* picture: TT */
828 if( nFontType & NTM_TT_OPENTYPE)
829 idx = 2; /* picture: O */
830 } else if( nFontType & NTM_PS_OPENTYPE)
831 idx = 3; /* picture: O+ps */
832 else if( nFontType & NTM_TYPE1)
833 idx = 4; /* picture: a */
834 else if( nFontType & DEVICE_FONTTYPE)
835 idx = 1; /* picture: printer */
837 ImageList_Draw( himlTT, idx, lpdi->hDC, lpdi->rcItem.left,
838 lpdi->rcItem.top, ILD_TRANSPARENT);
842 /* TRACE(commdlg,"WM_DRAWITEN cmb2,cmb3\n"); */
844 SendMessageW(lpdi->hwndItem, CB_GETLBTEXT, lpdi->itemID,
846 TextOutW(lpdi->hDC, lpdi->rcItem.left,
847 lpdi->rcItem.top, buffer, lstrlenW(buffer));
851 /* TRACE(commdlg,"WM_DRAWITEM cmb4 (=COLOR)\n"); */
852 SendMessageW(lpdi->hwndItem, CB_GETLBTEXT, lpdi->itemID,
854 TextOutW(lpdi->hDC, lpdi->rcItem.left + 25+5,
855 lpdi->rcItem.top, buffer, lstrlenW(buffer));
856 cr = SendMessageW(lpdi->hwndItem, CB_GETITEMDATA, lpdi->itemID,0L);
857 hBrush = CreateSolidBrush(cr);
860 hBrush = SelectObject (lpdi->hDC, hBrush) ;
861 rect.right=rect.left+25;
865 Rectangle( lpdi->hDC, rect.left, rect.top,
866 rect.right, rect.bottom );
867 DeleteObject( SelectObject (lpdi->hDC, hBrush)) ;
874 return TRUE; /* this should never happen */
876 if (lpdi->itemState & ODS_SELECTED)
878 SetTextColor(lpdi->hDC, oldText);
879 SetBkColor(lpdi->hDC, oldBk);
885 /***********************************************************************
886 * CFn_WMCommand [internal]
888 static LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam, LPCHOOSEFONTW lpcf)
893 LPLOGFONTW lpxx=lpcf->lpLogFont;
895 TRACE("WM_COMMAND wParam=%08X lParam=%08lX\n", (LONG)wParam, lParam);
896 switch (LOWORD(wParam))
899 if (HIWORD(wParam)==CBN_SELCHANGE)
901 INT pointsize; /* save current pointsize */
902 LONG pstyle; /* save current style */
905 if(!(hdc = CFn_GetDC(lpcf)))
910 idx = SendDlgItemMessageW(hDlg, cmb3, CB_GETCURSEL, 0, 0);
911 pointsize = (int)SendDlgItemMessageW( hDlg, cmb3, CB_GETITEMDATA,
913 idx = SendDlgItemMessageW(hDlg, cmb2, CB_GETCURSEL, 0, 0);
914 pstyle = SendDlgItemMessageW(hDlg, cmb2, CB_GETITEMDATA, idx, 0);
915 idx = SendDlgItemMessageW(hDlg, cmb5, CB_GETCURSEL, 0, 0);
916 charset = SendDlgItemMessageW(hDlg, cmb5, CB_GETITEMDATA, idx, 0);
918 SendDlgItemMessageW(hDlg, cmb2, CB_RESETCONTENT, 0, 0);
919 SendDlgItemMessageW(hDlg, cmb3, CB_RESETCONTENT, 0, 0);
920 SendDlgItemMessageW(hDlg, cmb5, CB_RESETCONTENT, 0, 0);
921 i=SendDlgItemMessageW(hDlg, cmb1, CB_GETCURSEL, 0, 0);
924 HCURSOR hcursor=SetCursor(LoadCursorW(0,(LPWSTR)IDC_WAIT));
927 SendDlgItemMessageW(hDlg, cmb1, CB_GETLBTEXT, i,
928 (LPARAM)enumlf.lfFaceName);
929 TRACE("WM_COMMAND/cmb1 =>%s\n", debugstr_w(enumlf.lfFaceName));
930 s.hWnd1=GetDlgItem(hDlg, cmb2);
931 s.hWnd2=GetDlgItem(hDlg, cmb3);
933 enumlf.lfCharSet = DEFAULT_CHARSET; /* enum all charsets */
934 enumlf.lfPitchAndFamily = 0;
935 EnumFontFamiliesExW(hdc, &enumlf,
936 (FONTENUMPROCW)FontStyleEnumProc, (LPARAM)&s, 0);
937 CFn_FitFontStyle(hDlg, pstyle);
938 if( pointsize != CB_ERR) CFn_FitFontSize(hDlg, pointsize);
939 if( charset != CB_ERR) CFn_FitCharSet( hDlg, charset );
942 CFn_ReleaseDC(lpcf, hdc);
949 if (HIWORD(wParam)==CBN_SELCHANGE || HIWORD(wParam)== BN_CLICKED )
954 TRACE("WM_COMMAND/cmb2,3 =%08lX\n", lParam);
955 i=SendDlgItemMessageW(hDlg,cmb1,CB_GETCURSEL,0,0);
957 i=GetDlgItemTextW( hDlg, cmb1, str, 256 );
960 SendDlgItemMessageW(hDlg,cmb1,CB_GETLBTEXT,i,
962 l=SendDlgItemMessageW(hDlg,cmb1,CB_GETITEMDATA,i,0);
963 lpcf->nFontType = LOWORD(l);
964 /* FIXME: lpcf->nFontType |= .... SIMULATED_FONTTYPE and so */
965 /* same value reported to the EnumFonts
966 call back with the extra FONTTYPE_... bits added */
967 lpxx->lfPitchAndFamily = HIWORD(l) >> 8;
969 lstrcpynW(lpxx->lfFaceName, str, sizeof(lpxx->lfFaceName)/sizeof(lpxx->lfFaceName[0]));
970 i=SendDlgItemMessageW(hDlg, cmb2, CB_GETCURSEL, 0, 0);
973 l=SendDlgItemMessageW(hDlg, cmb2, CB_GETITEMDATA, i, 0);
974 if (0!=(lpxx->lfItalic=HIWORD(l)))
975 lpcf->nFontType |= ITALIC_FONTTYPE;
976 if ((lpxx->lfWeight=LOWORD(l)) > FW_MEDIUM)
977 lpcf->nFontType |= BOLD_FONTTYPE;
979 i=SendDlgItemMessageW(hDlg, cmb3, CB_GETCURSEL, 0, 0);
981 lpcf->iPointSize = 10 * LOWORD(SendDlgItemMessageW(hDlg, cmb3,
982 CB_GETITEMDATA , i, 0));
984 lpcf->iPointSize = 100;
985 hdc = CFn_GetDC(lpcf);
988 lpxx->lfHeight = - MulDiv( lpcf->iPointSize ,
989 GetDeviceCaps(hdc, LOGPIXELSY), 720);
990 CFn_ReleaseDC(lpcf, hdc);
992 lpxx->lfHeight = -lpcf->iPointSize / 10;
993 i=SendDlgItemMessageW(hDlg, cmb5, CB_GETCURSEL, 0, 0);
995 lpxx->lfCharSet=SendDlgItemMessageW(hDlg, cmb5, CB_GETITEMDATA, i, 0);
997 lpxx->lfCharSet = DEFAULT_CHARSET;
998 lpxx->lfStrikeOut=IsDlgButtonChecked(hDlg,chx1);
999 lpxx->lfUnderline=IsDlgButtonChecked(hDlg,chx2);
1000 lpxx->lfWidth=lpxx->lfOrientation=lpxx->lfEscapement=0;
1001 lpxx->lfOutPrecision=OUT_DEFAULT_PRECIS;
1002 lpxx->lfClipPrecision=CLIP_DEFAULT_PRECIS;
1003 lpxx->lfQuality=DEFAULT_QUALITY;
1005 wininfo.cbSize=sizeof(wininfo);
1007 if( GetWindowInfo( GetDlgItem( hDlg, stc5), &wininfo ) )
1009 MapWindowPoints( 0, hDlg, (LPPOINT) &wininfo.rcWindow, 2);
1010 InvalidateRect( hDlg, &wininfo.rcWindow, TRUE );
1016 i=SendDlgItemMessageW(hDlg, cmb4, CB_GETCURSEL, 0, 0);
1021 lpcf->rgbColors = SendDlgItemMessageW(hDlg, cmb4, CB_GETITEMDATA, i, 0);
1022 wininfo.cbSize=sizeof(wininfo);
1024 if( GetWindowInfo( GetDlgItem( hDlg, stc5), &wininfo ) )
1026 MapWindowPoints( 0, hDlg, (LPPOINT) &wininfo.rcWindow, 2);
1027 InvalidateRect( hDlg, &wininfo.rcWindow, TRUE );
1033 i=RegisterWindowMessageW( HELPMSGSTRINGW );
1034 if (lpcf->hwndOwner)
1035 SendMessageW(lpcf->hwndOwner, i, 0, (LPARAM)GetPropW(hDlg, strWineFontData));
1039 if ( (!(lpcf->Flags & CF_LIMITSIZE)) ||
1040 ( (lpcf->Flags & CF_LIMITSIZE) &&
1041 (lpcf->iPointSize >= 10 * lpcf->nSizeMin) &&
1042 (lpcf->iPointSize <= 10 * lpcf->nSizeMax)))
1043 EndDialog(hDlg, TRUE);
1048 LoadStringW(COMDLG32_hInstance, IDS_FONT_SIZE, format, sizeof(format)/sizeof(WCHAR));
1049 wsprintfW(buffer, format, lpcf->nSizeMin,lpcf->nSizeMax);
1050 MessageBoxW(hDlg, buffer, NULL, MB_OK);
1054 EndDialog(hDlg, FALSE);
1060 static LRESULT CFn_WMDestroy(HWND hwnd, WPARAM wParam, LPARAM lParam, LPCHOOSEFONTW lpcfw)
1062 LPCHOOSEFONTA lpcfa;
1064 LPLOGFONTA lpLogFonta;
1067 lpcfa = GetPropW(hwnd, strWineFontData_a);
1068 lpLogFonta = lpcfa->lpLogFont;
1069 lpszStyle = lpcfa->lpszStyle;
1070 memcpy(lpcfa, lpcfw, sizeof(CHOOSEFONTA));
1071 lpcfa->lpLogFont = lpLogFonta;
1072 lpcfa->lpszStyle = lpszStyle;
1073 memcpy(lpcfa->lpLogFont, lpcfw->lpLogFont, sizeof(LOGFONTA));
1074 WideCharToMultiByte(CP_ACP, 0, lpcfw->lpLogFont->lfFaceName,
1075 LF_FACESIZE, lpcfa->lpLogFont->lfFaceName, LF_FACESIZE, 0, 0);
1077 if((lpcfw->Flags & CF_USESTYLE) && lpcfw->lpszStyle) {
1078 len = WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, NULL, 0, 0, 0);
1079 WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, lpcfa->lpszStyle, len, 0, 0);
1080 HeapFree(GetProcessHeap(), 0, lpcfw->lpszStyle);
1083 HeapFree(GetProcessHeap(), 0, lpcfw->lpLogFont);
1084 HeapFree(GetProcessHeap(), 0, lpcfw);
1085 SetPropW(hwnd, strWineFontData, 0);
1090 static LRESULT CFn_WMPaint(HWND hDlg, WPARAM wParam, LPARAM lParam, const CHOOSEFONTW *lpcf)
1094 info.cbSize=sizeof(info);
1095 if( GetWindowInfo( GetDlgItem( hDlg, stc5), &info ) )
1101 LOGFONTW lf = *(lpcf->lpLogFont);
1103 MapWindowPoints( 0, hDlg, (LPPOINT) &info.rcWindow, 2);
1104 hdc = BeginPaint( hDlg, &ps );
1106 TRACE("erase %d, rect=(%d,%d)-(%d,%d)\n", ps.fErase,
1107 ps.rcPaint.left, ps.rcPaint.top,
1108 ps.rcPaint.right, ps.rcPaint.bottom);
1111 MoveToEx( hdc, info.rcWindow.left, info.rcWindow.bottom, NULL );
1112 hOrigPen=SelectObject( hdc, CreatePen( PS_SOLID, 2,
1113 GetSysColor( COLOR_3DSHADOW ) ));
1114 LineTo( hdc, info.rcWindow.left, info.rcWindow.top );
1115 LineTo( hdc, info.rcWindow.right, info.rcWindow.top );
1116 DeleteObject(SelectObject( hdc, CreatePen( PS_SOLID, 2,
1117 GetSysColor( COLOR_3DLIGHT ) )));
1118 LineTo( hdc, info.rcWindow.right, info.rcWindow.bottom );
1119 LineTo( hdc, info.rcWindow.left, info.rcWindow.bottom );
1120 DeleteObject(SelectObject( hdc, hOrigPen ));
1122 /* Draw the sample text itself */
1123 info.rcWindow.right--;
1124 info.rcWindow.bottom--;
1125 info.rcWindow.top++;
1126 info.rcWindow.left++;
1127 hOrigFont = SelectObject( hdc, CreateFontIndirectW( &lf ) );
1128 SetTextColor( hdc, lpcf->rgbColors );
1131 sample_lang_text[CHARSET_ORDER[lpcf->lpLogFont->lfCharSet]],
1132 -1, &info.rcWindow, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
1134 DeleteObject(SelectObject( hdc, hOrigFont ));
1135 EndPaint( hDlg, &ps );
1140 /***********************************************************************
1141 * FormatCharDlgProcA [internal]
1143 static INT_PTR CALLBACK FormatCharDlgProcA(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
1145 LPCHOOSEFONTW lpcfw;
1146 LPCHOOSEFONTA lpcfa;
1147 INT_PTR res = FALSE;
1150 if (uMsg!=WM_INITDIALOG) {
1151 lpcfw = GetPropW(hDlg, strWineFontData);
1154 if (CFn_HookCallChk32(lpcfw))
1155 res=CallWindowProcA((WNDPROC)lpcfw->lpfnHook, hDlg, uMsg, wParam, lParam);
1159 lpcfa=(LPCHOOSEFONTA)lParam;
1160 SetPropW(hDlg, strWineFontData_a, (HANDLE)lParam);
1162 lpcfw = HeapAlloc(GetProcessHeap(), 0, sizeof(CHOOSEFONTW));
1163 memcpy(lpcfw, lpcfa, sizeof(CHOOSEFONTA));
1164 lpcfw->lpLogFont = HeapAlloc(GetProcessHeap(), 0, sizeof(LOGFONTW));
1165 memcpy(lpcfw->lpLogFont, lpcfa->lpLogFont, sizeof(LOGFONTA));
1166 MultiByteToWideChar(CP_ACP, 0, lpcfa->lpLogFont->lfFaceName,
1167 LF_FACESIZE, lpcfw->lpLogFont->lfFaceName, LF_FACESIZE);
1169 if((lpcfa->Flags & CF_USESTYLE) && lpcfa->lpszStyle) {
1170 len = MultiByteToWideChar(CP_ACP, 0, lpcfa->lpszStyle, -1, NULL, 0);
1171 lpcfw->lpszStyle = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
1172 MultiByteToWideChar(CP_ACP, 0, lpcfa->lpszStyle, -1, lpcfw->lpszStyle, len);
1175 if (!CFn_WMInitDialog(hDlg, wParam, lParam, lpcfw))
1177 TRACE("CFn_WMInitDialog returned FALSE\n");
1180 if (CFn_HookCallChk32(lpcfw))
1181 return CallWindowProcA((WNDPROC)lpcfa->lpfnHook,hDlg,WM_INITDIALOG,wParam,lParam);
1185 case WM_MEASUREITEM:
1186 return CFn_WMMeasureItem(hDlg, wParam, lParam);
1188 return CFn_WMDrawItem(hDlg, wParam, lParam);
1190 return CFn_WMCommand(hDlg, wParam, lParam, lpcfw);
1192 return CFn_WMDestroy(hDlg, wParam, lParam, lpcfw);
1193 case WM_CHOOSEFONT_GETLOGFONT:
1194 TRACE("WM_CHOOSEFONT_GETLOGFONT lParam=%08lX\n", lParam);
1195 FIXME("current logfont back to caller\n");
1198 return CFn_WMPaint(hDlg, wParam, lParam, lpcfw);
1203 /***********************************************************************
1204 * FormatCharDlgProcW [internal]
1206 static INT_PTR CALLBACK FormatCharDlgProcW(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
1209 INT_PTR res = FALSE;
1211 if (uMsg!=WM_INITDIALOG)
1213 lpcf= GetPropW(hDlg, strWineFontData);
1216 if (CFn_HookCallChk32(lpcf))
1217 res=CallWindowProcW((WNDPROC)lpcf->lpfnHook, hDlg, uMsg, wParam, lParam);
1223 lpcf=(LPCHOOSEFONTW)lParam;
1224 if (!CFn_WMInitDialog(hDlg, wParam, lParam, lpcf))
1226 TRACE("CFn_WMInitDialog returned FALSE\n");
1229 if (CFn_HookCallChk32(lpcf))
1230 return CallWindowProcW((WNDPROC)lpcf->lpfnHook,hDlg,WM_INITDIALOG,wParam,lParam);
1234 case WM_MEASUREITEM:
1235 return CFn_WMMeasureItem(hDlg, wParam, lParam);
1237 return CFn_WMDrawItem(hDlg, wParam, lParam);
1239 return CFn_WMCommand(hDlg, wParam, lParam, lpcf);
1242 case WM_CHOOSEFONT_GETLOGFONT:
1243 TRACE("WM_CHOOSEFONT_GETLOGFONT lParam=%08lX\n", lParam);
1244 FIXME("current logfont back to caller\n");
1247 return CFn_WMPaint(hDlg, wParam, lParam, lpcf);