view: Handle the commandline.

This commit is contained in:
André Hentschel 2011-07-27 21:04:43 +02:00 committed by Alexandre Julliard
parent 9d9f6da7da
commit 39f48dc8c9
1 changed files with 67 additions and 35 deletions

View File

@ -23,6 +23,7 @@
#include <stdio.h>
static HINSTANCE hInst;
static HWND hMainWnd;
static char szAppName[5] = "View";
static char szTitle[80];
@ -101,7 +102,7 @@ static BOOL FileIsPlaceable( LPCSTR szFileName )
return (apmh.key == APMHEADER_KEY);
}
static HMETAFILE GetPlaceableMetaFile( HWND hwnd, LPCSTR szFileName )
static HMETAFILE GetPlaceableMetaFile( LPCSTR szFileName )
{
LPBYTE lpData;
METAHEADER mfHeader;
@ -125,7 +126,7 @@ static HMETAFILE GetPlaceableMetaFile( HWND hwnd, LPCSTR szFileName )
char msg[128];
sprintf(msg, "Computed checksum %04x != stored checksum %04x\n",
checksum, APMHeader.checksum);
MessageBox(hwnd, msg, "Checksum failed", MB_OK);
MessageBox(hMainWnd, msg, "Checksum failed", MB_OK);
return 0;
}
@ -150,16 +151,36 @@ static HMETAFILE GetPlaceableMetaFile( HWND hwnd, LPCSTR szFileName )
height = APMHeader.bbox.Bottom - APMHeader.bbox.Top;
/* printf("Ok! width %d height %d inch %d\n", width, height, APMHeader.inch); */
hdc = GetDC(hwnd);
hdc = GetDC(hMainWnd);
width = width * GetDeviceCaps(hdc, LOGPIXELSX)/APMHeader.inch;
height = height * GetDeviceCaps(hdc,LOGPIXELSY)/APMHeader.inch;
ReleaseDC(hwnd, hdc);
ReleaseDC(hMainWnd, hdc);
deltax = 0;
deltay = 0 ;
return hmf;
}
static void DoOpenFile(LPCSTR filename)
{
if (!filename) return;
isAldus = FileIsPlaceable(filename);
if (isAldus) {
hmf = GetPlaceableMetaFile(filename);
} else {
RECT r;
isEnhanced = FileIsEnhanced(filename);
if (isEnhanced)
enhmf = GetEnhMetaFile(filename);
else
hmf = GetMetaFile(filename);
GetClientRect(hMainWnd, &r);
width = r.right - r.left;
height = r.bottom - r.top;
}
InvalidateRect( hMainWnd, NULL, TRUE );
}
static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
{
@ -192,23 +213,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM
case IDM_OPEN:
{
char filename[MAX_PATH];
if (FileOpen(hwnd, filename, sizeof(filename))) {
isAldus = FileIsPlaceable(filename);
if (isAldus) {
hmf = GetPlaceableMetaFile(hwnd, filename);
} else {
RECT r;
isEnhanced = FileIsEnhanced(filename);
if (isEnhanced)
enhmf = GetEnhMetaFile(filename);
else
hmf = GetMetaFile(filename);
GetClientRect(hwnd, &r);
width = r.right - r.left;
height = r.bottom - r.top;
}
InvalidateRect( hwnd, NULL, TRUE );
}
if (FileOpen(hwnd, filename, sizeof(filename)))
DoOpenFile(filename);
}
break;
@ -301,34 +307,58 @@ static BOOL InitApplication(HINSTANCE hInstance)
static BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hwnd;
/* Save the instance handle in a global variable for later use */
hInst = hInstance;
/* Create main window */
hwnd = CreateWindow(szAppName, /* See RegisterClass() call */
szTitle, /* window title */
WS_OVERLAPPEDWINDOW, /* Window style */
CW_USEDEFAULT, 0, /* positioning */
CW_USEDEFAULT, 0, /* size */
NULL, /* Overlapped has no parent */
NULL, /* Use the window class menu */
hInstance,
NULL);
hMainWnd = CreateWindow(szAppName, /* See RegisterClass() call */
szTitle, /* window title */
WS_OVERLAPPEDWINDOW, /* Window style */
CW_USEDEFAULT, 0, /* positioning */
CW_USEDEFAULT, 0, /* size */
NULL, /* Overlapped has no parent */
NULL, /* Use the window class menu */
hInstance,
NULL);
if (!hwnd)
if (!hMainWnd)
return FALSE;
/* Call module specific instance initialization functions here */
/* show the window, and paint it for the first time */
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
ShowWindow(hMainWnd, nCmdShow);
UpdateWindow(hMainWnd);
return TRUE;
}
static void HandleCommandLine(LPSTR cmdline)
{
CHAR delimiter;
/* skip white space */
while (*cmdline == ' ') cmdline++;
/* skip executable name */
delimiter = (*cmdline == '"' ? '"' : ' ');
if (*cmdline == delimiter) cmdline++;
while (*cmdline && *cmdline != delimiter) cmdline++;
if (*cmdline == delimiter) cmdline++;
if (*cmdline)
{
/* file name is passed on the command line */
if (cmdline[0] == '"')
{
cmdline++;
cmdline[lstrlen(cmdline) - 1] = 0;
}
DoOpenFile(cmdline);
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
@ -353,6 +383,8 @@ int APIENTRY WinMain(HINSTANCE hInstance,
return FALSE;
}
HandleCommandLine(GetCommandLine());
hAccelTable = LoadAccelerators(hInstance, szAppName);
/* Main loop */