/*
 * WineBoot resources
 *
 * Copyright (C) 2008 CodeWeavers
 *
 * 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
 *
 */

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

IDD_ENDTASK DIALOG DISCARDABLE  0, 0, 276, 71
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "待機中"
FONT 9, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "キャンセル",IDCANCEL,129,49,50,15
    PUSHBUTTON      "プロセスの終了",IDOK,51,49,71,15
    LTEXT           "ログオフおよび、再起動のプロセスをシミュレートしていますが、プログラムは反応していません。",
                    IDC_STATIC,7,7,262,19
    LTEXT           "プロセスを終了させると、保存していないデータは全て失われます。",
                    IDC_STATIC,7,28,262,15
END

#pragma code_page(default)
