BOOL GenericMessage(WINDOW wnd,char *ttl,char *msg,int buttonct, int (*wndproc)(struct window *,enum messages,PARAM,PARAM), char *b1, char *b2, int c1, int c2, int isModal) { BOOL rtn; MsgBox.dwnd.title = ttl; MsgBox.ctl[0].dwnd.h = MsgHeight(msg); MsgBox.ctl[0].dwnd.w = max(max(MsgWidth(msg), buttonct*8 + buttonct + 2), strlen(ttl)+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 - 20) / 2; MsgBox.ctl[2].dwnd.x = MsgBox.ctl[1].dwnd.x + 10; 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; MsgBox.ctl[1].command = c1; MsgBox.ctl[2].command = c2; MsgBox.ctl[1].isetting = ON; MsgBox.ctl[2].isetting = ON; rtn = DialogBox(wnd, &MsgBox, isModal, wndproc); MsgBox.ctl[2].Class = 0; return rtn; }
WINDOW MomentaryMessage(char *msg) { WINDOW wnd = CreateWindow( TEXTBOX, NULL, -1,-1,MsgHeight(msg)+2,MsgWidth(msg)+2, NULL,NULL,NULL, HASBORDER | SHADOW | SAVESELF); SendMessage(wnd, SETTEXT, (PARAM) msg, 0); if (cfg.mono == 0) { WindowClientColor(wnd, WHITE, GREEN); WindowFrameColor(wnd, WHITE, GREEN); } SendMessage(wnd, SHOW_WINDOW, 0, 0); return wnd; }
int TextProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { int i, len; CTLWINDOW *ct = GetControl(wnd); char *cp, *cp2 = ct->itext; switch (msg) { case SETFOCUS: return TRUE; case LEFT_BUTTON: return TRUE; case PAINT: if (ct == NULL || ct->itext == NULL || GetText(wnd) != NULL) break; len = min(ct->dwnd.h, MsgHeight(cp2)); cp = cp2; for (i = 0; i < len; i++) { int mlen; char *txt = cp; char *cp1 = cp; char *np = strchr(cp, '\n'); if (np != NULL) *np = '\0'; mlen = strlen(cp); while ((cp1=strchr(cp1,SHORTCUTCHAR)) != NULL) { mlen += 3; cp1++; } if (np != NULL) *np = '\n'; txt = DFmalloc(mlen+1); CopyCommand(txt, cp, FALSE, WndBackground(wnd)); txt[mlen] = '\0'; SendMessage(wnd, ADDTEXT, (PARAM)txt, 0); if ((cp = strchr(cp, '\n')) != NULL) cp++; free(txt); } break; default: break; } return BaseWndProc(TEXT, wnd, msg, p1, p2); }