From 293274837aaf3f46a1f881b1bc2a85f4e4f5da51 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 25 Oct 2008 11:08:02 +0900 Subject: [PATCH] [14/19] paint: Add [Attributes] dialog --- programs/paint/En.rc | 27 +++++++++ programs/paint/paint.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 170 insertions(+), 1 deletions(-) diff --git a/programs/paint/En.rc b/programs/paint/En.rc index 09ec9cc..8b79785 100644 --- a/programs/paint/En.rc +++ b/programs/paint/En.rc @@ -191,6 +191,33 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "Cancel", IDCANCEL, 175, 24, 50, 14 } +IDD_ATTRIBUTES DIALOG 0, 0, 234, 166 +STYLE DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU +CAPTION "Attributes" +FONT 8, "MS Shell Dlg" +{ + LTEXT "", stc1, 13, 7, 144, 8 + LTEXT "", stc2, 13, 17, 144, 8 + LTEXT "&Width:", IDC_STATIC, 13, 34, 22, 10 + EDITTEXT edt1, 42, 32, 32, 12, ES_AUTOHSCROLL | WS_GROUP + LTEXT "&Height:", IDC_STATIC, 92, 34, 22, 10 + EDITTEXT edt2, 123, 32, 32, 12, ES_AUTOHSCROLL + GROUPBOX "Units", IDC_STATIC, 7, 48, 154, 28 + AUTORADIOBUTTON "&Inches", rad1, 13, 60, 34, 10, WS_GROUP | WS_DISABLED + AUTORADIOBUTTON "C&m", rad2, 63, 60, 27, 10, WS_DISABLED + AUTORADIOBUTTON "&Pixels", rad3, 105, 60, 30, 10 + GROUPBOX "Colors", IDC_STATIC, 7, 80, 154, 28 + AUTORADIOBUTTON "&Black and white", rad4, 13, 92, 64, 10, WS_GROUP | WS_DISABLED + AUTORADIOBUTTON "Co&lors", rad5, 105, 92, 34, 10 + GROUPBOX "Transparency", IDC_STATIC, 7, 112, 154, 48 + AUTOCHECKBOX "Use &Transparent background color", chx1, 13, 124, 126, 10, WS_DISABLED + PUSHBUTTON "Select &Color...", psh1, 33, 138, 73, 14, WS_DISABLED + CONTROL "", stc4, "STATIC", SS_SIMPLE | SS_SUNKEN | WS_DISABLED, 119, 138, 16, 14 + DEFPUSHBUTTON "OK", IDOK, 176, 7, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 176, 24, 50, 14 + PUSHBUTTON "&Default", psh2, 176, 41, 50, 14, WS_DISABLED +} + STRINGTABLE DISCARDABLE { STRING_PAINT, "Paint" diff --git a/programs/paint/paint.c b/programs/paint/paint.c index 17f6251..a89a0a1 100644 --- a/programs/paint/paint.c +++ b/programs/paint/paint.c @@ -637,9 +637,151 @@ VOID PAINT_StretchSkew(VOID) } } +BOOL CALLBACK +AttributesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + WCHAR sz[128], szSize[64], szDate[32], szTime[32]; + HANDLE hFile; + DWORD cb; + FILETIME ft, ft2; + SYSTEMTIME st; + BOOL fTranslated; + SIZE sizNew; + static SIZE siz; + static const WCHAR last[] = {'F','i','l','e',' ','l','a','s','t',' ', + 's','a','v','e','d',':','\t', + '%','s',' ','%','s',0 + }; + static const WCHAR size[] = {'S','i','z','e',' ','o','n',' ', + 'd','i','s','k',':','\t','%','s',0 + }; + static const WCHAR no_data[] = {'N','o','t',' ', + 'A','v','a','i','l','a','b','l','e',0 + }; + static const WCHAR empty[] = {0}; + switch (uMsg) + { + case WM_INITDIALOG: + CheckDlgButton(hDlg, rad3, 1); + + siz = Globals.sizImage; + + SetDlgItemInt(hDlg, edt1, siz.cx, FALSE); + SetDlgItemInt(hDlg, edt2, siz.cy, FALSE); + + wsprintf(sz, last, no_data, empty); + SetDlgItemText(hDlg, stc1, sz); + wsprintf(sz, size, no_data); + SetDlgItemText(hDlg, stc2, sz); + + hFile = CreateFile(Globals.szFileName, GENERIC_READ, + FILE_SHARE_READ, NULL, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + if (GetFileTime(hFile, NULL, NULL, &ft)) + { + FileTimeToLocalFileTime(&ft, &ft2); + FileTimeToSystemTime(&ft2, &st); + + GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, + szDate, 32); + GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, NULL, + szTime, 32); + wsprintf(sz, last, szDate, szTime); + SetDlgItemText(hDlg, stc1, sz); + } + + cb = GetFileSize(hFile, NULL); + if (cb != 0xFFFFFFFF) + { + StrFormatByteSize(cb, szSize, 64); + wsprintf(sz, size, szSize); + SetDlgItemText(hDlg, stc2, sz); + } + CloseHandle(hFile); + } + + CheckDlgButton(hDlg, rad5, 1); + return TRUE; + + case WM_COMMAND: + switch (HIWORD(wParam)) + { + case EN_CHANGE: + switch (LOWORD(wParam)) + { + case edt1: + break; + + case edt2: + break; + } + break; + + case BN_CLICKED: + switch (LOWORD(wParam)) + { + case rad1: + break; + + case rad2: + break; + + case rad3: + SetDlgItemInt(hDlg, edt1, siz.cx, FALSE); + SetDlgItemInt(hDlg, edt2, siz.cy, FALSE); + break; + + case IDOK: + sizNew.cx = GetDlgItemInt(hDlg, edt1, &fTranslated, FALSE); + if (!fTranslated || sizNew.cx <= 0) + { + WCHAR sz[MAX_STRING_LEN]; + LoadString(Globals.hInstance, STRING_POSITIVE_INT, sz, + MAX_STRING_LEN); + MessageBeep(MB_ICONERROR); + MessageBox(hDlg, sz, NULL, MB_OK|MB_ICONERROR); + SendDlgItemMessage(hDlg, edt1, EM_SETSEL, 0, -1); + SetFocus(GetDlgItem(hDlg, edt1)); + break; + } + sizNew.cy = GetDlgItemInt(hDlg, edt2, &fTranslated, FALSE); + if (!fTranslated || sizNew.cy <= 0) + { + WCHAR sz[MAX_STRING_LEN]; + LoadString(Globals.hInstance, STRING_POSITIVE_INT, sz, + MAX_STRING_LEN); + MessageBeep(MB_ICONERROR); + MessageBox(hDlg, sz, NULL, MB_OK|MB_ICONERROR); + SendDlgItemMessage(hDlg, edt2, EM_SETSEL, 0, -1); + SetFocus(GetDlgItem(hDlg, edt2)); + break; + } + + Canvas_Resize(Globals.hCanvasWnd, sizNew); + EndDialog(hDlg, IDOK); + break; + + case IDCANCEL: + EndDialog(hDlg, IDCANCEL); + break; + } + break; + } + break; + } + return FALSE; +} + VOID PAINT_Attributes(VOID) { - NotSupportedYet(); + if (DialogBox(Globals.hInstance, MAKEINTRESOURCE(IDD_ATTRIBUTES), + Globals.hMainWnd, AttributesDlgProc) == IDOK) + { + InvalidateRect(Globals.hCanvasWnd, NULL, TRUE); + UpdateWindow(Globals.hCanvasWnd); + } } BOOL CALLBACK -- 1.6.0.2