/*
 * Copyright 2005 Dmitry Timoshkov
 * Copyright 2011 Akihiro Sagawa
 *
 * 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 "msvideo_private.h"
#pragma code_page(65001)

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

ICM_CHOOSE_COMPRESSOR DIALOG  36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ビデオ圧縮"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "OK",IDOK,129,2,49,14
    PUSHBUTTON "キャンセル",IDCANCEL,129,18,49,14

    LTEXT "コンプレッサー(&C):",-1,9,6,105,8
    COMBOBOX IDC_COMP_LIST,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP

    PUSHBUTTON "設定(&F)...",IDC_CONFIGURE,129,36,49,14
    PUSHBUTTON "情報(&A)...",IDC_ABOUT,129,52,49,14

    SCROLLBAR IDC_QUALITY_SCROLL,9,44,111,9,WS_TABSTOP

    LTEXT "圧縮率(&Q):",IDC_QUALITY_TXT,9,34,80,8

    CONTROL "キー フレーム(&K)",IDC_KEYFRAME_CHECKBOX,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
    EDITTEXT IDC_KEYFRAME,78,60,22,12
    LTEXT "ごと",IDC_KEYFRAME_FRAMES,103,62,26,10

    CONTROL "データ レート(&D)",IDC_DATARATE_CHECKBOX,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
    EDITTEXT IDC_DATARATE,78,76,22,12
    LTEXT "KB/秒",IDC_DATARATE_KB,102,78,26,10
}
