Ветеран
Сообщения: 2371
Благодарности: 562
|
Профиль
|
Отправить PM
| Цитировать
Код программы "Font Viewer" :
(от китайских товарищей. Перевод гугловский, может быть не точен... )
читать дальше »
Код: 
!include MUI2.nsh
!include nsWindows.nsh
!include WinCore.nsh
!define BS_SOLID 0
!define BS_NULL 1
!define TRANSPARENT 1
!define OPAQUE 2
!define CC_TEXT 1
!define CC_BK 4
!define CC_BKB 16
!define GWL_USERDATA -21
!define CF_SCREENFONTS 0x00000001
!define CF_PRINTERFONTS 0x00000002
!define CF_BOTH ${CF_SCREENFONTS}|${CF_PRINTERFONTS}
!define CF_SHOWHELP 0x00000004
!define CF_ENABLEHOOK 0x00000008
!define CF_ENABLETEMPLATE 0x00000010
!define CF_ENABLETEMPLATEHANDLE 0x00000020
!define CF_INITTOLOGFONTSTRUCT 0x00000040
!define CF_USESTYLE 0x00000080
!define CF_EFFECTS 0x00000100
!define CF_APPLY 0x00000200
!define CF_ANSIONLY 0x00000400
#if(WINVER >= 0x0400)
!define CF_SCRIPTSONLY ${CF_ANSIONLY}
#endif /* WINVER >= 0x0400 */
!define CF_NOVECTORFONTS 0x00000800
!define CF_NOOEMFONTS ${CF_NOVECTORFONTS}
!define CF_NOSIMULATIONS 0x00001000
!define CF_LIMITSIZE 0x00002000
!define CF_FIXEDPITCHONLY 0x00004000
!define CF_WYSIWYG 0x00008000 #// must also have CF_SCREENFONTS & CF_PRINTERFONTS
!define CF_FORCEFONTEXIST 0x00010000
!define CF_SCALABLEONLY 0x00020000
!define CF_TTONLY 0x00040000
!define CF_NOFACESEL 0x00080000
!define CF_NOSTYLESEL 0x00100000
!define CF_NOSIZESEL 0x00200000
#if(WINVER >= 0x0400)
!define CF_SELECTSCRIPT 0x00400000
!define CF_NOSCRIPTSEL 0x00800000
!define CF_NOVERTFONTS 0x01000000
#endif /* WINVER >= 0x0400 */
!define BOLD_FONTTYPE 0x0100
!define ITALIC_FONTTYPE 0x0200
!define REGULAR_FONTTYPE 0x0400
!define SCREEN_FONTTYPE 0x2000
!define PRINTER_FONTTYPE 0x4000
!define SIMULATED_FONTTYPE 0x8000
!define CF_TEXT 1
!define CF_BITMAP 2
!define CF_METAFILEPICT 3
!define CF_SYLK 4
!define CF_DIF 5
!define CF_TIFF 6
!define CF_OEMTEXT 7
!define CF_DIB 8
!define CF_PALETTE 9
!define CF_PENDATA 10
!define CF_RIFF 11
!define CF_WAVE 12
!define CF_UNICODETEXT 13
!define CF_ENHMETAFILE 14
!define CF_HDROP 15
!define CF_LOCALE 16
!define CF_DIBV5 17
!define CF_PRIVATEFIRST 0x0200
!define CF_PRIVATELAST 0x02FF
!define CF_GDIOBJFIRST 0x0300
!define CF_GDIOBJLAST 0x03FF
!define CF_OWNERDISPLAY 0x0080
!define CF_DSPTEXT 0x0081
!define CF_DSPBITMAP 0x0082
!define CF_DSPMETAFILEPICT 0x0083
!define CF_DSPENHMETAFILE 0x008E
!define GMEM_FIXED 0x0000
!define GMEM_MOVEABLE 0x0002
!define GMEM_ZEROINIT 0x0040
!define GPTR ${GMEM_FIXED}|${GMEM_ZEROINIT}
!define GHND ${GMEM_MOVEABLE}|${GMEM_ZEROINIT}
Name ChooseFont
Caption ChooseFont
OutFile ChooseFont.exe
XPStyle on
Page custom Page.Create
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Var HWND
Function Page.Create
!insertmacro MUI_HEADER_TEXT "ChooseFont Function" "ChooseFont"
nsDialogs::Create 1018
Pop $HWND
nsDialogs::CreateControl ${__NSD_Label_Class} ${__NSD_Label_STYLE}|${SS_CENTER}|${SS_CENTERIMAGE} \
${WS_EX_CLIENTEDGE}|${WS_EX_WINDOWEDGE} 0u 0u 300u 50u "Просмотр шрифта"
Pop $0
${NSD_CreateButton} 250u 54u 50u 14u "Шрифт"
Pop $1
${NSD_OnClick} $1 ChooseFont
${NSD_CreateLabel} 0u 57u 80u 8u "LOGFONT : "
Pop $3
${NSD_CreateLabel} 80u 57u 20u 8u ""
Pop $3
${NSD_CreateLabel} 72u 72u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 72u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 82u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 82u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 92u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 92u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 102u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 102u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 112u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 112u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 122u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 122u 78u 8u ""
Pop $3
${NSD_CreateLabel} 72u 132u 78u 8u ""
Pop $3
${NSD_CreateLabel} 222u 132u 78u 8u ""
Pop $3
${NSD_CreateLabel} 0u 72u 72u 8u "iPointSize: "
Pop $3
${NSD_CreateLabel} 150u 72u 72u 8u "rgbColors: "
Pop $3
${NSD_CreateLabel} 0u 82u 72u 8u "lfEscapement: "
Pop $3
${NSD_CreateLabel} 150u 82u 72u 8u "lfOrientation: "
Pop $3
${NSD_CreateLabel} 0u 92u 72u 8u "lfWeight: "
Pop $3
${NSD_CreateLabel} 150u 92u 72u 8u "lfItalic: "
Pop $3
${NSD_CreateLabel} 0u 102u 72u 8u "lfUnderline: "
Pop $3
${NSD_CreateLabel} 150u 102u 72u 8u "lfStrikeOut: "
Pop $3
${NSD_CreateLabel} 0u 112u 72u 8u "lfCharSet: "
Pop $3
${NSD_CreateLabel} 150u 112u 72u 8u "lfOutPrecision: "
Pop $3
${NSD_CreateLabel} 0u 122u 72u 8u "lfClipPrecision: "
Pop $3
${NSD_CreateLabel} 150u 122u 72u 8u "lfQuality: "
Pop $3
${NSD_CreateLabel} 0u 132u 72u 8u "lfPitchAndFamily: "
Pop $3
${NSD_CreateLabel} 150u 132u 72u 8u "lfFaceName: "
Pop $3
${NSD_CreateText} 100u 55u 145u 12u "Образец"
Pop $3
${NSD_OnChange} $3 SetSampleText
nsDialogs::Show
FunctionEnd
Function ChooseFont
IntCmpU 0 $R0 0 +5
#Создать структуру LOGFONT
; GetDC извлекает дескриптор дисплейного контекста устройства (DC) для рабочей области заданного окна или для всего экрана
;(Идентифицирует контекст устройства для CWnd клиентской области)
System::Call `user32::GetDC(in)i.s`
; GetDeviceCaps извлекает зависимую от устройства информацию для заданного устройства
; LOGPIXELSX Число пикселей на логический дюйм по экранной ширине. В системе с многоэкранными мониторами, это значение одно и то же для всех мониторов.
System::Call `gdi32::GetDeviceCaps(is,i${LOGPIXELSX})i.s`
; Умножение двух 32-битных значений, а затем делит 64-битный результат на треть 32-битное значение.
;Окончательный результат округляется до ближайшего целого числа.
System::Call `kernel32::MulDiv(i9,is,i72)i.s`
System::Call `*(is,i,i,i,i,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&t32"Tahoma")i.R0`
#Создать структуру CHOOSEFONT
System::Call `*(i60,i$HWNDPARENT,i20,iR0,i,i${CF_INITTOLOGFONTSTRUCT}|${CF_BOTH}|${CF_EFFECTS}|${CF_NOVERTFONTS}|${CF_NOOEMFONTS},ir4,i,i,i,i,i,&i2,i,i)i.R1`
System::Call `comdlg32::ChooseFont(iR1)i.r2`
IntCmp $2 0 end
#Пользователь выбирает выходные параметры шрифта
System::Call `*$R0(i.s,i.s,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
#Согласно информации, для создания шрифта
System::Call `gdi32::CreateFont(is,is,is,is,is,is,is,is,is,is,is,is,is,ts)i.s`
#Установка области, предварительного просмотра шрифта
System::Call `user32::SendMessage(ir0,i${WM_SETFONT},is,i0)`
#Пользователь выбирает выходные параметры шрифта
System::Call `*$R0(i,i,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
#Размер и цвет
System::Call `*$R1(i,i,i,i,i.s,i,i.r4,i,i,i,i,i,&i2,i,i)`
#SetCtlColors Нельзя использовать переменные
#Следующие две строки для установки цвета
System::Call `*(ir4,i0,i${BS_NULL},i0,i${TRANSPARENT},i${CC_TEXT}|${CC_BKB})i.r5`
System::Call `user32::SetWindowLong(ir0,i${GWL_USERDATA},lr5)`
#обновить окно
System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`
#Размер дисплея, и шрифт информационной структуры
System::Call `*$R0(&l.s)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1203,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1204,i${WM_SETTEXT},i0,ts)`
#Цвет строки форматирования
IntFmt $4 0x%06X $4
System::Call `user32::GetDlgItem(i$HWND,i1205)i.r6`
System::Call `user32::SendMessage(ir6,i${WM_SETTEXT},i0,tr4)`
System::Call `user32::SetWindowLong(ir6,i${GWL_USERDATA},lr5)`
System::Call `user32::ShowWindow(ir6,i${SW_HIDE})`
System::Call `user32::ShowWindow(ir6,i${SW_SHOW})`
System::Call `user32::SendDlgItemMessage(i$HWND,i1206,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1207,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1208,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1209,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1210,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1211,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1212,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1213,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1214,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1215,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1216,i${WM_SETTEXT},i0,ts)`
System::Call `user32::SendDlgItemMessage(i$HWND,i1217,i${WM_SETTEXT},i0,ts)`
System::Free $R1
end:
FunctionEnd
Function SetSampleText
System::Call `user32::SendDlgItemMessage(i$HWND,i1232,i${WM_GETTEXT},i${NSIS_MAX_STRLEN},t.s)`
System::Call `user32::SendMessage(ir0,i${WM_SETTEXT},i0,ts)`
System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`
FunctionEnd
Function .onGUIEnd
System::Free $R0
System::Free $5
FunctionEnd
Section
SectionEnd
PS после компиляции будет немного ругани, не влияющей на работоспособность. И похоже опять - из nsWindows.nsh...
|