/*
 * serialui (Simplified and Traditional Chinese Resources)
 *
 * Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "serialui.h"

/* Chinese text is encoded in UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

IDD_SERIALUICONFIG DIALOG 0, 0, 160, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "属性 - "
FONT 9, "MS Shell Dlg"
BEGIN
  LTEXT         "速度", -1,5,20,55,10
  COMBOBOX      IDC_BAUD, 60, 20, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Parity", -1,5,40,55,10
  COMBOBOX      IDC_PARITY, 60, 40, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "流程控制", -1,5,60,55,10
  COMBOBOX      IDC_FLOW, 60, 60, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "数据位", -1,5,80,55,10
  COMBOBOX      IDC_DATA, 60, 80, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "停止位", -1,5,100,55,10
  COMBOBOX      IDC_STOP, 60, 100, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  DEFPUSHBUTTON "确定", IDOK,30,138,50,14
  PUSHBUTTON    "取消", IDCANCEL,85,138,50,14
  /* these two buttons are for testing Get/SetDefaultCommConfig */
  /* PUSHBUTTON    "GetDefault", ID_GETDEFAULT,30,115,50,14 */
  /* PUSHBUTTON    "SetDefault", ID_SETDEFAULT,85,115,50,14 */
END

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL

IDD_SERIALUICONFIG DIALOG 0, 0, 160, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "屬性 - "
FONT 9, "MS Shell Dlg"
BEGIN
  LTEXT         "速度", -1,5,20,55,10
  COMBOBOX      IDC_BAUD, 60, 20, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Parity", -1,5,40,55,10
  COMBOBOX      IDC_PARITY, 60, 40, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "流程控制", -1,5,60,55,10
  COMBOBOX      IDC_FLOW, 60, 60, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "數據位", -1,5,80,55,10
  COMBOBOX      IDC_DATA, 60, 80, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "停止位", -1,5,100,55,10
  COMBOBOX      IDC_STOP, 60, 100, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  DEFPUSHBUTTON "確定", IDOK,30,138,50,14
  PUSHBUTTON    "取消", IDCANCEL,85,138,50,14
  /* these two buttons are for testing Get/SetDefaultCommConfig */
  /* PUSHBUTTON    "GetDefault", ID_GETDEFAULT,30,115,50,14 */
  /* PUSHBUTTON    "SetDefault", ID_SETDEFAULT,85,115,50,14 */
END
