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

📄 options.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
字号:
/* $Id: options.c 24151 2006-09-16 21:41:57Z janderwald $
 *
 * PROJECT:         ReactOS Console Configuration DLL
 * LICENSE:         GPL - See COPYING in the top level directory
 * FILE:            dll/win32/console/options.c
 * PURPOSE:         displays options dialog
 * PROGRAMMERS:     Johannes Anderwald (johannes.anderwald@student.tugraz.at)
 */

#include "console.h"

static
void 
UpdateDialogElements(HWND hwndDlg, PConsoleInfo pConInfo);

INT_PTR 
CALLBACK
OptionsProc(
  HWND hwndDlg,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
)
{
	PConsoleInfo pConInfo;
	LRESULT lResult;
	HWND hDlgCtrl;
    LPPSHNOTIFY lppsn;

	pConInfo = (PConsoleInfo) GetWindowLongPtr(hwndDlg, DWLP_USER);

	switch(uMsg)
	{
		case WM_INITDIALOG:
		{
			pConInfo = (PConsoleInfo) ((LPPROPSHEETPAGE)lParam)->lParam;
			SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pConInfo);
			UpdateDialogElements(hwndDlg, pConInfo);
			return TRUE;
		}
		case WM_NOTIFY:
		{
			if (!pConInfo)
			{
				break;
			}
			lppsn = (LPPSHNOTIFY) lParam; 
            if (lppsn->hdr.code == UDN_DELTAPOS)
            {
				hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_BUFFER_SIZE);
				pConInfo->HistoryBufferSize = LOWORD(SendMessage(hDlgCtrl, UDM_GETPOS, 0, 0));

				hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_NUM_BUFFER);
				pConInfo->NumberOfHistoryBuffers = LOWORD(SendMessage(hDlgCtrl, UDM_GETPOS, 0, 0));
				PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			}
			else if (lppsn->hdr.code == PSN_APPLY)
			{
				if (!pConInfo->AppliedConfig)
				{
					ApplyConsoleInfo(hwndDlg, pConInfo);
				}
				else
				{
					/* options have already been applied */
					SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
					return TRUE;
				}
				return TRUE;
			}
			break;
		}
		case WM_COMMAND:
		{
			if (!pConInfo)
			{
				break;
			}
			switch(LOWORD(wParam))
			{
				case IDC_RADIO_SMALL_CURSOR:
				{
					pConInfo->CursorSize = 0x0;
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_RADIO_MEDIUM_CURSOR:
				{
					pConInfo->CursorSize = 0x32;
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_RADIO_LARGE_CURSOR:
				{				
					pConInfo->CursorSize = 0x64;
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_RADIO_DISPLAY_WINDOW:
				{
					pConInfo->FullScreen = FALSE;
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_RADIO_DISPLAY_FULL:
				{
					pConInfo->FullScreen = TRUE;
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_CHECK_QUICK_EDIT:
				{
                    lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
                    if (lResult == BST_CHECKED)
                    {
						pConInfo->QuickEdit = FALSE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
                    }
                    else if (lResult == BST_UNCHECKED)
                    {
						pConInfo->QuickEdit = TRUE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
                    }
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_CHECK_INSERT_MODE:
				{
                    lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
                    if (lResult == BST_CHECKED)
                    {
						pConInfo->InsertMode = FALSE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
                    }
                    else if (lResult == BST_UNCHECKED)
                    {
						pConInfo->InsertMode = TRUE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
                    }
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				case IDC_CHECK_DISCARD_DUPLICATES:
				{
                   lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
                    if (lResult == BST_CHECKED)
                    {
						pConInfo->HistoryNoDup = FALSE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
                    }
                    else if (lResult == BST_UNCHECKED)
                    {
						pConInfo->HistoryNoDup = TRUE;
                        SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
                    }
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
					break;
				}
				default:
					break;
			}
			break;
		}
		default:
			break;
	}

	return FALSE;
}

static
void 
UpdateDialogElements(HWND hwndDlg, PConsoleInfo pConInfo)
{
  HWND hDlgCtrl;
  TCHAR szBuffer[MAX_PATH];

	/* update cursor size */
	if ( pConInfo->CursorSize == 0)
	{
		/* small cursor */
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);

		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
	}
	else if ( pConInfo->CursorSize == 0x32 )
	{
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);

		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
	}
	else if ( pConInfo->CursorSize == 0x64 )
	{
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);

		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
	}

	/* update num buffers */
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_NUM_BUFFER);
	SendMessage(hDlgCtrl, UDM_SETRANGE, 0, MAKELONG((short)999, (short)1));
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_NUM_BUFFER);
	_stprintf(szBuffer, _T("%d"), pConInfo->NumberOfHistoryBuffers);
	SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer);

	/* update buffer size */
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_BUFFER_SIZE);
	SendMessage(hDlgCtrl, UDM_SETRANGE, 0, MAKELONG((short)999, (short)1));
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_BUFFER_SIZE);
	_stprintf(szBuffer, _T("%d"), pConInfo->HistoryBufferSize);
	SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer);
    


	/* update discard duplicates */
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_DISCARD_DUPLICATES);
	if ( pConInfo->HistoryNoDup )
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
	else
		SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);

	/* update full/window screen */
	if ( pConInfo->FullScreen )
	{
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);

		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW);
		SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
	}
	else
	{
		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW);
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);

		hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL);
		SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
	}

	/* update quick edit */
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_QUICK_EDIT);
	if ( pConInfo->QuickEdit )
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
	else
		SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);

	/* update insert mode */
	hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_INSERT_MODE);
	if ( pConInfo->InsertMode )
		SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
	else
		SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -