/*
 * Regedit resources
 *
 * Copyright 2002 Robert Dickenson
 * Copyright 2005 Mike McCormack
 * Copyright 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"

/* Korean resources */

#pragma code_page(65001)

LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT

/*
 * Dialog
 */

IDD_ADDFAVORITE DIALOG  22, 17, 210, 55
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "즐겨 찾기 추가"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "이름:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "확인",IDOK,140,38,30,13,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,38,30,13, WS_GROUP
END

IDD_DELFAVORITE DIALOG  22, 17, 210, 90
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "즐겨 찾기 제거"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "이름:",IDC_STATIC,5,5,119,8
    LISTBOX         IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL
    DEFPUSHBUTTON   "확인",IDOK,140,71,30,14,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,71,30,14, WS_GROUP
END

IDD_EDIT_STRING DIALOG  22, 17, 210, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "문자열 편집"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "값 이름:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "값 데이터:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "확인",IDOK,140,58,30,14,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,58,30,14,WS_GROUP
END

IDD_EDIT_DWORD DIALOG  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "DWORD 편집"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "값 이름:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "값 데이터:",IDC_STATIC,5,30,90,8
    EDITTEXT        IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP
    GROUPBOX        "단위", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX
    AUTORADIOBUTTON "16 진수", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP
    AUTORADIOBUTTON "10 진수", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP
    DEFPUSHBUTTON   "확인",IDOK,140,77,30,14,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,77,30,14,WS_GROUP
END

IDD_EDIT_BINARY DIALOG  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "이진 값 편집"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "값 이름:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "값 데이터:",IDC_STATIC,5,30,90,8
    CONTROL         "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,4,40,160,40
    DEFPUSHBUTTON   "확인",IDOK,140,81,30,15,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,80,30,15,WS_GROUP
END

IDD_EDIT_MULTI_STRING DIALOG  22, 17, 210, 175
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "다중 문자열 편집"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "값 이름:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "값 데이터:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
    DEFPUSHBUTTON   "확인",IDOK,140,158,30,13,WS_GROUP
    PUSHBUTTON      "취소",IDCANCEL,175,158,30,13,WS_GROUP
END

IDD_FIND DIALOG  22, 17, 210, 85
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "찾기"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT           "찾기:",IDC_STATIC,5,7,119,8
    EDITTEXT        IDC_VALUE_NAME,40,5,125,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    LTEXT           "찾기 옵션:",IDC_STATIC,5, 22, 119, 8
    CHECKBOX        "키", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX        "값 이름", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "값 내용", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "완전한 단어만 찾기", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    DEFPUSHBUTTON   "찾기",IDOK,175,3,30,14,WS_GROUP
    PUSHBUTTON      "닫기",IDCANCEL,175,22,30,11, WS_GROUP
END

IDD_EXPORT_TEMPLATE DIALOG  50, 50, 278, 54
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_BORDER
FONT 9, "MS Shell Dlg"
BEGIN
    GROUPBOX        "레지스트리 불러오기", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP
    AUTORADIOBUTTON "모두(&A)", IDC_EXPORT_ALL, 12, 15, 244, 12
    AUTORADIOBUTTON "선택된 부분만(&E):", IDC_EXPORT_SELECTED, 12, 30, 70, 12
    EDITTEXT        IDC_EXPORT_PATH, 82, 30, 184, 12
END

/*****************************************************************/



/*
 * TEXTINCLUDE
 */

1 TEXTINCLUDE
BEGIN
    "resource.h\0"
END

/*****************************************************************/
