ChooseFont - bestimmten Font voreinstellen

23/09/2008 - 21:37 von Franz Bachler | Report spam
Hallo Leute,

hier ein Auszug meiner Druckfunktion mit Auswahl des Fonts:

BOOL PrintFile (HWND hWnd, HWND hWndEdit, PTSTR szTitleName)
{
DOCINFO di;
PRINTDLG pd;
BOOL bSuccess;
int yChar, iCharsPerLine, iLinesPerPage, iTotalLines;
int iTotalPages, iPage, iLine, iLineNum;
PTSTR pstrBuffer;
TEXTMETRIC tm;
WORD iColCopy, iNoiColCopy;
CHOOSEFONT cfTemp;
LOGFONT lfTemp;
HFONT MyFont;
LONG yLogPixelsPerInch;

memset(&lfTemp, '\0', sizeof(LOGFONT));
memset(&cfTemp, '\0', sizeof(CHOOSEFONT));
cfTemp.lStructSize = sizeof( CHOOSEFONT );
cfTemp.hwndOwner = hWnd;
cfTemp.hDC = 0;
cfTemp.lpLogFont = &lfTemp;
cfTemp.Flags = CF_EFFECTS | CF_BOTH;

if( ChooseFont( &cfTemp ) != TRUE )
return(0);

// Invoke Print common dialog box
ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof (PRINTDLG);
pd.hwndOwner = hWnd;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
pd.Flags = PD_ALLPAGES | PD_COLLATE |
PD_RETURNDC | PD_NOSELECTION |
PD_PRINTSETUP;
pd.nCopies = 1;

if (!PrintDlg (&pd))
return(0);

// Skalierung

yLogPixelsPerInch = GetDeviceCaps(pd.hDC, LOGPIXELSY);
lfTemp.lfHeight = -MulDiv(cfTemp.iPointSize/10, yLogPixelsPerInch, 72);

MyFont = CreateFontIndirect( &lfTemp );

SelectObject(pd.hDC, MyFont);



DeleteObject(MyFont);
DeleteDC (pd.hDC);
return(bSuccess);

Frage eins: Ich möchte, dass beim Aufruf von ChooseFont gleich die
Schriftart "Courier" voreingestellt wird. Derzeit erscheint nur ein leeres
Feld bei der Schriftart.

Frage zwei: Freigabe des Fonts am Ende der Funktion mit

DeleteObject(MyFont);

richtig bzw notwendig? (Vermeidung von Speicherlecks)

Grüsse
Franz

Franz Bachler, A-3250 Wieselburg
E-Mail: fraba (at) gmx.at
Homepage: http://members.aon.at/fraba
oder http://home.pages.at/fraba
 

Lesen sie die antworten

#1 Arno Welzel
24/09/2008 - 11:36 | Warnen spam
Franz Bachler wrote:

hier ein Auszug meiner Druckfunktion mit Auswahl des Fonts:

BOOL PrintFile (HWND hWnd, HWND hWndEdit, PTSTR szTitleName)
{
DOCINFO di;
PRINTDLG pd;
BOOL bSuccess;
int yChar, iCharsPerLine, iLinesPerPage, iTotalLines;
int iTotalPages, iPage, iLine, iLineNum;
PTSTR pstrBuffer;
TEXTMETRIC tm;
WORD iColCopy, iNoiColCopy;
CHOOSEFONT cfTemp;
LOGFONT lfTemp;
HFONT MyFont;
LONG yLogPixelsPerInch;

memset(&lfTemp, '\0', sizeof(LOGFONT));
memset(&cfTemp, '\0', sizeof(CHOOSEFONT));
cfTemp.lStructSize = sizeof( CHOOSEFONT );
cfTemp.hwndOwner = hWnd;
cfTemp.hDC = 0;
cfTemp.lpLogFont = &lfTemp;
cfTemp.Flags = CF_EFFECTS | CF_BOTH;

if( ChooseFont( &cfTemp ) != TRUE )
return(0);


[...]

Frage eins: Ich möchte, dass beim Aufruf von ChooseFont gleich die
Schriftart "Courier" voreingestellt wird. Derzeit erscheint nur ein leeres
Feld bei der Schriftart.



Dann befülle lfTemp entsprechend. Im Zweifelsfall schau Dir im Debugger
an, was genau als Voreinstellung nötig ist - also nach dem Aufruf von
ChooseFont() einen Breakpoint setzen, dann im Programm "Courier"
auswàhlen und nachsehen, was in lfTemp drinsteht.
Frage zwei: Freigabe des Fonts am Ende der Funktion mit

DeleteObject(MyFont);

richtig bzw notwendig? (Vermeidung von Speicherlecks)



Es schadet zumindest nicht. Allerdings werden GDI-Objekte ohnehin
automatisch freigegeben.


http://arnowelzel.de
http://de-rec-fahrrad.de

Ähnliche fragen