mirror of
https://github.com/reactos/reactos.git
synced 2025-02-21 16:04:57 +00:00
[SHIMGVW] Consider failure case of loading file (#2606)
If loading an image file failed, then properly handle it. The command line is rundll32 shimgvw.dll,ImageView_Fullscreen . CORE-16911
This commit is contained in:
parent
d8e47d61d4
commit
3926e9b3c8
23 changed files with 118 additions and 40 deletions
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Прегледът за снимки и факсове на РеактОС"
|
||||
IDS_SETASDESKBG "Слагане като подкраска"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Преглед"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Следващо изображение"
|
||||
|
|
|
@ -9,6 +9,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS prohlížeč obrázků a faxů"
|
||||
IDS_SETASDESKBG "Nastavit jako pozadí plochy"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Náhled"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Další obrázek"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS-Bild- und Faxansicht"
|
||||
IDS_SETASDESKBG "Als Desktophintergrund setzen"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Vorschau"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Nächstes Bild"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS Picture and Fax Viewer"
|
||||
IDS_SETASDESKBG "Set as Desktop Background"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Preview"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Next Picture"
|
||||
|
|
|
@ -6,6 +6,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Visor de imágenes y fax de ReactOS"
|
||||
IDS_SETASDESKBG "Establecer como fondo de escritorio"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Vista previa"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Siguiente imagen"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Visionneuse d'Images et Fax de ReactOS"
|
||||
IDS_SETASDESKBG "Définir comme Arrière-plan du Bureau"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Aperçu"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Image Suivante"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "מציג התמונות והפקסים של ReactOS"
|
||||
IDS_SETASDESKBG "קבע כרקע שולחן עבודה"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "תצוגה מקדימה"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "התמונה הבאה"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Visualizzatore immagini e fax di ReactOS"
|
||||
IDS_SETASDESKBG "Imposta come sfondo del desktop"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Anteprima"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Immagine successiva"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS画像とFAXビュアー"
|
||||
IDS_SETASDESKBG "デスクトップの背景に設定する"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "プレビュー"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "次の画像"
|
||||
|
|
|
@ -6,6 +6,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS paveikslėlių ir faksogramų peržiūros programa"
|
||||
IDS_SETASDESKBG "Nustatyti kaip darbalaukio foną"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Preview"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Tolesnis paveikslėlis"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS bilde og Faks Viser"
|
||||
IDS_SETASDESKBG "Sett som skrivebord bakgrunn"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Skriv ut"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Neste bilde"
|
||||
|
|
|
@ -9,6 +9,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Przeglądarka obrazów i faksów ReactOS"
|
||||
IDS_SETASDESKBG "Ustaw jako tło pulpitu"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Podgląd"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Następny obraz"
|
||||
|
|
|
@ -9,6 +9,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Visualizador de imagens e faxes do ReactOS"
|
||||
IDS_SETASDESKBG "Definir como plano de fundo da área de trabalho"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Pre-visualizar"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Próxima imagem"
|
||||
|
|
|
@ -11,6 +11,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Vizualizare fax și imagini"
|
||||
IDS_SETASDESKBG "Plasează ca decor de fundal"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Previzionare"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Imaginea următare"
|
||||
|
|
|
@ -4,6 +4,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Программа просмотра изображений и факсов"
|
||||
IDS_SETASDESKBG "Установить как фон рабочего стола"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Предпросмотр"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Следующее изображение"
|
||||
|
|
|
@ -8,6 +8,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Zobrazovač obrázkov a faxov systému ReactOS"
|
||||
IDS_SETASDESKBG "Nastaviť ako pozadie pracovnej plochy"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Preview" // Náhľad, Ukážka, Prezrieť ???
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Nasledujúci obrázok"
|
||||
|
|
|
@ -8,6 +8,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS Vëzhguesi i Fotove dhe Faxit"
|
||||
IDS_SETASDESKBG "Vendos si Sfond Desktopi"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Shikim Paraprak"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Fotoja Tjetër"
|
||||
|
|
|
@ -6,6 +6,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS Resim ve Belgegeçer Görüntüleyicisi"
|
||||
IDS_SETASDESKBG "Masaüstü Arka Planı Olarak Ayarla"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Ön İzleme"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Sonraki Resim"
|
||||
|
|
|
@ -12,6 +12,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "Програма перегляду зображень і факсів ReactOS"
|
||||
IDS_SETASDESKBG "Встановити як фон робочого столу"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "Перегляд"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "Наступне зображення"
|
||||
|
|
|
@ -7,6 +7,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS 图片和传真查看器"
|
||||
IDS_SETASDESKBG "设置为桌面背景"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "预览"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "下一张图片"
|
||||
|
|
|
@ -6,6 +6,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_APPTITLE "ReactOS 圖片和傳真檢視器"
|
||||
IDS_SETASDESKBG "設定為桌面背景"
|
||||
IDS_NOPREVIEW "No preview available."
|
||||
IDS_PREVIEW "預覽"
|
||||
/* Tooltips */
|
||||
IDS_TOOLTIP_NEXT_PIC "下一張圖片"
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
/* Strings */
|
||||
#define IDS_APPTITLE 100
|
||||
#define IDS_SETASDESKBG 101
|
||||
#define IDS_NOPREVIEW 102
|
||||
#define IDS_PREVIEW 550
|
||||
|
||||
/* Friendly File Type Names */
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
HINSTANCE hInstance;
|
||||
SHIMGVW_SETTINGS shiSettings;
|
||||
SHIMGVW_FILENODE *currentFile;
|
||||
GpImage *image;
|
||||
GpImage *image = NULL;
|
||||
WNDPROC PrevProc = NULL;
|
||||
|
||||
HWND hDispWnd, hToolBar;
|
||||
|
@ -186,6 +186,9 @@ static void ZoomInOrOut(BOOL bZoomIn)
|
|||
{
|
||||
INT i;
|
||||
|
||||
if (image == NULL)
|
||||
return;
|
||||
|
||||
if (bZoomIn) /* zoom in */
|
||||
{
|
||||
/* find next step */
|
||||
|
@ -237,6 +240,9 @@ static void ResetZoom(void)
|
|||
RECT Rect;
|
||||
UINT ImageWidth, ImageHeight;
|
||||
|
||||
if (image == NULL)
|
||||
return;
|
||||
|
||||
/* get disp window size and image size */
|
||||
GetClientRect(hDispWnd, &Rect);
|
||||
GdipGetImageWidth(image, &ImageWidth);
|
||||
|
@ -329,6 +335,9 @@ static void pSaveImageAs(HWND hwnd)
|
|||
UINT j;
|
||||
WCHAR *c;
|
||||
|
||||
if (image == NULL)
|
||||
return;
|
||||
|
||||
GdipGetImageEncodersSize(&num, &size);
|
||||
codecInfo = malloc(size);
|
||||
if (!codecInfo)
|
||||
|
@ -421,32 +430,54 @@ static void pSaveImageAs(HWND hwnd)
|
|||
free(codecInfo);
|
||||
}
|
||||
|
||||
static VOID
|
||||
pPrintImage(HWND hwnd)
|
||||
{
|
||||
/* FIXME */
|
||||
}
|
||||
|
||||
static VOID
|
||||
EnableToolBarButtons(BOOL bEnable)
|
||||
{
|
||||
SendMessage(hToolBar, TB_ENABLEBUTTON, IDC_SAVE, bEnable);
|
||||
SendMessage(hToolBar, TB_ENABLEBUTTON, IDC_PRINT, bEnable);
|
||||
}
|
||||
|
||||
static VOID
|
||||
pLoadImageFromNode(SHIMGVW_FILENODE *node, HWND hwnd)
|
||||
{
|
||||
WCHAR szTitleBuf[800];
|
||||
WCHAR szResStr[512];
|
||||
WCHAR *c;
|
||||
LPWSTR pchFileTitle;
|
||||
|
||||
if (node)
|
||||
if (image)
|
||||
{
|
||||
c = wcsrchr(node->FileName, '\\');
|
||||
if (c)
|
||||
{
|
||||
c++;
|
||||
}
|
||||
|
||||
LoadStringW(hInstance, IDS_APPTITLE, szResStr, ARRAYSIZE(szResStr));
|
||||
StringCbPrintfW(szTitleBuf, sizeof(szTitleBuf), L"%ls%ls%ls", szResStr, L" - ", c);
|
||||
SetWindowTextW(hwnd, szTitleBuf);
|
||||
|
||||
if (image)
|
||||
{
|
||||
GdipDisposeImage(image);
|
||||
}
|
||||
|
||||
pLoadImage(node->FileName);
|
||||
GdipDisposeImage(image);
|
||||
image = NULL;
|
||||
}
|
||||
|
||||
if (node == NULL)
|
||||
{
|
||||
EnableToolBarButtons(FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
pLoadImage(node->FileName);
|
||||
|
||||
LoadStringW(hInstance, IDS_APPTITLE, szResStr, ARRAYSIZE(szResStr));
|
||||
if (image != NULL)
|
||||
{
|
||||
pchFileTitle = PathFindFileNameW(node->FileName);
|
||||
StringCbPrintfW(szTitleBuf, sizeof(szTitleBuf),
|
||||
L"%ls%ls%ls", szResStr, L" - ", pchFileTitle);
|
||||
SetWindowTextW(hwnd, szTitleBuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowTextW(hwnd, szResStr);
|
||||
}
|
||||
|
||||
EnableToolBarButtons(image != NULL);
|
||||
}
|
||||
|
||||
static SHIMGVW_FILENODE*
|
||||
|
@ -617,6 +648,8 @@ ImageView_DrawImage(HWND hwnd)
|
|||
HBRUSH white;
|
||||
HGDIOBJ hbrOld;
|
||||
UINT uFlags;
|
||||
WCHAR szText[128];
|
||||
HGDIOBJ hFontOld;
|
||||
|
||||
hdc = BeginPaint(hwnd, &ps);
|
||||
if (!hdc)
|
||||
|
@ -632,18 +665,34 @@ ImageView_DrawImage(HWND hwnd)
|
|||
return;
|
||||
}
|
||||
|
||||
GdipGetImageWidth(image, &ImageWidth);
|
||||
GdipGetImageHeight(image, &ImageHeight);
|
||||
GetClientRect(hwnd, &rect);
|
||||
white = GetStockObject(WHITE_BRUSH);
|
||||
|
||||
if (GetClientRect(hwnd, &rect))
|
||||
if (image == NULL)
|
||||
{
|
||||
FillRect(hdc, &rect, white);
|
||||
|
||||
LoadStringW(hInstance, IDS_NOPREVIEW, szText, ARRAYSIZE(szText));
|
||||
|
||||
SetTextColor(hdc, RGB(0, 0, 0));
|
||||
SetBkMode(hdc, TRANSPARENT);
|
||||
|
||||
hFontOld = SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
|
||||
DrawTextW(hdc, szText, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER |
|
||||
DT_NOPREFIX);
|
||||
SelectObject(hdc, hFontOld);
|
||||
}
|
||||
else
|
||||
{
|
||||
GdipGetImageWidth(image, &ImageWidth);
|
||||
GdipGetImageHeight(image, &ImageHeight);
|
||||
|
||||
ZoomedWidth = (ImageWidth * ZoomPercents) / 100;
|
||||
ZoomedHeight = (ImageHeight * ZoomPercents) / 100;
|
||||
|
||||
x = (rect.right - ZoomedWidth) / 2;
|
||||
y = (rect.bottom - ZoomedHeight) / 2;
|
||||
|
||||
white = GetStockObject(WHITE_BRUSH);
|
||||
// Fill top part
|
||||
margin = rect;
|
||||
margin.bottom = y - 1;
|
||||
|
@ -903,46 +952,50 @@ ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
|||
currentFile = currentFile->Prev;
|
||||
pLoadImageFromNode(currentFile, hwnd);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case IDC_NEXT:
|
||||
{
|
||||
currentFile = currentFile->Next;
|
||||
pLoadImageFromNode(currentFile, hwnd);
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
case IDC_ZOOMP:
|
||||
{
|
||||
ZoomInOrOut(TRUE);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case IDC_ZOOMM:
|
||||
{
|
||||
ZoomInOrOut(FALSE);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case IDC_SAVE:
|
||||
pSaveImageAs(hwnd);
|
||||
break;
|
||||
|
||||
break;
|
||||
case IDC_PRINT:
|
||||
pPrintImage(hwnd);
|
||||
break;
|
||||
|
||||
break;
|
||||
case IDC_ROT1:
|
||||
{
|
||||
GdipImageRotateFlip(image, Rotate270FlipNone);
|
||||
ImageView_UpdateWindow(hwnd);
|
||||
if (image)
|
||||
{
|
||||
GdipImageRotateFlip(image, Rotate270FlipNone);
|
||||
ImageView_UpdateWindow(hwnd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case IDC_ROT2:
|
||||
{
|
||||
GdipImageRotateFlip(image, Rotate90FlipNone);
|
||||
ImageView_UpdateWindow(hwnd);
|
||||
if (image)
|
||||
{
|
||||
GdipImageRotateFlip(image, Rotate90FlipNone);
|
||||
ImageView_UpdateWindow(hwnd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1106,7 +1159,10 @@ ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName)
|
|||
pFreeFileList(currentFile);
|
||||
|
||||
if (image)
|
||||
{
|
||||
GdipDisposeImage(image);
|
||||
image = NULL;
|
||||
}
|
||||
|
||||
Anime_FreeInfo();
|
||||
|
||||
|
|
Loading…
Reference in a new issue