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-U... ============================================================================== --- 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/print... ============================================================================== 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/zoomm... ============================================================================== 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/zoomp... ============================================================================== 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?r... ============================================================================== --- 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.c... ============================================================================== --- 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@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.h... ============================================================================== --- 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.r... ============================================================================== --- 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.r... ============================================================================== --- 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.s... ============================================================================== --- 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>