⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advappdlg.c

📁 这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -