/*
 * Copyright 2003 Ulrich Czekalla for CodeWeavers
 * Copyright 2005,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

UIINSERTOBJECT DIALOG  0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "객체 삽입"
FONT 9, "MS Shell Dlg"
BEGIN
    LISTBOX         IDC_OBJTYPELIST,82,19,131,66,LBS_SORT |
                    LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL |
                    WS_TABSTOP
    LTEXT           "객체 타입:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE
    DEFPUSHBUTTON   "확인",IDOK,221,7,66,14
    PUSHBUTTON      "취소",IDCANCEL,221,24,66,14
    GROUPBOX        "결과",IDC_RESULT,7,103,208,41
    CONTROL         "새로 만들기",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
                    WS_GROUP,7,20,62,10
    CONTROL         "컨트롤 만들기",IDC_CREATECONTROL,"Button",
                    BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10
    CONTROL         "파일로부터 만들기",IDC_CREATEFROMFILE,"Button",
                    BS_AUTORADIOBUTTON,7,37,67,10
    LTEXT           "",IDC_RESULTDESC,49,112,159,23
    PUSHBUTTON      "컨트롤 추가(&A)...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE
    CONTROL         "아이콘으로 보기",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
                    WS_TABSTOP | NOT WS_VISIBLE,223,58,64,10
    PUSHBUTTON      "찾기...",IDC_BROWSE,155,88,50,14,NOT WS_VISIBLE
    LTEXT           "파일:",IDC_FILELBL,58,21,20,8, NOT WS_VISIBLE
    EDITTEXT        IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
END

IDD_PASTESPECIAL4 DIALOG 3, 15, 299, 140
STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "특별하게  붙여넣기"
FONT 9, "MS Shell Dlg"
BEGIN
    LTEXT         "원본:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
    CONTROL       "붙여넣기(&P)", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
                  1, 44, 55, 10
    CONTROL       "링크로 붙여넣기(&L)", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
                  1, 61, 69, 10
    LTEXT         "다른 이름으로(&A):", -1, 73, 25, 59, 8, WS_VISIBLE | WS_GROUP
    LISTBOX       IDC_PS_PASTELIST,     73, 36, 150, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
    LISTBOX       IDC_PS_PASTELINKLIST, 73, 36, 150, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
    LISTBOX       IDC_PS_DISPLAYLIST,   73, 36, 150, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
    CONTROL       "확인", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 226, 6, 66, 14
    CONTROL       "취소", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 226, 23, 66, 14
    CONTROL       "도움말(&H)", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 226, 42, 66, 14
    CONTROL       "아이콘으로 보기(&D)", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 226, 59, 70, 14
    CONTROL       "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
    CONTROL       "아이콘 바꾸기(&I)...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
    CONTROL       "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
    CONTROL       "<< 결과 텍스트는 여기다가 >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
    CONTROL       "결과", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
    CONTROL       "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
END
