|
|
/*---------------------------------------------**
** Copyright (c) 1998 Microsoft Corporation ** ** All Rights reserved ** ** ** ** g_cache.c ** ** ** ** Glyph cache dialog - TSREG ** ** 07-01-98 a-clindh Created ** **---------------------------------------------*/
#include <windows.h>
#include <commctrl.h>
#include <TCHAR.H>
#include <stdlib.h>
#include "tsreg.h"
#include "resource.h"
HWND g_hwndGlyphCacheDlg;
///////////////////////////////////////////////////////////////////////////////
INT_PTR CALLBACK GlyphCache(HWND hDlg, UINT nMsg, WPARAM wParam, LPARAM lParam) { NMHDR *lpnmhdr; static UINT nGlyphBuffer; static HWND hwndSlider[NUMBER_OF_SLIDERS]; static HWND hwndSliderEditBuddy[NUMBER_OF_SLIDERS]; static HWND hwndComboTextFrag; static TCHAR lpszRegPath[MAX_PATH]; TCHAR lpszBuffer[5]; HWND hwndCtl; int i, nKeyVal; int nPos; LPHELPINFO lphi;
//
// get a pointer to the NMHDR struct for apply button
//
lpnmhdr = ((LPNMHDR)lParam);
switch (nMsg) {
case WM_VSCROLL:
hwndCtl = (HWND) (lParam); i = (int)GetWindowLongPtr(hwndCtl, GWLP_USERDATA); DisplayControlValue(hwndSlider, hwndSliderEditBuddy, i); break;
case WM_INITDIALOG:
g_hwndGlyphCacheDlg = hDlg;
LoadString (g_hInst, IDS_REG_PATH, lpszRegPath, sizeof (lpszRegPath));
hwndComboTextFrag = GetDlgItem(hDlg, IDC_CBO_TXT_FRAG); InitMiscControls( hDlg, hwndComboTextFrag);
for (i = 0; i < NUMBER_OF_SLIDERS; i++) {
//
// get handles to slider contrls and static edit boxes
//
hwndSlider[i] = GetDlgItem(hDlg, (IDC_SLIDER1 + i)); hwndSliderEditBuddy[i] = GetDlgItem(hDlg, (IDC_STATIC1 + i));
//
// save the index of the control
//
SetWindowLongPtr(hwndSlider[i], GWLP_USERDATA, i);
SendMessage(hwndSlider[i], TBM_SETRANGE, FALSE, (LPARAM) MAKELONG(1, 8));
//
// get value from registry and check it
//
nGlyphBuffer = GetRegKeyValue(i + GLYPHCACHEBASE); if ( (nGlyphBuffer) < MIN_GLYPH_CACHE_SIZE || (nGlyphBuffer > MAX_GLYPH_CACHE_SIZE) ) {
nGlyphBuffer = g_KeyInfo[i + GLYPHCACHEBASE].DefaultKeyValue; } //
// set the current key value
//
g_KeyInfo[i + GLYPHCACHEBASE].CurrentKeyValue = nGlyphBuffer; _itot( nGlyphBuffer, (lpszBuffer), 10); //
// display the value in the static edit control
//
SetWindowText(hwndSliderEditBuddy[i], lpszBuffer); //
// position the thumb on the slider control
//
nGlyphBuffer = g_KeyInfo[i + GLYPHCACHEBASE].CurrentKeyValue;
#ifdef _X86_ // EXECUTE ASSEMBLER CODE ONLY IF X86 PROCESSOR
// BSF: Bit Scan Forward -
// Scans the value contained in the EAX regiseter
// for the first significant (1) bit.
// This function returns the location of the first
// significant bit. The function is used in this
// application as a base 2 logarythm. The location
// of the bit is determined, stored in the nPos
// variable, and nPos is used to set the slider
// control. ie. If the register value is 4, nPos
// is set to 2 (00000100). 10 minus 2 (position 8
// on the slider control) represents the value 4.
__asm { BSF EAX, nGlyphBuffer MOV nPos, EAX } nPos = 10 - nPos; SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, (LPARAM)nPos);
#else
switch (nGlyphBuffer) { case 4: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 8); break; case 8: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 7); break; case 16: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 6); break; case 32: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 5); break; case 64: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 4); break; case 128: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 3); break; case 256: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 2); break; case 512: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 1); break; } #endif
} // end for loop
break;
case WM_NOTIFY:
//
// save settings on OK button
//
switch (lpnmhdr->code) {
case PSN_HELP: lphi = (LPHELPINFO) lParam;
WinHelp(lphi->hItemHandle, g_lpszPath, HELP_CONTENTS, lphi->iCtrlId); break;
case PSN_APPLY:
for (i = 0; i < NUMBER_OF_SLIDERS; i++) { if ( (g_KeyInfo[i + GLYPHCACHEBASE].CurrentKeyValue == g_KeyInfo[i+GLYPHCACHEBASE].DefaultKeyValue) || (g_KeyInfo[i+GLYPHCACHEBASE].CurrentKeyValue == 0)) { DeleteRegKey(i + GLYPHCACHEBASE, lpszRegPath); } else { SetRegKey(i + GLYPHCACHEBASE, lpszRegPath); } } // ** end for loop
if (g_KeyInfo[GLYPHINDEX].CurrentKeyValue == g_KeyInfo[GLYPHINDEX].DefaultKeyValue) { DeleteRegKey(GLYPHINDEX, lpszRegPath); } else { SetRegKey(GLYPHINDEX, lpszRegPath); }
if (g_KeyInfo[TEXTFRAGINDEX].CurrentKeyValue == g_KeyInfo[TEXTFRAGINDEX].DefaultKeyValue) { DeleteRegKey(TEXTFRAGINDEX, lpszRegPath); } else { SetRegKey(TEXTFRAGINDEX, lpszRegPath); } } break;
case WM_HELP:
lphi = (LPHELPINFO) lParam;
WinHelp(lphi->hItemHandle, g_lpszPath, HELP_CONTEXTPOPUP, lphi->iCtrlId); break;
case WM_COMMAND:
switch LOWORD (wParam) {
case IDC_RADIO_NONE: g_KeyInfo[GLYPHINDEX].CurrentKeyValue = NONE; break;
case IDC_RADIO_PARTIAL: g_KeyInfo[GLYPHINDEX].CurrentKeyValue = PARTIAL; break;
case IDC_RADIO_FULL: g_KeyInfo[GLYPHINDEX].CurrentKeyValue = FULL; break;
case IDC_GLYPH_BTN_RESTORE:
CheckDlgButton(hDlg, IDC_RADIO_FULL, TRUE); CheckDlgButton(hDlg, IDC_RADIO_PARTIAL, FALSE); CheckDlgButton(hDlg, IDC_RADIO_NONE, FALSE);
_itot(g_KeyInfo[TEXTFRAGINDEX].DefaultKeyValue, lpszBuffer, 10); SendMessage(hwndComboTextFrag, CB_SELECTSTRING, -1, (LPARAM)(LPCSTR) lpszBuffer); g_KeyInfo[TEXTFRAGINDEX].CurrentKeyValue = g_KeyInfo[TEXTFRAGINDEX].DefaultKeyValue;
g_KeyInfo[GLYPHINDEX].CurrentKeyValue = g_KeyInfo[GLYPHINDEX].DefaultKeyValue;
for (i = 0; i < NUMBER_OF_SLIDERS; i++) {
g_KeyInfo[i+GLYPHCACHEBASE].CurrentKeyValue = g_KeyInfo[i+GLYPHCACHEBASE].DefaultKeyValue;
_itot(g_KeyInfo[i + GLYPHCACHEBASE].DefaultKeyValue, (lpszBuffer), 10);
//
// display the value in the static edit control
//
SetWindowText(hwndSliderEditBuddy[i], lpszBuffer); //
// position the thumb on the slider control
//
nGlyphBuffer = g_KeyInfo[i + GLYPHCACHEBASE].DefaultKeyValue;
#ifdef _X86_ // EXECUTE ASSEMBLER CODE ONLY IF X86 PROCESSOR
// BSF: Bit Scan Forward -
// Scans the value contained in the EAX regiseter
// for the first significant (1) bit.
// This function returns the location of the first
// significant bit. The function is used in this
// application as a base 2 logarythm. The location
// of the bit is determined, stored in the nPos
// variable, and nPos is used to set the slider
// control. ie. If the register value is 4, nPos
// is set to 2 (00000100). 10 minus 2 (position 8
// on the slider control) represents the value 4.
__asm { BSF EAX, nGlyphBuffer MOV nPos, EAX } nPos = 10 - nPos; SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, (LPARAM)nPos);
#else
switch (nGlyphBuffer) { case 4: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 8); break; case 8: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 7); break; case 16: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 6); break; case 32: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 5); break; case 64: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 4); break; case 128: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 3); break; case 256: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 2); break; case 512: SendMessage(hwndSlider[i], TBM_SETPOS, TRUE, 1); break; } #endif
} break; }
switch HIWORD (wParam) {
case CBN_EDITUPDATE:
//
// capture typed text
//
GetWindowText(hwndComboTextFrag, lpszBuffer, 5); nKeyVal = _ttoi(lpszBuffer); g_KeyInfo[TEXTFRAGINDEX].CurrentKeyValue = nKeyVal; break;
case CBN_KILLFOCUS:
//
// save value when control looses focus
//
GetWindowText(hwndComboTextFrag, lpszBuffer, 5); nKeyVal = _ttoi(lpszBuffer); g_KeyInfo[TEXTFRAGINDEX].CurrentKeyValue = nKeyVal; break; } } return FALSE; }
///////////////////////////////////////////////////////////////////////////////
//
// Returns the integer value related to the coresponding cell.
///////////////////////////////////////////////////////////////////////////////
int GetCellSize(int nPos, int i) { if (nPos >= 1 && nPos <= NUM_SLIDER_STOPS) { return g_KeyInfo[i + GLYPHCACHEBASE].CurrentKeyValue = (1 << ((NUM_SLIDER_STOPS + 2) - nPos)); } else { return 0; } }
///////////////////////////////////////////////////////////////////////////////
//
// Display the slider control value in it's corresponding static edit box.
///////////////////////////////////////////////////////////////////////////////
void DisplayControlValue(HWND hwndSlider[], HWND hwndSliderEditBuddy[], int i)
{ int nPos; TCHAR lpszBuffer[5];
nPos = (int) SendMessage(hwndSlider[i], TBM_GETPOS, 0,0); _itot(GetCellSize(nPos, i), lpszBuffer, 10); SetWindowText(hwndSliderEditBuddy[i], lpszBuffer); }
// end of file
///////////////////////////////////////////////////////////////////////////////
|