Exemplo n.º 1
0
void CCharacterSpacingDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	switch (nIDCtl)
	{
		case IDC_PREVIEW:
		{
			PreviewFont(lpDrawItemStruct);
			break;
		}
		default:
		{
			CPmwDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
			break;
		}
	}
}
BOOL CALLBACK PreferencesDialog3Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch (uMsg)
  {
    case WM_COMMAND:      /* Process control messages */
    {
      switch (LOWORD(wParam))
      {
        case ID_SHOWGUTTERCHK:
        case ID_SHOWMARGINCHK:
        case ID_SHOWLINENUMBERSCHK:
        case ID_AUTOSIZEGUTTERCHK:
        {
          if (HIWORD(wParam) == BN_CLICKED)
          {
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          break;
        }
        case ID_GUTTERSIZEEDT:
        case ID_MARGINSIZEEDT:
        {
          if (HIWORD(wParam) == EN_CHANGE)
          {
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          break;
        }
        case ID_EDITORFONTCMB:
        {
          if (HIWORD(wParam) == CBN_SELCHANGE)
          {
            int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
            if (SendMessage((HWND)lParam, CB_GETLBTEXTLEN, Index, 0) <= 32)
            {
              SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)EditorFont.Name);
              ListFontSizes(GetDlgItem(hDlg, ID_EDITORFONTSIZECMB), EditorFont.Name);
              PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont);
              SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
            }
          }
          break;
        }
        case ID_EDITORFONTSIZECMB:
        {
          if (HIWORD(wParam) == CBN_SELCHANGE)
          {
            int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
            char* Size = new char[33];
            SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)Size);
            EditorFont.Size = atoi(Size);
            delete[] Size;
            PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont);
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          else if (HIWORD(wParam) == CBN_EDITCHANGE)
          {
            char* Size = GetWindowText((HWND)lParam);
            EditorFont.Size = atoi(Size);
            delete[] Size;
            PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont);
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          break;
        }
        case ID_GUTTERFONTCMB:
        {
          if (HIWORD(wParam) == CBN_SELCHANGE)
          {
            int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
            if (SendMessage((HWND)lParam, CB_GETLBTEXTLEN, Index, 0) <= 32)
            {
              SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)GutterFont.Name);
              ListFontSizes(GetDlgItem(hDlg, ID_GUTTERFONTSIZECMB), GutterFont.Name);
              PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont);
              SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
            }
          }
          break;
        }
        case ID_GUTTERFONTSIZECMB:
        {
          if (HIWORD(wParam) == CBN_SELCHANGE)
          {
            int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
            char* Size = new char[33];
            SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)Size);
            GutterFont.Size = atoi(Size);
            delete[] Size;
            PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont);
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          else if (HIWORD(wParam) == CBN_EDITCHANGE)
          {
            char* Size = GetWindowText((HWND)lParam);
            GutterFont.Size = atoi(Size);
            delete[] Size;
            PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont);
            SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0);
          }
          break;
        }
      }
      return TRUE;
    }
    case WM_INITDIALOG:
    {
      EditorFont = Editor->GetFont();
      GutterFont = Editor->GetGutterFont();
      /* Set up controls */
      MakeEditScrollable(GetDlgItem(hDlg, ID_GUTTERSIZEEDT));
      MakeEditScrollable(GetDlgItem(hDlg, ID_MARGINSIZEEDT));
      ListFonts(GetDlgItem(hDlg, ID_EDITORFONTCMB));
      ListFontSizes(GetDlgItem(hDlg, ID_EDITORFONTSIZECMB), EditorFont.Name);
      PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont);
      ListFonts(GetDlgItem(hDlg, ID_GUTTERFONTCMB));
      ListFontSizes(GetDlgItem(hDlg, ID_GUTTERFONTSIZECMB), GutterFont.Name);
      PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont);
      /* Display Preferences */
      CheckDlgButton(hDlg, ID_SHOWGUTTERCHK, Editor->GetGutterVisible() ? BST_CHECKED : BST_UNCHECKED);
      CheckDlgButton(hDlg, ID_SHOWMARGINCHK, Editor->GetMarginVisible() ? BST_CHECKED : BST_UNCHECKED);
      CheckDlgButton(hDlg, ID_SHOWLINENUMBERSCHK, Editor->GetLineNumbersVisible() ? BST_CHECKED : BST_UNCHECKED);
      CheckDlgButton(hDlg, ID_AUTOSIZEGUTTERCHK, Editor->GetAutoSizeGutter() ? BST_CHECKED : BST_UNCHECKED);
      SetDlgItemInt(hDlg, ID_GUTTERSIZEEDT, Editor->GetGutterSize(), FALSE);
      SetDlgItemInt(hDlg, ID_MARGINSIZEEDT, Editor->GetMarginSize(), FALSE);
      SendDlgItemMessage(hDlg, ID_EDITORFONTCMB, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)EditorFont.Name);
      char* Str = IntToStr(EditorFont.Size);
      if (SendDlgItemMessage(hDlg, ID_EDITORFONTSIZECMB, CB_SELECTSTRING, (WPARAM)0, (LPARAM)Str) == CB_ERR)
        SetDlgItemText(hDlg, ID_EDITORFONTSIZECMB, Str);
      delete[] Str;
      SendDlgItemMessage(hDlg, ID_GUTTERFONTCMB, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)GutterFont.Name);
      Str = IntToStr(GutterFont.Size);
      if (SendDlgItemMessage(hDlg, ID_GUTTERFONTSIZECMB, CB_SELECTSTRING, (WPARAM)0, (LPARAM)Str) == CB_ERR)
        SetDlgItemText(hDlg, ID_GUTTERFONTSIZECMB, Str);
      delete[] Str;
      /* Apply control modifiations */
      SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWMARGINCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWMARGINCHK));
      SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWGUTTERCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWGUTTERCHK));
      SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWLINENUMBERSCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWLINENUMBERSCHK));
      SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_AUTOSIZEGUTTERCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_AUTOSIZEGUTTERCHK));
      return TRUE;
    }
    case WM_NOTIFY:
    {
      switch (((NMHDR *)lParam)->code)
      {
        case PSN_APPLY:
        {
          /* Save Preferences */
          Editor->SetGutterVisible(IsDlgButtonChecked(hDlg, ID_SHOWGUTTERCHK) == BST_CHECKED);
          Editor->SetMarginVisible(IsDlgButtonChecked(hDlg, ID_SHOWMARGINCHK) == BST_CHECKED);
          Editor->SetLineNumbersVisible(IsDlgButtonChecked(hDlg, ID_SHOWLINENUMBERSCHK) == BST_CHECKED);
          Editor->SetAutoSizeGutter(IsDlgButtonChecked(hDlg, ID_AUTOSIZEGUTTERCHK) == BST_CHECKED);
          Editor->SetGutterSize(GetDlgItemInt(hDlg, ID_GUTTERSIZEEDT, NULL, FALSE));
          Editor->SetMarginSize(GetDlgItemInt(hDlg, ID_MARGINSIZEEDT, NULL, FALSE));
          Editor->SetFont(EditorFont);
          Editor->SetGutterFont(GutterFont);
          return TRUE;
        }
      }
      return FALSE;
    }
    default:
      return FALSE;
  }
}