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

📄 advappdlg.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 2 页
字号:
			return TRUE;
		}
	}

	return FALSE;
}


/* Initialize the advanced appearance dialog */
static VOID
AdvAppearanceDlg_Init(HWND hwndDlg, GLOBALS *g)
{
	INT i, iElement, iListIndex, iDeskIndex = 0;
	TCHAR tstrText[80];
	LOGFONT lfFont;
	LOGFONT lfButtonFont;
	HFONT hMyFont;
	HDC hScreenDC;
	TCHAR Size[4];

	/* Copy the current theme values */
	g->ThemeAdv = g->Theme;

	/* Add the elements to the combo */
	for (iElement = 0; iElement < NUM_ELEMENTS; iElement++)
	{
		LoadString(hApplet, IDS_ELEMENT_1 + iElement, (LPTSTR)&tstrText, 79);
		iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_ADDSTRING, 0, (LPARAM)&tstrText);
		SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETITEMDATA, (WPARAM)iListIndex, (LPARAM)iElement);
	}

	/* Get the list index of the desktop element */
	for (iListIndex = 0; iListIndex < NUM_ELEMENTS; iListIndex++)
	{
		iElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
		if (iElement == 0)
		{
			iDeskIndex = iListIndex;
			break;
		}
	}

	SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETCURSEL, iDeskIndex, 0);

	/* Set colors for the color buttons */
	g->crCOLOR_BTNFACE = g->Theme.crColor[COLOR_BTNFACE];
	g->crCOLOR_BTNTEXT = g->Theme.crColor[COLOR_BTNTEXT];
	g->crCOLOR_BTNSHADOW = g->Theme.crColor[COLOR_BTNSHADOW];
	g->crCOLOR_BTNHIGHLIGHT = g->Theme.crColor[COLOR_BTNHIGHLIGHT];

	/* Create font for bold button */
	lfButtonFont = g->Theme.lfFont[FONT_DIALOG];
	lfButtonFont.lfWeight = FW_BOLD;
	lfButtonFont.lfItalic = FALSE;
	hMyFont = CreateFontIndirect(&lfButtonFont);
	if (hMyFont)
	{
		if (g->hBoldFont)
			DeleteObject(g->hBoldFont);

		g->hBoldFont = hMyFont;
	}

	/* Create font for italic button */
	lfButtonFont.lfWeight = FW_REGULAR;
	lfButtonFont.lfItalic = TRUE;
	hMyFont = CreateFontIndirect(&lfButtonFont);
	if (hMyFont)
	{
		if (g->hItalicFont)
			DeleteObject(g->hItalicFont);

		g->hItalicFont = hMyFont;
	}

	/* Set the fonts for the font style buttons */
	SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, WM_SETFONT, (WPARAM)g->hBoldFont, (LPARAM)TRUE);
	SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, WM_SETFONT, (WPARAM)g->hItalicFont, (LPARAM)TRUE);

	/* Draw Bitmaps for the colorbuttons */
	InitColorButtons(hwndDlg, g);

	/* Make the UpDown control count correctly */
	SendMessage (GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), UDM_SETRANGE, 0L, MAKELONG (200, 1));

	/* Fill font selection combo */
	lfFont.lfCharSet = DEFAULT_CHARSET;
	lfFont.lfFaceName[0] = (TCHAR)0;
	lfFont.lfPitchAndFamily = 0;
	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++)
	{
		SetDlgItemInt(hwndDlg, IDC_CONVERT, i, FALSE);
		GetDlgItemText(hwndDlg, IDC_CONVERT, (LPTSTR)&Size, 3);
		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;
//    INT i;

    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;
    }
}



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)
					{
//						MessageBeep(-1);

						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_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 + -