/*
 * Korean resources for Twain
 *
 * Copyright 2006 CodeWeavers, Aric Stewart
 * Copyright 2006,2007,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 "resource.h"

#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

IDD_CAMERAUI DIALOG  0, 0, 372, 273
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | 
    WS_CAPTION | WS_SYSMENU
CAPTION "카메라에 있는 파"
FONT 9, "MS Shell Dlg"
BEGIN
	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
WS_TABSTOP,7,7,358,229
    DEFPUSHBUTTON   "선택된 것을 불러오기",IDC_IMPORT,152,252,72,14
    PUSHBUTTON      " 미리 보기",IDC_FETCH,7,252,64,14
    PUSHBUTTON      "모두 불러오기",IDC_IMPORTALL,80,252,64,14
    CONTROL         "대화상자 지나치기",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
    PUSHBUTTON      "나가기",IDC_EXIT,315,252,50,14
END

IDD_DIALOG1 DIALOG 0, 0, 186, 46
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER | DS_SETFOREGROUND
CAPTION "옮기는 중"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT   "옮기는 중... 잠시만 기다리십시오",IDC_STATIC,5,19,176,8, SS_CENTER
END

IDD_CONNECTING DIALOG  0, 0, 280, 116
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU| WS_VISIBLE | DS_CENTER
CAPTION "카메라하고 연결중"
FONT 9, "MS Shell Dlg"
BEGIN
    CONTROL         "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110
    LTEXT           "카메라하고 연결중...  잠시만 기다리십시오",IDC_STATIC,128,58,
                    134,8
END
