Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 5.4. Файл dos2win\dos2win.cpp - часть 3


case WM_SYSCOMMAND: { switch(wParam & 0xfff0) { // Блокируем изменение размеров окна case SC_RESTORE: case SC_MAXIMIZE: case SC_SIZE: return 0;

// Выводим диалоговую панель "About" case CM_SYSABOUT: { lpfnDlgProc = (DLGPROC)MakeProcInstance((FARPROC)DlgProc, hInst); DialogBox(hInst, "ABOUT", hwnd, lpfnDlgProc); FreeProcInstance((FARPROC)lpfnDlgProc); return 0; }

default: return DefWindowProc(hwnd, msg, wParam, lParam); } }

// Это сообщение посылается DLL-библиотекой d2w.dll, // когда VxD-драйвер фиксирует запуск программы любой // виртуальной машиной MS-DOS. // Параметр lParam содержит указатель на строку, // имеющую следующий формат: // // Смещение Размер Описание // 0 1 Номер дискового устройства, которое // было текущим при запуске программы // 1 64 Каталог, который был текущим // при запуске программы // 65 128 Путь к запускаемой программе MS-DOS // или к запускаемому приложению Windows // 193 128 параметры запускаемой программы // или приложения //

case WM_STARTWINAPP: { // Проверка указателя if(lParam == NULL) return 0;

// Путь к запускаемой программе lpszCmd = (LPSTR)lParam + 65;

// Указатель на строку параметров lpszParm = (LPSTR)lParam + 65 + 128;

// Формируем буфер параметров для функции LoadModule // Первый байт резервируем для размера строки lstrcpy(szBuf, (LPCSTR)" "); lstrcat(szBuf, (LPCSTR)lpszParm);

// Записываем размер строки *szBuf = (BYTE)lstrlen(lpszParm);

// Заполняем структуру LOADPARMS if(lstrlen(lpszParm) != 0) parms.lpszCmdLine = (LPSTR)szBuf; else parms.lpszCmdLine = (LPSTR)"";

parms.segEnv = 0; parms.lpwShow = (LPWORD) awShow; parms.lpwReserved = (LPWORD) NULL;

// Устанавливаем такой же текущий диск, // какой был текущим при запуске программы // из виртуальной машины MS-DOS setdisk(*(LPSTR)lParam);

// Устанавливаем такой же текущий каталог, // какой был текущим при запуске программы // из виртуальной машины MS-DOS szCurPath[0] = (char)((*(LPSTR)lParam) + 'A'); lstrcpyn((LPSTR)szCurPath + 1, (LPSTR)":\\", 3); lstrcat((LPSTR)szCurPath, (LPSTR)lParam + 1); chdir(szCurPath);




Начало  Назад  Вперед



Книжный магазин