[1/2] view: Handle the commandline (try 2)
André Hentschel
nerv at dawncrow.de
Wed Jul 27 14:04:43 CDT 2011
---
programs/view/view.c | 104 ++++++++++++++++++++++++++++++++-----------------
1 files changed, 68 insertions(+), 36 deletions(-)
diff --git a/programs/view/view.c b/programs/view/view.c
index 917784d..6fdf1a3 100644
--- a/programs/view/view.c
+++ b/programs/view/view.c
@@ -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);
-
- if (!hwnd)
+ 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 (!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 */
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list