home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
PASM.LZH
/
BMPOPEN.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-15
|
6KB
|
237 lines
#include <owl\owlpch.h>
#pragma hdrstop
#include <owl\opensave.h>
#include <stdio.h>
#include <io.h>
#include "bmpopen.h"
#include "files.h"
#define TMP1 "__gtmp1.txt"
#define TMP2 "__gtmp2.txt"
#ifndef MAX_PATH
#define MAX_PATH 256
#endif
#ifndef SW_SHOWDEFAULT
#define SW_SHOWDEFAULT 10
#endif
#if 0
#define IDD_INPUTDIALOG 32514
int WinExecWait(TWindow *parent, char *lpszCmdLine, UINT fuCmdShow, char *waitfile = NULL);
class TDummyDialog: public TDialog {
public:
int flag;
TWindow *parent;
char *cmdLine;
UINT cmdShow;
char *waitFile;
TDummyDialog(TWindow* _parent, char *_cmdLine, UINT _cmdShow, char *_waitfile = NULL);
virtual ~TDummyDialog(){}
virtual BOOL IdleAction(long idleCount);
};
TDummyDialog::TDummyDialog(TWindow* _parent, char *_cmdLine, UINT _cmdShow, char *_waitFile) :
TDialog(parent, IDD_INPUTDIALOG)
{
flag = FALSE;
parent = _parent;
cmdLine = _cmdLine;
cmdShow = _cmdShow;
waitFile = _waitFile;
}
TDummyDialog::IdleAction(long idleCount)
{
TDialog::IdleAction(idleCount);
if (flag) {
return TRUE;
}
flag = TRUE;
int ret = WinExecWait(parent, cmdLine, cmdShow, waitFile);
CloseWindow(ret);
return TRUE;
}
int WinExecWaitDialog(TWindow *parent, char *lpszCmdLine, UINT fuCmdShow, char *waitfile)
{
return TDummyDialog(parent, lpszCmdLine, fuCmdShow, waitfile).Execute();
}
#endif
void PumpDrawMessage(TWindow *parent)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_PAINT) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} else if (msg.message == WM_LBUTTONDOWN) {
MessageBeep(-1);
}
}
parent->GetApplication()->PumpWaitingMessages();
}
int WinExecWait(TWindow *parent, char *lpszCmdLine, UINT fuCmdShow, char *waitfile)
{
#ifdef __WIN32__
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
StartInfo.wShowWindow = (WORD)fuCmdShow;
if (CreateProcess(NULL, lpszCmdLine, NULL, NULL,
FALSE, 0, NULL, NULL, &StartInfo, &ProcInfo) == FALSE) {
return FALSE;
}
CloseHandle(ProcInfo.hThread);
DWORD code;
if (GetExitCodeProcess(ProcInfo.hProcess, &code) == FALSE && waitfile != NULL) {
while (access(waitfile, 0) != 0) {
// parent->GetApplication()->PumpWaitingMessages();
PumpDrawMessage(parent);
Sleep(50);
}
Sleep(50);
SetActiveWindow(parent->GetApplication()->GetMainWindow()->HWindow);
} else {
while (WaitForSingleObject(ProcInfo.hProcess, 50) == WAIT_TIMEOUT) {
// parent->GetApplication()->PumpWaitingMessages();
PumpDrawMessage(parent);
}
SetForegroundWindow(parent->GetApplication()->GetMainWindow()->HWindow);
}
CloseHandle(ProcInfo.hProcess);
return TRUE;
#else
return FALSE;
#endif
}
int FileOpenSaveDialogWithBMP(
TWindow* parent, char *filename,
DWORD flags, const char* /*filter*/, char* /*customFilter*/,
char* initialDir, char* defExt)
{
int ret;
/* char tmppath[MAX_PATH];*/
char tmp1[MAX_PATH], tmp2[MAX_PATH];
char gme[MAX_PATH];
/*
GetTempPath(MAX_PATH, temppath);
GetTempFileName(tmppath, "_g", 0, tmp1);
GetTempFileName(tmppath, "_g", 0, tmp2);
*/
sprintf(tmp1, "%s%s", tempdir.c_str(), TMP1);
sprintf(tmp2, "%s%s", tempdir.c_str(), TMP2);
if (defExt == NULL
|| (strcmpi(defExt, "frm") != 0 && strcmpi(defExt, "fsc") != 0)
|| ((flags & (OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT)) == 0)) {
return -1;
}
unlink(tmp1);
unlink(tmp2);
FILE *fp;
if ((fp = fopen(tmp1, "w")) == NULL) {
return -1;
}
fprintf(fp, "%s\n", initialDir);
fprintf(fp, ".%s\n", defExt);
fprintf(fp, "%s\n", parent->GetApplication()->GetName());
if (strcmpi(defExt, "frm") == 0) {
if (flags & OFN_FILEMUSTEXIST) {
fprintf(fp, "読み込むモーションファイルを指定してください\n");
fprintf(fp, "open\n");
} else {
fprintf(fp, "保存するモーションファイルの名前を入力してください\n");
fprintf(fp, "save\n");
}
} else {
if (flags & OFN_FILEMUSTEXIST) {
fprintf(fp, "読み込むメカのデザインファイルを指定してください\n");
fprintf(fp, "open\n");
} else {
fprintf(fp, "保存するメカデザインファイルの名前を入力してください\n");
fprintf(fp, "save\n");
}
}
fprintf(fp, "%s\n", tmp2);
fclose(fp);
sprintf(gme, "%sGME.EXE -vf %s", pathdir.c_str(), tmp1);
if (WinExecWait(parent, gme, SW_SHOWDEFAULT, tmp2) == FALSE) {
unlink(tmp1);
unlink(tmp2);
return -1;
}
if ((fp = fopen(tmp2, "r")) == NULL) {
return -1;
}
if (fgets(tmp1, MAX_PATH, fp) == NULL) {
ret = -1;
} else {
if (tmp1[0] == '\n' || tmp1[0] == '\0') {
ret = IDCANCEL;
} else {
strcpy(filename, tmp1);
char *p;
if ((p = strchr(filename, '\n')) != NULL) {
*p = '\0';
}
ret = IDOK;
}
}
fclose(fp);
unlink(tmp1);
unlink(tmp2);
return ret;
}
int FileOpenDialogWithBMP(
TWindow* parent, char *filename,
DWORD flags, const char* filter, char* customFilter,
char* initialDir, char* defExt)
{
int ret;
ret = FileOpenSaveDialogWithBMP(parent, filename, flags, filter, customFilter, initialDir, defExt);
if (ret != IDOK && ret != IDCANCEL) {
TOpenSaveDialog::TData FileData(flags, filter, customFilter, initialDir, defExt);
ret = TFileOpenDialog(parent, FileData).Execute();
if (ret == IDOK) {
strcpy(filename, FileData.FileName);
}
}
return ret;
}
int FileSaveDialogWithBMP(
TWindow* parent, char *filename,
DWORD flags, const char* filter, char* customFilter,
char* initialDir, char* defExt)
{
int ret;
ret = FileOpenSaveDialogWithBMP(parent, filename, flags, filter, customFilter, initialDir, defExt);
if (ret != IDOK && ret != IDCANCEL) {
TOpenSaveDialog::TData FileData(flags, filter, customFilter, initialDir, defExt);
ret = TFileSaveDialog(parent, FileData).Execute();
if (ret == IDOK) {
strcpy(filename, FileData.FileName);
}
}
return ret;
}