/* --- Window processing module for MENUBAR window class --- */ int MenuBarProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { int rtn; switch (msg) { case CREATE_WINDOW: reset_menubar(wnd); break; case SETFOCUS: return SetFocusMsg(wnd, p1); case BUILDMENU: BuildMenuMsg(wnd, p1); break; case PAINT: if (!isVisible(wnd) || GetText(wnd) == NULL) break; PaintMsg(wnd); return FALSE; case BORDER: if (mwnd == NULL) SendMessage(wnd, PAINT, 0, 0); return TRUE; case KEYBOARD: KeyboardMsg(wnd, p1); return TRUE; case LEFT_BUTTON: LeftButtonMsg(wnd, p1); return TRUE; case MB_SELECTION: SelectionMsg(wnd, p1, p2); break; case COMMAND: CommandMsg(wnd, p1, p2); return TRUE; case INSIDE_WINDOW: return InsideRect(p1, p2, WindowRect(wnd)); case CLOSE_POPDOWN: ClosePopdownMsg(wnd); return TRUE; case CLOSE_WINDOW: rtn = BaseWndProc(MENUBAR, wnd, msg, p1, p2); CloseWindowMsg(wnd); return rtn; default: break; } return BaseWndProc(MENUBAR, wnd, msg, p1, p2); }
/* ----------- SCROLL Message ---------- */ static int ScrollMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; if (isMultiLine(wnd)) { rtn = BaseWndProc(EDITBOX,wnd,SCROLL,p1,0); if (rtn != FALSE) { if (p1) { /* -------- scrolling up --------- */ if (wnd->WndRow == 0) { wnd->CurrLine++; StickEnd(wnd); } else --wnd->WndRow; } else { /* -------- scrolling down --------- */ if (wnd->WndRow == ClientHeight(wnd)-1) { if (wnd->CurrLine > 0) --wnd->CurrLine; StickEnd(wnd); } else wnd->WndRow++; } SendMessage(wnd,KEYBOARD_CURSOR,WndCol,wnd->WndRow); } } return rtn; }
/* --------- COMMAND Message ---------- */ static void CommandMsg(WINDOW wnd, PARAM p1, PARAM p2) { if (p1 == ID_HELP) { BaseWndProc(MENUBAR, wnd, COMMAND, p1, p2); return; } if (isCascadedCommand(ActiveMenuBar, (int)p1)) { /* find the cascaded menu based on command id in p1 */ MENU *mnu = ActiveMenu+mctr; while (mnu->Title != (void *)-1) { if (mnu->CascadeId == (int) p1) { if (casc < MAXCASCADES) { Cascaders[casc++] = mwnd; SendMessage(wnd, MB_SELECTION, (PARAM)(mnu-ActiveMenu), TRUE); } break; } mnu++; } } else { if (mwnd != NULL) SendMessage(mwnd, CLOSE_WINDOW, 0, 0); SendMessage(GetDocFocus(), SETFOCUS, TRUE, 0); PostMessage(GetParent(wnd), COMMAND, p1, p2); } }
/* ----------- SETTEXT Message ---------- */ static int SetTextMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; if (strlen((char *)p1) <= wnd->MaxTextLength) rtn = BaseWndProc(EDITBOX, wnd, SETTEXT, p1, 0); return rtn; }
/* ----------- SETFOCUS Message ----------- */ static int SetFocusMsg(WINDOW wnd, PARAM p1) { int rtn; rtn = BaseWndProc(MENUBAR, wnd, SETFOCUS, p1, 0); if (!(int)p1) SendMessage(GetParent(wnd), ADDSTATUS, 0, 0); return rtn; }
/* --- When inserting or deleting, adjust next following tab, same line --- */ static void AdjustTab(WINDOW wnd) { /* ---- test if there is a tab beyond this character ---- */ int col = wnd->CurrCol; while (*CurrChar && *CurrChar != '\n') { if (*CurrChar == sTab) { int exp = (cfg.Tabs - 1) - (wnd->CurrCol % cfg.Tabs); wnd->CurrCol++; while (*CurrChar == pTab) BaseWndProc(EDITOR, wnd, KEYBOARD, DEL, 0); while (exp--) BaseWndProc(EDITOR, wnd, KEYBOARD, pTab, 0); break; } wnd->CurrCol++; } wnd->CurrCol = col; }
/* ----------- CREATE_WINDOW Message ---------- */ static int CreateWindowMsg(WINDOW wnd) { int rtn = BaseWndProc(EDITBOX, wnd, CREATE_WINDOW, 0, 0); wnd->MaxTextLength = MAXTEXTLEN+1; wnd->textlen = EditBufLen(wnd); wnd->InsertMode = TRUE; SendMessage(wnd, CLEARTEXT, 0, 0); return rtn; }
int SpinButtonProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { int rtn; CTLWINDOW *ct = GetControl(wnd); if (ct != NULL) { switch (msg) { case CREATE_WINDOW: wnd->wd -= 2; wnd->rc.rt -= 2; break; case SETFOCUS: rtn = BaseWndProc(SPINBUTTON, wnd, msg, p1, p2); if (!(int)p1) SendMessage(NULL, HIDE_CURSOR, 0, 0); SetFocusCursor(wnd); return rtn; case PAINT: foreground = WndBackground(wnd); background = WndForeground(wnd); wputch(wnd,UPSCROLLBOX,WindowWidth(wnd), 0); wputch(wnd,DOWNSCROLLBOX,WindowWidth(wnd)+1,0); SetFocusCursor(wnd); break; case LEFT_BUTTON: if (p1 == GetRight(wnd) + 1) SendMessage(wnd, KEYBOARD, UP, 0); else if (p1 == GetRight(wnd) + 2) SendMessage(wnd, KEYBOARD, DN, 0); if (wnd != inFocus) SendMessage(wnd, SETFOCUS, TRUE, 0); return TRUE; case LB_SETSELECTION: rtn = BaseWndProc(SPINBUTTON, wnd, msg, p1, p2); wnd->wtop = (int) p1; SendMessage(wnd, PAINT, 0, 0); return rtn; default: break; } } return BaseWndProc(SPINBUTTON, wnd, msg, p1, p2); }
/* ----------- SCROLLPAGE Message ---------- */ static int ScrollPageMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; if (isMultiLine(wnd)) { rtn = BaseWndProc(EDITBOX, wnd, SCROLLPAGE, p1, 0); SetLinePointer(wnd, wnd->wtop+wnd->WndRow); StickEnd(wnd); SendMessage(wnd, KEYBOARD_CURSOR,WndCol, wnd->WndRow); } return rtn; }
/* -------- cursor up key: up one line ------------ */ static void Upward(WINDOW wnd) { if (isMultiLine(wnd) && wnd->CurrLine != 0) { --wnd->CurrLine; if (wnd->WndRow == 0) BaseWndProc(EDITBOX, wnd, SCROLL, FALSE, 0); else --wnd->WndRow; StickEnd(wnd); } }
/* --------- KEYBOARD Message ---------- */ static int KeyboardMsg(WINDOW wnd, PARAM p1, PARAM p2) { int c = (int) p1; BOOL delnl; PARAM pn = p1; if (WindowMoving || WindowSizing || ((int)p2 & ALTKEY)) return FALSE; switch (c) { case PGUP: case PGDN: case UP: case DN: pn = (PARAM) BS; case FWD: case BS: BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); TurnOffDisplay(wnd); while (*CurrChar == pTab) BaseWndProc(EDITOR, wnd, KEYBOARD, pn, p2); TurnOnDisplay(wnd); return TRUE; case DEL: TurnOffDisplay(wnd); delnl = *CurrChar == '\n' || TextBlockMarked(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); while (*CurrChar == pTab) BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); AdjustTab(wnd); TurnOnDisplay(wnd); RepaintLine(wnd); if (delnl) SendMessage(wnd, PAINT, 0, 0); return TRUE; case '\t': TurnOffDisplay(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, (PARAM) sTab, p2); while ((wnd->CurrCol % cfg.Tabs) != 0) BaseWndProc(EDITOR, wnd, KEYBOARD, pTab, p2); TurnOnDisplay(wnd); RepaintLine(wnd); return TRUE; default: if ((c & OFFSET == 0) && (isprint(c) || c == '\r')) { TurnOffDisplay(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); AdjustTab(wnd); TurnOnDisplay(wnd); RepaintLine(wnd); if (c == '\r') SendMessage(wnd, PAINT, 0, 0); return TRUE; } break; } return FALSE; }
/* --------- cursor down key: down one line --------- */ static void Downward(WINDOW wnd) { if (isMultiLine(wnd) && wnd->WndRow+wnd->wtop+1 < wnd->wlines) { wnd->CurrLine++; if (wnd->WndRow == ClientHeight(wnd)-1) BaseWndProc(EDITBOX, wnd, SCROLL, TRUE, 0); else wnd->WndRow++; StickEnd(wnd); } }
/* ----------- HORIZSCROLLPAGE Message ---------- */ static int HorizPageMsg(WINDOW wnd, PARAM p1) { int rtn = BaseWndProc(EDITBOX, wnd, HORIZPAGE, p1, 0); if ((int) p1 == FALSE) { if (wnd->CurrCol > wnd->wleft+ClientWidth(wnd)-1) wnd->CurrCol = wnd->wleft+ClientWidth(wnd)-1; } else if (wnd->CurrCol < wnd->wleft) wnd->CurrCol = wnd->wleft; SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return rtn; }
/* ----------- SIZE Message ---------- */ int SizeMsg(WINDOW wnd, PARAM p1, PARAM p2) { int rtn = BaseWndProc(EDITBOX, wnd, SIZE, p1, p2); if (WndCol > ClientWidth(wnd)-1) wnd->CurrCol = ClientWidth(wnd)-1 + wnd->wleft; if (wnd->WndRow > ClientHeight(wnd)-1) { wnd->WndRow = ClientHeight(wnd)-1; SetLinePointer(wnd, wnd->WndRow+wnd->wtop); } SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return rtn; }
/* ---------- SETTEXT Message ------------ */ static int SetTextMsg(WINDOW wnd, char *Buf) { unsigned char *tp, *ep, *ttp; int x = 0; int sz = 0; int rtn; tp = Buf; /* --- compute the buffer size based on tabs in the text --- */ while (*tp) { if (*tp == '\t') { /* --- tab, adjust the buffer length --- */ int sps = cfg.Tabs - (x % cfg.Tabs); sz += sps; x += sps; } else { /* --- not a tab, count the character --- */ sz++; x++; } if (*tp == '\n') x = 0; /* newline, reset x --- */ tp++; } /* --- allocate a buffer --- */ ep = DFcalloc(1, sz+1); /* --- detab the input file --- */ tp = Buf; ttp = ep; x = 0; while (*tp) { /* --- put the character (\t, too) into the buffer --- */ x++; /* --- expand tab into subst tab (\f + 0x80) and expansions (\t + 0x80) --- */ if (*tp == '\t') { *ttp++ = sTab; /* --- substitute tab character --- */ while ((x % cfg.Tabs) != 0) *ttp++ = pTab, x++; } else { *ttp++ = *tp; if (*tp == '\n') x = 0; } tp++; } *ttp = '\0'; rtn = BaseWndProc(EDITOR, wnd, SETTEXT, (PARAM) ep, 0); free(ep); return rtn; }
/* ---------- CLOSE_WINDOW Message ----------- */ static int CloseWindowMsg(WINDOW wnd, PARAM p1, PARAM p2) { int rtn; SendMessage(NULL, HIDE_CURSOR, 0, 0); if (wnd->DeletedText != NULL) free(wnd->DeletedText); rtn = BaseWndProc(EDITBOX, wnd, CLOSE_WINDOW, p1, p2); if (wnd->text != NULL) { free(wnd->text); wnd->text = NULL; } return rtn; }
int BoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { int rtn; CTLWINDOW *ct = GetControl(wnd); if (ct != NULL) { switch (msg) { case SETFOCUS: case PAINT: return FALSE; case LEFT_BUTTON: case BUTTON_RELEASED: return SendMessage(GetParent(wnd), msg, p1, p2); case BORDER: rtn = BaseWndProc(BOX, wnd, msg, p1, p2); if (ct != NULL && ct->itext != NULL) writeline(wnd, ct->itext, 1, 0, FALSE); return rtn; default: break; } } return BaseWndProc(BOX, wnd, msg, p1, p2); }
/* ------- Window processing module for EDITBOX class ------ */ int EditorProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { switch (msg) { case KEYBOARD: if (KeyboardMsg(wnd, p1, p2)) return TRUE; break; case SETTEXT: return SetTextMsg(wnd, (char *) p1); default: break; } return BaseWndProc(EDITOR, wnd, msg, p1, p2); }
/* ----------- CLEARTEXT Message ------------ */ static int ClearTextMsg(WINDOW wnd) { int rtn = BaseWndProc(EDITBOX, wnd, CLEARTEXT, 0, 0); unsigned blen = EditBufLen(wnd)+2; wnd->text = DFrealloc(wnd->text, blen); memset(wnd->text, 0, blen); wnd->wlines = 0; wnd->CurrLine = 0; wnd->CurrCol = 0; wnd->WndRow = 0; wnd->wleft = 0; wnd->wtop = 0; wnd->textwidth = 0; wnd->TextChanged = FALSE; return rtn; }
int ErrorBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { switch (msg) { case CREATE_WINDOW: GetClass(wnd) = ERRORBOX; InitWindowColors(wnd); break; case KEYBOARD: if (p1 == '\r' || p1 == ESC) ReturnValue = (int)p1; break; default: break; } return BaseWndProc(ERRORBOX, wnd, msg, p1, p2); }
/* ----------- HORIZSCROLL Message ---------- */ static int HorizScrollMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; char *currchar = CurrChar; if (!(p1 && wnd->CurrCol == wnd->wleft && *currchar == '\n')) { rtn = BaseWndProc(EDITBOX, wnd, HORIZSCROLL, p1, 0); if (rtn != FALSE) { if (wnd->CurrCol < wnd->wleft) wnd->CurrCol++; else if (WndCol == ClientWidth(wnd)) --wnd->CurrCol; SendMessage(wnd,KEYBOARD_CURSOR,WndCol,wnd->WndRow); } } return rtn; }
int MessageBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { switch (msg) { case CREATE_WINDOW: GetClass(wnd) = MESSAGEBOX; InitWindowColors(wnd); ClearAttribute(wnd, CONTROLBOX); break; case KEYBOARD: if (p1 == '\r' || p1 == ESC) ReturnValue = (int)p1; break; default: break; } return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2); }
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); }
/* ----------- ADDTEXT Message ---------- */ static int AddTextMsg(WINDOW wnd, PARAM p1, PARAM p2) { int rtn = FALSE; if (strlen((char *)p1)+wnd->textlen <= wnd->MaxTextLength) { rtn = BaseWndProc(EDITBOX, wnd, ADDTEXT, p1, p2); if (rtn != FALSE) { if (!isMultiLine(wnd)) { wnd->CurrLine = 0; wnd->CurrCol = strlen((char *)p1); if (wnd->CurrCol >= ClientWidth(wnd)) { wnd->wleft = wnd->CurrCol-ClientWidth(wnd); wnd->CurrCol -= wnd->wleft; } wnd->BlkEndCol = wnd->CurrCol; SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); } } } return rtn; }
int YesNoBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { switch (msg) { case CREATE_WINDOW: GetClass(wnd) = MESSAGEBOX; InitWindowColors(wnd); 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; } default: break; } return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2); }
int CancelBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { switch (msg) { case CREATE_WINDOW: CancelWnd = wnd; SendMessage(wnd, CAPTURE_MOUSE, 0, 0); SendMessage(wnd, CAPTURE_KEYBOARD, 0, 0); break; case COMMAND: if ((int) p1 == ID_CANCEL && (int) p2 == 0) SendMessage(GetParent(wnd), msg, p1, p2); return TRUE; case CLOSE_WINDOW: CancelWnd = NULL; SendMessage(wnd, RELEASE_MOUSE, 0, 0); SendMessage(wnd, RELEASE_KEYBOARD, 0, 0); p1 = TRUE; break; default: break; } return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2); }
/* ---------- page/scroll keys ----------- */ static int DoScrolling(WINDOW wnd, int c, PARAM p2) { switch (c) { case PGUP: case PGDN: if (isMultiLine(wnd)) BaseWndProc(EDITBOX, wnd, KEYBOARD, c, p2); break; case CTRL_PGUP: case CTRL_PGDN: BaseWndProc(EDITBOX, wnd, KEYBOARD, c, p2); break; case HOME: Home(wnd); break; case END: End(wnd); break; case CTRL_FWD: NextWord(wnd); break; case CTRL_BS: PrevWord(wnd); break; case CTRL_HOME: if (isMultiLine(wnd)) { SendMessage(wnd, SCROLLDOC, TRUE, 0); wnd->CurrLine = 0; wnd->WndRow = 0; } Home(wnd); break; case CTRL_END: if (isMultiLine(wnd) && wnd->WndRow+wnd->wtop+1 < wnd->wlines && wnd->wlines > 0) { SendMessage(wnd, SCROLLDOC, FALSE, 0); SetLinePointer(wnd, wnd->wlines-1); wnd->WndRow = min(ClientHeight(wnd)-1, wnd->wlines-1); Home(wnd); } End(wnd); break; case UP: if (isMultiLine(wnd)) Upward(wnd); break; case DN: if (isMultiLine(wnd)) Downward(wnd); break; case FWD: Forward(wnd); break; case BS: Backward(wnd); break; default: return FALSE; } if (!KeyBoardMarking && TextBlockMarked(wnd)) { ClearTextBlock(wnd); SendMessage(wnd, PAINT, 0, 0); } SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return TRUE; }
/* ------------ KEYBOARD Message ------------- */ static void KeyboardMsg(WINDOW wnd, PARAM p1) { MENU *mnu; int sel; if (mwnd == NULL) { /* ----- search for menu bar shortcut keys ---- */ int c = tolower((int)p1); int a = AltConvert((int)p1); int j; for (j = 0; j < mctr; j++) { if ((inFocus == wnd && menu[j].sc == c) || (a && menu[j].sc == a)) { SendMessage(wnd, SETFOCUS, TRUE, 0); SendMessage(wnd, MB_SELECTION, j, 0); return; } } } /* -------- search for accelerator keys -------- */ mnu = ActiveMenu; while (mnu->Title != (void *)-1) { struct PopDown *pd = mnu->Selections; if (mnu->PrepMenu) (*(mnu->PrepMenu))(GetDocFocus(), mnu); while (pd->SelectionTitle != NULL) { if (pd->Accelerator == (int) p1) { if (pd->Attrib & INACTIVE) beep(); else { if (pd->Attrib & TOGGLE) pd->Attrib ^= CHECKED; SendMessage(GetDocFocus(), SETFOCUS, TRUE, 0); PostMessage(GetParent(wnd), COMMAND, pd->ActionId, 0); } return; } pd++; } mnu++; } switch ((int)p1) { case F1: if (ActiveMenu == NULL || ActiveMenuBar == NULL) break; sel = ActiveMenuBar->ActiveSelection; if (sel == -1) { BaseWndProc(MENUBAR, wnd, KEYBOARD, F1, 0); return; } mnu = ActiveMenu+sel; if (mwnd == NULL || mnu->Selections[0].SelectionTitle == NULL) { DisplayHelp(wnd,mnu->Title+1); return; } break; case '\r': if (mwnd == NULL && ActiveMenuBar->ActiveSelection != -1) SendMessage(wnd, MB_SELECTION, ActiveMenuBar->ActiveSelection, 0); break; case F10: if (wnd != inFocus && mwnd == NULL) { SendMessage(wnd, SETFOCUS, TRUE, 0); if ( ActiveMenuBar->ActiveSelection == -1) ActiveMenuBar->ActiveSelection = 0; SendMessage(wnd, PAINT, 0, 0); break; } /* ------- fall through ------- */ case ESC: if (inFocus == wnd && mwnd == NULL) { ActiveMenuBar->ActiveSelection = -1; SendMessage(GetDocFocus(),SETFOCUS,TRUE,0); SendMessage(wnd, PAINT, 0, 0); } break; case FWD: ActiveMenuBar->ActiveSelection++; if (ActiveMenuBar->ActiveSelection == mctr) ActiveMenuBar->ActiveSelection = 0; if (mwnd != NULL) SendMessage(wnd, MB_SELECTION, ActiveMenuBar->ActiveSelection, 0); else SendMessage(wnd, PAINT, 0, 0); break; case BS: if (ActiveMenuBar->ActiveSelection == 0 || ActiveMenuBar->ActiveSelection == -1) ActiveMenuBar->ActiveSelection = mctr; --ActiveMenuBar->ActiveSelection; if (mwnd != NULL) SendMessage(wnd, MB_SELECTION, ActiveMenuBar->ActiveSelection, 0); else SendMessage(wnd, PAINT, 0, 0); break; default: break; } }
/* ------- Window processing module for EDITBOX class ------ */ int EditBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2) { int rtn; switch (msg) { case CREATE_WINDOW: return CreateWindowMsg(wnd); case ADDTEXT: return AddTextMsg(wnd, p1, p2); case SETTEXT: return SetTextMsg(wnd, p1); case CLEARTEXT: return ClearTextMsg(wnd); case GETTEXT: return GetTextMsg(wnd, p1, p2); case SETTEXTLENGTH: return SetTextLengthMsg(wnd, (unsigned) p1); case KEYBOARD_CURSOR: KeyboardCursorMsg(wnd, p1, p2); return TRUE; case SETFOCUS: if (!(int)p1) SendMessage(NULL, HIDE_CURSOR, 0, 0); case PAINT: case MOVE: rtn = BaseWndProc(EDITBOX, wnd, msg, p1, p2); SendMessage(wnd,KEYBOARD_CURSOR,WndCol,wnd->WndRow); return rtn; case SIZE: return SizeMsg(wnd, p1, p2); case SCROLL: return ScrollMsg(wnd, p1); case HORIZSCROLL: return HorizScrollMsg(wnd, p1); case SCROLLPAGE: return ScrollPageMsg(wnd, p1); case HORIZPAGE: return HorizPageMsg(wnd, p1); case LEFT_BUTTON: if (LeftButtonMsg(wnd, p1, p2)) return TRUE; break; case MOUSE_MOVED: if (MouseMovedMsg(wnd, p1, p2)) return TRUE; break; case BUTTON_RELEASED: if (ButtonReleasedMsg(wnd)) return TRUE; break; case KEYBOARD: if (KeyboardMsg(wnd, p1, p2)) return TRUE; break; case SHIFT_CHANGED: ShiftChangedMsg(wnd, p1); break; case COMMAND: if (CommandMsg(wnd, p1)) return TRUE; break; case CLOSE_WINDOW: return CloseWindowMsg(wnd, p1, p2); default: break; } return BaseWndProc(EDITBOX, wnd, msg, p1, p2); }