/*
 * Copyright 2005 Dmitry Timoshkov
 * Copyright 2005,2006,2010 YunSong Hwang
 *
 * 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_KOREAN, SUBLANG_DEFAULT

ICM_CHOOSE_COMPRESSOR DIALOG  36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "비디오 압축"
FONT 9, "MS Shell Dlg"
{
    DEFPUSHBUTTON "확인",IDOK,129,2,49,14
    PUSHBUTTON "취소",IDCANCEL,129,18,49,14

    LTEXT "압축(&C):",-1,9,6,105,8
    COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP

    PUSHBUTTON "설정(&F)...",882,129,36,49,14
    PUSHBUTTON "정보(&A)...",883,129,52,49,14

    SCROLLBAR 884,9,44,111,9,WS_TABSTOP

    LTEXT "압축 품질(&Q):",886,9,34,80,8

    CONTROL "모든 키 프레임(&K)",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
    EDITTEXT 888,78,60,22,12
    LTEXT "프레임",889,103,62,26,10

    CONTROL "데이타 전송율(&D)",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
    EDITTEXT 895,78,76,22,12
    LTEXT "KB/sec",896,102,78,26,10
}

STRINGTABLE
{
    IDS_FULLFRAMES "전채 프레임(비압축)"
}
