fontdlg16: fix FormatCharDlgProc16
Rein Klazes
wijn at wanadoo.nl
Tue Nov 22 09:32:20 CST 2005
Hi,
fixes bug 3881.
Changelog:
dlls/commdlg : fontdlg16.c
Fixes for FormatCharDlgProc16:
- properly store the ChooseFont pointer, use a window property as the A
and W functions do;
- handle other messages then WM_INITDIALOG and WM_MEASUREITEM as well.
Rein.
-------------- next part --------------
--- wine/dlls/commdlg/fontdlg16.c 2005-07-08 12:38:56.000000000 +0200
+++ mywine/dlls/commdlg/fontdlg16.c 2005-11-22 16:13:09.000000000 +0100
@@ -41,6 +41,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
#include "cdlg.h"
#include "cdlg16.h"
+static const WCHAR strWineFontData16[] =
+ {'_','_','W','I','N','E','_','F','O','N','T','D','L','G','D','A','T','A','1','6',0};
+
static void FONT_LogFont16To32W( const LPLOGFONT16 font16, LPLOGFONTW font32 )
{
font32->lfHeight = font16->lfHeight;
@@ -122,11 +126,13 @@ INT16 WINAPI FontFamilyEnumProc16( SEGPT
{
HWND hwnd=HWND_32(LOWORD(lParam));
HWND hDlg=GetParent(hwnd);
- LPCHOOSEFONT16 lpcf=(LPCHOOSEFONT16)GetWindowLongPtrW(hDlg, DWLP_USER);
+ LPCHOOSEFONT16 lpcf;
LOGFONT16 *lplf = MapSL( logfont );
TEXTMETRIC16 *lpmtrx16 = MapSL(metrics);
ENUMLOGFONTEXW elf32w;
NEWTEXTMETRICEXW nmtrx32w;
+
+ lpcf = (LPCHOOSEFONT16)GetPropW(hDlg, strWineFontData16);
FONT_LogFont16To32W(lplf, &(elf32w.elfLogFont));
FONT_Metrics16To32W(lpmtrx16, &nmtrx32w);
return AddFontFamily(&elf32w, &nmtrx32w, nFontType,
@@ -142,11 +148,13 @@ INT16 WINAPI FontStyleEnumProc16( SEGPTR
HWND hcmb2=HWND_32(LOWORD(lParam));
HWND hcmb3=HWND_32(HIWORD(lParam));
HWND hDlg=GetParent(hcmb3);
- LPCHOOSEFONT16 lpcf=(LPCHOOSEFONT16)GetWindowLongPtrW(hDlg, DWLP_USER);
+ LPCHOOSEFONT16 lpcf;
LOGFONT16 *lplf = MapSL(logfont);
TEXTMETRIC16 *lpmtrx16 = MapSL(metrics);
ENUMLOGFONTEXW elf32w;
NEWTEXTMETRICEXW nmtrx32w;
+
+ lpcf = (LPCHOOSEFONT16)GetPropW(hDlg, strWineFontData16);
FONT_LogFont16To32W(lplf, &(elf32w.elfLogFont));
FONT_Metrics16To32W(lpmtrx16, &nmtrx32w);
return AddFontStyle(&elf32w, &nmtrx32w, nFontType,
@@ -300,13 +308,13 @@ BOOL16 CALLBACK FormatCharDlgProc16(HWND
BOOL16 res=0;
if (message!=WM_INITDIALOG)
{
- lpcf=(LPCHOOSEFONT16)GetWindowLongPtrW(hDlg, DWLP_USER);
- if (!lpcf && message != WM_MEASUREITEM)
- return FALSE;
- if (CFn_HookCallChk(lpcf))
- res=CallWindowProc16((WNDPROC16)lpcf->lpfnHook,hDlg16,message,wParam,lParam);
- if (res)
- return res;
+ lpcf = (LPCHOOSEFONT16)GetPropW(hDlg, strWineFontData16);
+ if (!lpcf)
+ return FALSE;
+ if (CFn_HookCallChk(lpcf))
+ res=CallWindowProc16((WNDPROC16)lpcf->lpfnHook,hDlg16,message,wParam,lParam);
+ if (res)
+ return res;
}
else
{
@@ -316,6 +324,7 @@ BOOL16 CALLBACK FormatCharDlgProc16(HWND
TRACE("CFn_WMInitDialog returned FALSE\n");
return FALSE;
}
+ SetPropW(hDlg, strWineFontData16, (HANDLE)lParam);
if (CFn_HookCallChk(lpcf))
return CallWindowProc16((WNDPROC16)lpcf->lpfnHook,hDlg16,WM_INITDIALOG,wParam,lParam);
}
More information about the wine-patches
mailing list