home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
drdobbs
/
1991
/
06
/
dflat3
/
msgbox.c
< prev
next >
Wrap
Text File
|
1991-05-19
|
4KB
|
168 lines
/* ------------------ msgbox.c ------------------ */
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "dflat.h"
extern DBOX MsgBox;
static int ReturnValue;
int MessageBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
{
switch (msg) {
case CREATE_WINDOW:
GetClass(wnd) = MESSAGEBOX;
ClearAttribute(wnd, CONTROLBOX);
break;
#ifdef INCLUDE_DIALOG_BOXES
case KEYBOARD:
if (p1 == '\r' || p1 == ESC)
ReturnValue = (int)p1;
break;
#endif
default:
break;
}
return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2);
}
int YesNoBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
{
switch (msg) {
case CREATE_WINDOW:
GetClass(wnd) = MESSAGEBOX;
ClearAttribute(wnd, CONTROLBOX);
break;
case KEYBOARD: {
int c = tolower((int)p1);
if (c == 'y')
SendMessage(wnd, COMMAND, ID_OK, 0);
else if (c == 'n')
SendMessage(wnd, COMMAND, ID_CANCEL, 0);
break;
}
#ifndef INCLUDE_DIALOG_BOXES
case COMMAND:
if (p1 == ID_OK || p1 == ID_CANCEL) {
ReturnValue = (int)p1;
return TRUE;
}
break;
#endif
default:
break;
}
return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2);
}
int ErrorBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
{
switch (msg) {
case CREATE_WINDOW:
GetClass(wnd) = ERRORBOX;
ClearAttribute(wnd, MOVEABLE | CONTROLBOX);
break;
#ifdef INCLUDE_DIALOG_BOXES
case KEYBOARD:
if (p1 == '\r' || p1 == ESC)
ReturnValue = (int)p1;
break;
#endif
default:
break;
}
return BaseWndProc(ERRORBOX, wnd, msg, p1, p2);
}
static int GenericMessage(char *ttl, char *msg, int buttonct,
int (*wndproc)(struct window *, enum messages, PARAM, PARAM),
char *b1, char *b2)
{
#ifdef INCLUDE_DIALOG_BOXES
int rtn;
MsgBox.dwnd.title = ttl;
MsgBox.ctl[0].dwnd.h = MsgHeight(msg);
MsgBox.ctl[0].dwnd.w = max(MsgWidth(msg),
buttonct*8 + buttonct + 2);
MsgBox.dwnd.h = MsgBox.ctl[0].dwnd.h+6;
MsgBox.dwnd.w = MsgBox.ctl[0].dwnd.w+4;
if (buttonct == 1)
MsgBox.ctl[1].dwnd.x = (MsgBox.dwnd.w - 10) / 2;
else {
MsgBox.ctl[1].dwnd.x = (MsgBox.dwnd.w - 18) / 2;
MsgBox.ctl[2].dwnd.x = MsgBox.ctl[1].dwnd.x + 9;
MsgBox.ctl[2].class = BUTTON;
}
MsgBox.ctl[1].dwnd.y = MsgBox.dwnd.h - 4;
MsgBox.ctl[2].dwnd.y = MsgBox.dwnd.h - 4;
MsgBox.ctl[0].itext = msg;
MsgBox.ctl[1].itext = b1;
MsgBox.ctl[2].itext = b2;
rtn = DialogBox(NULLWND, &MsgBox, wndproc);
MsgBox.ctl[2].class = 0;
return rtn;
#else
WINDOW wnd;
wnd = CreateWindow(TEXTBOX,ttl,
-1,-1,MsgHeight(msg)+3,MsgWidth(msg)+2,
NULL,NULL,
wndproc,
HASBORDER | TITLEBAR | MOVEABLE);
SendMessage(wnd, SETTEXT, LPARAM(msg), 0);
SendMessage(wnd, CAPTURE_KEYBOARD, 0, 0);
SendMessage(wnd, CAPTURE_MOUSE, 0, 0);
ReturnValue = 0;
while (ReturnValue == 0)
;
SendMessage(wnd, RELEASE_KEYBOARD, 0, 0);
SendMessage(wnd, RELEASE_MOUSE, 0, 0);
return ReturnValue == ID_OK || ReturnValue == '\r';
#endif
}
int TestErrorMessage(char *msg)
{
return GenericMessage("Error", msg, 2, ErrorBoxProc, Ok, Cancel);
}
void ErrorMessage(char *msg)
{
GenericMessage("Error", msg, 1, ErrorBoxProc, Ok, NULL);
}
void MessageBox(char *ttl, char *msg)
{
GenericMessage(ttl, msg, 1, MessageBoxProc, Ok, NULL);
}
int YesNoBox(char *msg)
{
return GenericMessage(NULL, msg, 2, YesNoBoxProc, Yes, No);
}
int MsgHeight(char *msg)
{
int h = 1;
while ((msg = strchr(msg, '\n')) != NULL) {
h++;
msg++;
}
return h;
}
int MsgWidth(char *msg)
{
int w = 0;
char *cp = msg;
while ((cp = strchr(msg, '\n')) != NULL) {
w = max(w, (int) (cp-msg));
msg = cp+1;
}
return max(strlen(msg),w);
}