I wish you'd at least make the effort to talk to people before you do things like
this.
This is meant to be a COM shell extension, and your implementation is completely wrong.
It's therefore incompatible with the XP version of the lib and won't integrate
with shell32.
I already have the outline for the COM lib sketched out if you wanted to think about
rewriting it?
Your definitions for the exports are also wrong. I've listed these below for you in
case you want to change them.
VOID ImageView_Fullscreen(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow);
VOID ImageView_FullscreenA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow);
VOID ImageView_FullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow);
VOID ImageView_PrintTo(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow);
VOID ImageView_PrintToA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow);
VOID ImageView_PrintToW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow);
VOID ImageView_fullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow);
Regards,
Ged.
-----Original Message-----
From: ros-diffs-bounces(a)reactos.org [mailto:ros-diffs-bounces@reactos.org] On Behalf Of
dchapyshev(a)svn.reactos.org
Sent: 28 May 2008 20:53
To: ros-diffs(a)reactos.org
Subject: [ros-diffs] [dchapyshev] 33741: - Start implementing shimgvw.dll
Author: dchapyshev
Date: Wed May 28 14:52:46 2008
New Revision: 33741
URL:
http://svn.reactos.org/svn/reactos?rev=33741&view=rev
Log:
- Start implementing shimgvw.dll
Added:
trunk/reactos/dll/win32/shimgvw/
trunk/reactos/dll/win32/shimgvw/lang/
trunk/reactos/dll/win32/shimgvw/lang/en-US.rc (with props)
trunk/reactos/dll/win32/shimgvw/res/
trunk/reactos/dll/win32/shimgvw/res/main.ico (with props)
trunk/reactos/dll/win32/shimgvw/res/next.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/prev.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/print.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/rot1.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/rot2.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/save.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/zoomm.bmp (with props)
trunk/reactos/dll/win32/shimgvw/res/zoomp.bmp (with props)
trunk/reactos/dll/win32/shimgvw/resource.h (with props)
trunk/reactos/dll/win32/shimgvw/rsrc.rc (with props)
trunk/reactos/dll/win32/shimgvw/shimgvw.c (with props)
trunk/reactos/dll/win32/shimgvw/shimgvw.h (with props)
trunk/reactos/dll/win32/shimgvw/shimgvw.rbuild (with props)
trunk/reactos/dll/win32/shimgvw/shimgvw.rc (with props)
trunk/reactos/dll/win32/shimgvw/shimgvw.spec (with props)
Modified:
trunk/reactos/dll/win32/win32.rbuild
Added: trunk/reactos/dll/win32/shimgvw/lang/en-US.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/lang/en-…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/lang/en-US.rc (added)
+++ trunk/reactos/dll/win32/shimgvw/lang/en-US.rc [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,17 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+ IDS_APPTITLE "ReactOS Picture and Fax Viewer"
+ IDS_SETASDESKBG "Set as Desktop Background"
+
+ /* Tooltips */
+ IDS_TOOLTIP_NEXT_PIC "Next Picture"
+ IDS_TOOLTIP_PREV_PIC "Previous Picture"
+ IDS_TOOLTIP_ZOOM_IN "Zoom In (+)"
+ IDS_TOOLTIP_ZOOM_OUT "Zoom Out (-)"
+ IDS_TOOLTIP_ROT_CLOCKW "Rotate Clockwise (Ctrl+K)"
+ IDS_TOOLTIP_ROT_COUNCW "Rotate Counterclockwise (Ctrl+L)"
+ IDS_TOOLTIP_PRINT "Print (Ctrl+P)"
+ IDS_TOOLTIP_SAVEAS "Save As... (Ctrl+S)"
+END
Propchange: trunk/reactos/dll/win32/shimgvw/lang/en-US.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/res/main.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/main…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/main.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/next.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/next…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/next.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/prev.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/prev…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/prev.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/print.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/prin…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/print.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/rot1.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/rot1…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/rot1.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/rot2.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/rot2…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/rot2.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/save.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/save…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/save.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/zoomm.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/zoom…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/zoomm.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/res/zoomp.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/res/zoom…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/win32/shimgvw/res/zoomp.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/win32/shimgvw/resource.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/resource…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/resource.h (added)
+++ trunk/reactos/dll/win32/shimgvw/resource.h [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,53 @@
+#ifndef __SHIMGVW_RESOURCE_H
+#define __SHIMGVW_RESOURCE_H
+
+/* Icons */
+#define IDI_APPICON 1
+#define IDI_BMP_ICON 2
+#define IDI_GIF_ICON 3
+#define IDI_JPG_ICON 4
+#define IDI_PNG_ICON 5
+
+#define IDB_PREVICON 50
+#define IDB_NEXTICON 51
+#define IDB_ZOOMPICON 52
+#define IDB_ZOOMMICON 53
+#define IDB_SAVEICON 54
+#define IDB_PRINTICON 55
+#define IDB_ROT1ICON 56
+#define IDB_ROT2ICON 57
+
+/* ToolBar buttons */
+#define IDC_PREV 500
+#define IDC_NEXT 501
+#define IDC_ZOOMP 502
+#define IDC_ZOOMM 503
+#define IDC_SAVE 504
+#define IDC_PRINT 505
+#define IDC_ROT1 506
+#define IDC_ROT2 507
+
+#define TBICON_PREV 0
+#define TBICON_NEXT 1
+#define TBICON_ZOOMP 2
+#define TBICON_ZOOMM 3
+#define TBICON_SAVE 4
+#define TBICON_PRINT 5
+#define TBICON_ROT1 6
+#define TBICON_ROT2 7
+
+/* Strings */
+#define IDS_APPTITLE 100
+#define IDS_SETASDESKBG 101
+
+/* Tooltips strings */
+#define IDS_TOOLTIP_NEXT_PIC 300
+#define IDS_TOOLTIP_PREV_PIC 301
+#define IDS_TOOLTIP_ZOOM_IN 302
+#define IDS_TOOLTIP_ZOOM_OUT 304
+#define IDS_TOOLTIP_ROT_CLOCKW 305
+#define IDS_TOOLTIP_ROT_COUNCW 306
+#define IDS_TOOLTIP_PRINT 307
+#define IDS_TOOLTIP_SAVEAS 308
+
+#endif /* __SHIMGVW_RESOURCE_H */
Propchange: trunk/reactos/dll/win32/shimgvw/resource.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/rsrc.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/rsrc.rc?…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/rsrc.rc (added)
+++ trunk/reactos/dll/win32/shimgvw/rsrc.rc [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,4 @@
+#include <windows.h>
+#include "resource.h"
+
+#include "lang/en-US.rc"
Propchange: trunk/reactos/dll/win32/shimgvw/rsrc.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/shimgvw.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/shimgvw.…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/shimgvw.c (added)
+++ trunk/reactos/dll/win32/shimgvw/shimgvw.c [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,496 @@
+/*
+ *
+ * PROJECT: ReactOS Picture and Fax Viewer
+ * FILE: dll/win32/shimgvw/shimgvw.c
+ * PURPOSE: shimgvw.dll
+ * PROGRAMMER: Dmitry Chapyshev (dmitry(a)reactos.org)
+ *
+ * UPDATE HISTORY:
+ * 28/05/2008 Created
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include <windows.h>
+#include <commctrl.h>
+#include <gdiplus.h>
+#include <tchar.h>
+
+#include "shimgvw.h"
+
+
+HINSTANCE hInstance;
+SHIMGVW_SETTINGS shiSettings;
+WCHAR szOpenFileName[MAX_PATH];
+
+HWND hDispWnd, hToolBar;
+
+/* ToolBar Buttons */
+static const TBBUTTON Buttons [] =
+{ /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData,
iString */
+ {TBICON_PREV, IDC_PREV, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {TBICON_NEXT, IDC_NEXT, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
+ {TBICON_ZOOMP, IDC_ZOOMP, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {TBICON_ZOOMM, IDC_ZOOMM, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
+ {TBICON_ROT1, IDC_ROT1, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {TBICON_ROT2, IDC_ROT2, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
+ {TBICON_SAVE, IDC_SAVE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+ {TBICON_PRINT, IDC_PRINT, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
+};
+
+static VOID
+ImageView_DrawImage(HWND hwnd)
+{
+ GpGraphics *graphics;
+ GpImage *image;
+ UINT uImgWidth, uImgHeight;
+ UINT height = 0, width = 0, x = 0, y = 0;
+ PAINTSTRUCT ps;
+ RECT rect;
+ HDC hdc;
+
+ if (GetFileAttributesW(szOpenFileName) == 0xFFFFFFFF)
+ return;
+
+ hdc = BeginPaint(hwnd, &ps);
+
+ GdipCreateFromHDC(hdc, &graphics);
+ GdipLoadImageFromFile(szOpenFileName, &image);
+ GdipGetImageWidth(image, &uImgWidth);
+ GdipGetImageHeight(image, &uImgHeight);
+
+ if (GetClientRect(hwnd, &rect))
+ {
+ FillRect(hdc, &rect, (HBRUSH)COLOR_WINDOW);
+
+ if ((rect.right == uImgWidth)&&(rect.bottom == uImgHeight))
+ {
+ x = 0, y = 0, width = rect.right, height = rect.bottom;
+ }
+ else if ((rect.right >= uImgWidth)&&(rect.bottom >= uImgHeight))
+ {
+ x = (rect.right/2)-(uImgWidth/2);
+ y = (rect.bottom/2)-(uImgHeight/2);
+ width = uImgWidth;
+ height = uImgHeight;
+ }
+ else if ((rect.right < uImgWidth)||(rect.bottom < uImgHeight))
+ {
+ if (rect.bottom < uImgHeight)
+ {
+ height = rect.bottom;
+ width = uImgWidth*(UINT)rect.bottom/uImgHeight;
+ x = (rect.right/2)-(width/2);
+ y = (rect.bottom/2)-(height/2);
+ }
+ if (rect.right < uImgWidth)
+ {
+ width = rect.right;
+ height = uImgHeight*(UINT)rect.right/uImgWidth;
+ x = (rect.right/2)-(width/2);
+ y = (rect.bottom/2)-(height/2);
+ }
+ if ((height > rect.bottom)||(width > rect.right))
+ {
+ for (;;)
+ {
+ if (((int)width - 1 < 0)||((int)height - 1 < 0)) break;
+ width -= 1;
+ height -= 1;
+ y = (rect.bottom/2)-(height/2);
+ x = (rect.right/2)-(width/2);
+ if ((height < rect.bottom)&&(width < rect.right))
break;
+ }
+ }
+ }
+ else if ((rect.right <= uImgWidth)&&(rect.bottom <= uImgHeight))
+ {
+ height = uImgHeight*(UINT)rect.right/uImgWidth;
+ y = (rect.bottom/2)-(height/2);
+ width = rect.right;
+
+ if ((height > rect.bottom)||(width > rect.right))
+ {
+ for (;;)
+ {
+ if (((int)width - 1 < 0)||((int)height - 1 < 0)) break;
+ width -= 1;
+ height -= 1;
+ y = (rect.bottom/2)-(height/2);
+ x = (rect.right/2)-(width/2);
+ if ((height < rect.bottom)&&(width < rect.right))
break;
+ }
+ }
+ }
+
+ //TCHAR szBuf[MAX_PATH];
+ //wsprintf(szBuf, _T("x = %d\ny = %d\nWidth = %d\nHeight = %d\n\nrect.right
= %d\nrect.bottom = %d\n\nuImgWidth = %d\nuImgHeight = %d"), x, y, width, height,
rect.right, rect.bottom, uImgWidth, uImgHeight);
+ //MessageBox(0, szBuf, NULL, MB_OK);
+ GdipDrawImageRect(graphics, image, x, y, width, height);
+ }
+
+ DeleteDC(hdc);
+ EndPaint(hwnd, &ps);
+}
+
+static BOOL
+ImageView_LoadSettings()
+{
+ HKEY hKey;
+ DWORD dwSize;
+
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\ReactOS\\shimgvw"), 0,
KEY_READ, &hKey) == ERROR_SUCCESS)
+ {
+ dwSize = sizeof(SHIMGVW_SETTINGS);
+ if (RegQueryValueEx(hKey, _T("Settings"), NULL, NULL,
(LPBYTE)&shiSettings, &dwSize) == ERROR_SUCCESS)
+ {
+ RegCloseKey(hKey);
+ return TRUE;
+ }
+
+ RegCloseKey(hKey);
+ }
+
+ return FALSE;
+}
+
+static VOID
+ImageView_SaveSettings(HWND hwnd)
+{
+ WINDOWPLACEMENT wp;
+ HKEY hKey;
+
+ ShowWindow(hwnd, SW_HIDE);
+ wp.length = sizeof(WINDOWPLACEMENT);
+ GetWindowPlacement(hwnd, &wp);
+
+ shiSettings.Left = wp.rcNormalPosition.left;
+ shiSettings.Top = wp.rcNormalPosition.top;
+ shiSettings.Right = wp.rcNormalPosition.right;
+ shiSettings.Bottom = wp.rcNormalPosition.bottom;
+ shiSettings.Maximized = (IsZoomed(hwnd) || (wp.flags & WPF_RESTORETOMAXIMIZED));
+
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\ReactOS\\shimgvw"), 0,
NULL,
+ REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
+ {
+ RegSetValueEx(hKey, _T("Settings"), 0, REG_BINARY,
(LPBYTE)&shiSettings, sizeof(SHIMGVW_SETTINGS));
+ RegCloseKey(hKey);
+ }
+}
+
+static BOOL
+ImageView_CreateToolBar(HWND hwnd)
+{
+ INT numButtons = sizeof(Buttons) / sizeof(Buttons[0]);
+
+ hToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
+ WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | CCS_BOTTOM |
TBSTYLE_TOOLTIPS,
+ 0, 0, 0, 0, hwnd,
+ 0, hInstance, NULL);
+ if(hToolBar != NULL)
+ {
+ HIMAGELIST hImageList;
+
+ SendMessage(hToolBar, TB_SETEXTENDEDSTYLE,
+ 0, TBSTYLE_EX_HIDECLIPPEDBUTTONS);
+
+ SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE,
+ sizeof(Buttons[0]), 0);
+
+ hImageList = ImageList_Create(TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, ILC_MASK |
ILC_COLOR24, 1, 1);
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_PREVICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_NEXTICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_ZOOMPICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_ZOOMMICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_SAVEICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_PRINTICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_ROT1ICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ ImageList_AddMasked(hImageList, LoadImage(hInstance,
MAKEINTRESOURCE(IDB_ROT2ICON), IMAGE_BITMAP,
+ TB_IMAGE_WIDTH, TB_IMAGE_HEIGHT, LR_DEFAULTCOLOR), RGB(255, 255,
255));
+
+ if (hImageList == NULL) return FALSE;
+
+ ImageList_Destroy((HIMAGELIST)SendMessage(hToolBar, TB_SETIMAGELIST,
+ 0, (LPARAM)hImageList));
+
+ SendMessage(hToolBar, TB_ADDBUTTONS,
+ numButtons, (LPARAM)Buttons);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static VOID
+ImageView_InitControls(HWND hwnd)
+{
+ MoveWindow(hwnd, shiSettings.Left, shiSettings.Top,
+ shiSettings.Right - shiSettings.Left,
+ shiSettings.Bottom - shiSettings.Top, TRUE);
+
+ if (shiSettings.Maximized) ShowWindow(hwnd, SW_MAXIMIZE);
+
+ hDispWnd = CreateWindowEx(WS_EX_TRANSPARENT, _T("STATIC"),
_T(""),
+ WS_CHILD | WS_VISIBLE,
+ 0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
+
+ ImageView_CreateToolBar(hwnd);
+}
+
+LRESULT CALLBACK
+ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
+{
+ switch (Message)
+ {
+ case WM_CREATE:
+ {
+ ImageView_InitControls(hwnd);
+ }
+ break;
+
+ case WM_COMMAND:
+ {
+ switch (wParam)
+ {
+ case IDC_PREV:
+
+ break;
+ case IDC_NEXT:
+
+ break;
+ case IDC_ZOOMP:
+
+ break;
+ case IDC_ZOOMM:
+
+ break;
+ case IDC_SAVE:
+
+ break;
+ case IDC_PRINT:
+
+ break;
+ case IDC_ROT1:
+
+ break;
+ case IDC_ROT2:
+
+ break;
+ }
+ }
+ break;
+
+ case WM_NOTIFY:
+ {
+ LPNMHDR pnmhdr = (LPNMHDR)lParam;
+
+ switch (pnmhdr->code)
+ {
+ case TTN_GETDISPINFO:
+ {
+ LPTOOLTIPTEXT lpttt;
+ UINT idButton;
+
+ lpttt = (LPTOOLTIPTEXT)lParam;
+ idButton = (UINT)lpttt->hdr.idFrom;
+
+ switch (idButton)
+ {
+ case IDC_PREV:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PREV_PIC);
+ break;
+ case IDC_NEXT:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEXT_PIC);
+ break;
+ case IDC_ZOOMP:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ZOOM_IN);
+ break;
+ case IDC_ZOOMM:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ZOOM_OUT);
+ break;
+ case IDC_SAVE:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_SAVEAS);
+ break;
+ case IDC_PRINT:
+ lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PRINT);
+ break;
+ case IDC_ROT1:
+ lpttt->lpszText =
MAKEINTRESOURCE(IDS_TOOLTIP_ROT_COUNCW);
+ break;
+ case IDC_ROT2:
+ lpttt->lpszText =
MAKEINTRESOURCE(IDS_TOOLTIP_ROT_CLOCKW);
+ break;
+ }
+ }
+ }
+ }
+ break;
+
+ case WM_PAINT:
+ {
+ ImageView_DrawImage(hDispWnd);
+ }
+ break;
+
+ case WM_SIZING:
+ {
+ LPRECT pRect = (LPRECT)lParam;
+ if (pRect->right-pRect->left < 350)
+ pRect->right = pRect->left + 350;
+
+ if (pRect->bottom-pRect->top < 290)
+ pRect->bottom = pRect->top + 290;
+ }
+ break;
+
+ case WM_SIZE:
+ {
+ MoveWindow(hDispWnd, 1, 1, LOWORD(lParam)-1, HIWORD(lParam)-35, TRUE);
+ SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
+ }
+ break;
+
+ case WM_DESTROY:
+ {
+ ImageView_SaveSettings(hwnd);
+ PostQuitMessage(0);
+ }
+ break;
+ }
+
+ return DefWindowProc(hwnd, Message, wParam, lParam);
+}
+
+LONG
+ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName)
+{
+ struct GdiplusStartupInput gdiplusStartupInput;
+ ULONG_PTR gdiplusToken;
+ WNDCLASS WndClass = {0};
+ TCHAR szBuf[512];
+ HWND hMainWnd;
+ MSG msg;
+
+ wcscpy(szOpenFileName, szFileName);
+
+ if (!ImageView_LoadSettings())
+ {
+ shiSettings.Maximized = FALSE;
+ shiSettings.Left = 0;
+ shiSettings.Top = 0;
+ shiSettings.Right = 520;
+ shiSettings.Bottom = 400;
+ }
+
+ // Initialize GDI+
+ gdiplusStartupInput.GdiplusVersion = 1;
+ gdiplusStartupInput.DebugEventCallback = NULL;
+ gdiplusStartupInput.SuppressBackgroundThread = 0;
+ gdiplusStartupInput.SuppressExternalCodecs = 0;
+
+ GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
+
+ // Create the window
+ WndClass.lpszClassName = _T("shimgvw_window");
+ WndClass.lpfnWndProc = (WNDPROC)ImageView_WndProc;
+ WndClass.hInstance = hInstance;
+ WndClass.style = CS_HREDRAW | CS_VREDRAW;
+ WndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));
+ WndClass.hCursor = LoadCursor(hInstance, IDC_ARROW);
+ WndClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
+
+ if (!RegisterClass(&WndClass)) return -1;
+
+ LoadString(hInstance, IDS_APPTITLE, szBuf, sizeof(szBuf) / sizeof(TCHAR));
+ hMainWnd = CreateWindow(_T("shimgvw_window"), szBuf,
+ WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE |
WS_CAPTION,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 0, 0, NULL, NULL, hInstance, NULL);
+
+ // Show it
+ ShowWindow(hMainWnd, SW_SHOW);
+ UpdateWindow(hMainWnd);
+
+ // Message Loop
+ while(GetMessage(&msg,NULL,0,0))
+ {
+ TranslateMessage(&msg);
+ DispatchMessageW(&msg);
+ }
+
+ GdiplusShutdown(gdiplusToken);
+ return -1;
+}
+
+LONG
+CALLBACK
+ImageView_FullscreenW(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+{
+ return ImageView_CreateWindow(hwnd, (LPWSTR)lParam1);
+}
+
+LONG
+CALLBACK
+ImageView_Fullscreen(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+{
+ WCHAR szFile[MAX_PATH];
+
+ if (MultiByteToWideChar(CP_ACP, 0, (char*)lParam1, strlen((char*)lParam1)+1, szFile,
MAX_PATH))
+ {
+ return ImageView_CreateWindow(hwnd, (LPWSTR)szFile);
+ }
+
+ return -1;
+}
+
+LONG
+CALLBACK
+ImageView_FullscreenA(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+{
+ WCHAR szFile[MAX_PATH];
+
+ if (MultiByteToWideChar(CP_ACP, 0, (char*)lParam1, strlen((char*)lParam1)+1, szFile,
MAX_PATH))
+ {
+ return ImageView_CreateWindow(hwnd, (LPWSTR)szFile);
+ }
+
+ return -1;
+}
+
+BOOL WINAPI
+DllMain(IN HINSTANCE hinstDLL,
+ IN DWORD dwReason,
+ IN LPVOID lpvReserved)
+{
+ switch (dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ hInstance = hinstDLL;
+ break;
+ }
+
+ return TRUE;
+}
+
Propchange: trunk/reactos/dll/win32/shimgvw/shimgvw.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/shimgvw.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/shimgvw.…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/shimgvw.h (added)
+++ trunk/reactos/dll/win32/shimgvw/shimgvw.h [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,17 @@
+#include <windows.h>
+
+#include "resource.h"
+
+#define TB_IMAGE_WIDTH 16
+#define TB_IMAGE_HEIGHT 16
+
+extern HINSTANCE hInstance;
+
+typedef struct
+{
+ BOOL Maximized;
+ INT Left;
+ INT Top;
+ INT Right;
+ INT Bottom;
+} SHIMGVW_SETTINGS;
Propchange: trunk/reactos/dll/win32/shimgvw/shimgvw.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/shimgvw.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/shimgvw.…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/shimgvw.rbuild (added)
+++ trunk/reactos/dll/win32/shimgvw/shimgvw.rbuild [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,15 @@
+<module name="shimgvw" type="win32dll"
baseaddress="${BASEADDRESS_SHIMGVW}" installbase="system32"
installname="shimgvw.dll">
+ <importlibrary definition="shimgvw.spec.def" />
+ <include base="shimgvw">.</include>
+ <define name="_DISABLE_TIDENTS" />
+ <library>kernel32</library>
+ <library>advapi32</library>
+ <library>comctl32</library>
+ <library>ntdll</library>
+ <library>user32</library>
+ <library>gdi32</library>
+ <library>gdiplus</library>
+ <file>shimgvw.c</file>
+ <file>shimgvw.rc</file>
+ <file>shimgvw.spec</file>
+</module>
Propchange: trunk/reactos/dll/win32/shimgvw/shimgvw.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/shimgvw.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/shimgvw.…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/shimgvw.rc (added)
+++ trunk/reactos/dll/win32/shimgvw/shimgvw.rc [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,21 @@
+#include <windows.h>
+#include "resource.h"
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Picture and Fax Viewer\0"
+#define REACTOS_STR_INTERNAL_NAME "shimgvw\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "shimgvw.dll\0"
+#include <reactos/version.rc>
+
+IDI_APPICON ICON "res/main.ico"
+
+IDB_PREVICON BITMAP "res/prev.bmp"
+IDB_NEXTICON BITMAP "res/next.bmp"
+IDB_ZOOMPICON BITMAP "res/zoomp.bmp"
+IDB_ZOOMMICON BITMAP "res/zoomm.bmp"
+IDB_SAVEICON BITMAP "res/save.bmp"
+IDB_PRINTICON BITMAP "res/print.bmp"
+IDB_ROT1ICON BITMAP "res/rot1.bmp"
+IDB_ROT2ICON BITMAP "res/rot2.bmp"
+
+#include "rsrc.rc"
Propchange: trunk/reactos/dll/win32/shimgvw/shimgvw.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/shimgvw/shimgvw.spec
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shimgvw/shimgvw.…
==============================================================================
--- trunk/reactos/dll/win32/shimgvw/shimgvw.spec (added)
+++ trunk/reactos/dll/win32/shimgvw/shimgvw.spec [iso-8859-1] Wed May 28 14:52:46 2008
@@ -1,0 +1,14 @@
+@ stub ImageView_COMServer
+@ stdcall ImageView_Fullscreen(ptr long ptr ptr)
+@ stdcall ImageView_FullscreenA(ptr long ptr ptr)
+@ stdcall ImageView_FullscreenW(ptr long ptr ptr)
+@ stub ImageView_PrintTo
+@ stub ImageView_PrintToA
+@ stub ImageView_PrintToW
+@ stub imageview_fullscreenW
+@ stub ConvertDIBSECTIONToThumbnail
+@ stub DllCanUnloadNow
+@ stub DllGetClassObject
+@ stub DllInstall
+@ stub DllRegisterServer
+@ stub DllUnregisterServer
Propchange: trunk/reactos/dll/win32/shimgvw/shimgvw.spec
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/win32/win32.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/win32.rbuild?rev…
==============================================================================
--- trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] Wed May 28 14:52:46 2008
@@ -292,6 +292,9 @@
<directory name="shfolder">
<xi:include href="shfolder/shfolder.rbuild" />
</directory>
+<directory name="shimgvw">
+ <xi:include href="shimgvw/shimgvw.rbuild" />
+</directory>
<directory name="shlwapi">
<xi:include href="shlwapi/shlwapi.rbuild" />
</directory>