/*
 * 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 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/sec",IDC_DATARATE_KB,102,78,26,10
}
