📄 advappdlg.c
字号:
hScreenDC = GetDC(0);
EnumFontFamiliesEx(hScreenDC, &lfFont, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), 0);
ReleaseDC(0, hScreenDC);
/* Fill font size combo */
for (i = 6; i <= 24; i++)
{
wsprintf(Size, TEXT("%d"), i);
SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, CB_ADDSTRING, 0, (LPARAM)&Size);
}
/* Update the controls */
iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
UpdateControls(hwndDlg, g);
}
static VOID
AdvAppearanceDlg_CleanUp(HWND hwndDlg, GLOBALS* g)
{
DeleteObject(g->hBoldFont);
DeleteObject(g->hItalicFont);
}
static VOID
SelectComboByElement(HWND hwnd, INT id, LPARAM lParam)
{
INT nCount;
INT i;
nCount = SendDlgItemMessage(hwnd, id, CB_GETCOUNT, 0, 0);
if (nCount == CB_ERR)
return;
for (i = 0; i < nCount; i++)
{
if (SendDlgItemMessage(hwnd, id, CB_GETITEMDATA, (WPARAM)i, 0) == lParam)
{
SendDlgItemMessage(hwnd, id, CB_SETCURSEL, (WPARAM)i, 0);
break;
}
}
}
static VOID
GetSelectedComboText(HWND hwnd, INT id, LPWSTR lpStr)
{
INT nCount;
nCount = SendDlgItemMessage(hwnd, id, CB_GETCURSEL, 0, 0);
if (nCount == CB_ERR)
{
*lpStr = 0;
return;
}
nCount = SendDlgItemMessage(hwnd, id, CB_GETLBTEXT, (WPARAM)nCount, (LPARAM)lpStr);
if (nCount == CB_ERR)
{
*lpStr = 0;
}
}
static INT
GetSelectedComboInt(HWND hwnd, INT id)
{
TCHAR szBuffer[80];
INT nCount;
nCount = SendDlgItemMessage(hwnd, id, CB_GETCURSEL, 0, 0);
if (nCount == CB_ERR)
return 0;
nCount = SendDlgItemMessage(hwnd, id, CB_GETLBTEXT, (WPARAM)nCount, (LPARAM)szBuffer);
if (nCount == CB_ERR)
return 0;
return _ttoi(szBuffer);
}
static INT
GetEditedComboInt(HWND hwnd, INT id)
{
INT nCount;
BOOL bTranslated;
nCount = GetDlgItemInt(hwnd, id, &bTranslated, FALSE);
if (bTranslated == FALSE)
return 12;
return nCount;
}
INT_PTR CALLBACK
AdvAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT iListIndex;
GLOBALS* g;
g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg)
{
case WM_INITDIALOG:
g = (GLOBALS*)lParam;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
AdvAppearanceDlg_Init(hwndDlg, g);
break;
case WM_DESTROY:
AdvAppearanceDlg_CleanUp(hwndDlg, g);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
SaveCurrentValues(hwndDlg, g);
EndDialog(hwndDlg, 0);
break;
case IDCANCEL:
g->ThemeAdv = g->Theme;
EndDialog(hwndDlg, 0);
break;
case IDC_APPEARANCE_PREVIEW:
SaveCurrentValues(hwndDlg, g);
SelectComboByElement(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, lParam);
g->CurrentElement = (INT)lParam;
UpdateControls(hwndDlg, g);
break;
case IDC_ADVAPPEARANCE_ELEMENT:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
SaveCurrentValues(hwndDlg, g);
iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
UpdateControls(hwndDlg, g);
}
break;
case IDC_ADVAPPEARANCE_SIZE_E:
if (g && HIWORD(wParam) == EN_CHANGE)
{
INT i = (INT)LOWORD(SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD, UDM_GETPOS,0,0L));
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
case IDX_CAPTION_BUTTON:
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYCAPTION, 0, i);
break;
case IDX_MENU:
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYMENU, 0, i);
break;
case IDX_SCROLLBAR:
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCXSCROLLBAR, 0, i);
break;
case IDX_INACTIVE_BORDER:
case IDX_ACTIVE_BORDER:
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYSIZEFRAME, 0, i);
break;
}
}
break;
case IDC_ADVAPPEARANCE_FONT_C:
if (g && HIWORD(wParam) == CBN_SELCHANGE)
{
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCAPTIONFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_MENU:
GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETMENUFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_DIALOG:
GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETDIALOGFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
}
}
break;
case IDC_ADVAPPEARANCE_FONTSIZE_E:
if (g && HIWORD(wParam) == CBN_SELCHANGE)
{
HDC hdcDlg = GetDC(hwndDlg);
INT i;
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCAPTIONFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_MENU:
i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETMENUFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_DIALOG:
i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETDIALOGFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
}
ReleaseDC(hwndDlg, hdcDlg);
}
else if (g && HIWORD(wParam) == CBN_EDITCHANGE)
{
HDC hdcDlg = GetDC(hwndDlg);
INT i;
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCAPTIONFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_MENU:
i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETMENUFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_DIALOG:
i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETDIALOGFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
}
ReleaseDC(hwndDlg, hdcDlg);
}
break;
case IDC_ADVAPPEARANCE_FONTBOLD:
if (g && HIWORD(wParam) == BN_CLICKED)
{
INT i;
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
(i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCAPTIONFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_MENU:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
(i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETMENUFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_DIALOG:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
(i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETDIALOGFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
}
}
break;
case IDC_ADVAPPEARANCE_FONTITALIC:
if (g && HIWORD(wParam) == BN_CLICKED)
{
INT i;
switch (g->CurrentElement)
{
case IDX_INACTIVE_CAPTION:
case IDX_ACTIVE_CAPTION:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
(i == BST_CHECKED) ? TRUE : FALSE;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCAPTIONFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_MENU:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
(i == BST_CHECKED) ? TRUE : FALSE;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETMENUFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
case IDX_DIALOG:
i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
(i == BST_CHECKED) ? TRUE : FALSE;
SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETDIALOGFONT, 0,
(LPARAM)&g->ThemeAdv.lfFont[g_Assignment[g->CurrentElement].Font]);
break;
}
}
break;
case IDC_ADVAPPEARANCE_COLOR1_B:
GetColor(hwndDlg, g, 0);
break;
case IDC_ADVAPPEARANCE_COLOR2_B:
GetColor(hwndDlg, g, 1);
break;
case IDC_ADVAPPEARANCE_FONTCOLOR_B:
GetColor(hwndDlg, g, 2);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -