-
Notifications
You must be signed in to change notification settings - Fork 1
/
FontDlg.cpp
61 lines (52 loc) · 1.61 KB
/
FontDlg.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
* $Header: /Book/FontDlg.cpp 12 28.11.99 22:18 Oslph312 $
*/
#include "precomp.h"
#include "Editor.h"
#include "resource.h"
#include "utils.h"
#include "winUtils.h"
#include "FontDlg.h"
UINT CALLBACK FontHookProc(
HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
static bool s_wasPositioned = false;
if ( WM_INITDIALOG == msg ) {
const CHOOSEFONT *pChooseFont =
reinterpret_cast< const CHOOSEFONT * >( lParam );
assert( isGoodConstPtr( pChooseFont ) );
centerDialog( hwnd );
const Rect *prcAvoid =
reinterpret_cast< const Rect * >( pChooseFont->lCustData );
s_wasPositioned = 0 != prcAvoid;
if ( s_wasPositioned ) {
moveWindow( hwnd, prcAvoid );
adjustToScreen( hwnd );
} else {
restorePosition( hwnd, IDD_FONT );
}
return TRUE;
} else if ( WM_DESTROY == msg ) {
if ( !s_wasPositioned ) {
savePosition( hwnd, IDD_FONT );
}
}
return 0;
}
bool selectFont( HWND hwndParent, LOGFONT *pLogFont,
const Rect *prcAvoid, DWORD dwExtraFlags )
{
const DWORD chooseFontFlags =
CF_SCREENFONTS | CF_ENABLEHOOK | CF_ENABLETEMPLATE |
CF_INITTOLOGFONTSTRUCT | CF_FORCEFONTEXIST;
CHOOSEFONT chooseFont = {
sizeof( CHOOSEFONT ), hwndParent, 0, pLogFont, 0,
chooseFontFlags | dwExtraFlags,
};
chooseFont.lpfnHook = FontHookProc;
chooseFont.lpTemplateName = MAKEINTRESOURCE( IDD_FONT );
chooseFont.hInstance = getModuleHandle();
chooseFont.lCustData = reinterpret_cast< LPARAM >( prcAvoid );
return 0 != ChooseFont( &chooseFont );
}
// end of file