📄 gtext.c
字号:
/* $Id: gtext.c,v 1.2 2005/04/08 20:45:34 erg Exp $ $Revision: 1.2 $ *//* vim:set shiftwidth=4 ts=8: *//*********************************************************** This software is part of the graphviz package ** http://www.graphviz.org/ ** ** Copyright (c) 1994-2004 AT&T Corp. ** and is licensed under the ** Common Public License, Version 1.0 ** by AT&T Corp. ** ** Information and Software Systems Research ** AT&T Research, Florham Park NJ ***********************************************************//* Lefteris Koutsofios - AT&T Labs Research */#include "common.h"#include "g.h"#include "gcommon.h"#include "mem.h"#define WTU widget->u.tint GTcreatewidget ( Gwidget_t *parent, Gwidget_t *widget, int attrn, Gwattr_t *attrp) { PIXsize_t ps; DWORD wflags; char *s; int ai; if (!parent) { Gerr (POS, G_ERRNOPARENTWIDGET); return -1; } wflags = WS_CHILDWINDOW; WTU->func = NULL; ps.x = ps.y = MINTWSIZE; s = ""; for (ai = 0; ai < attrn; ai++) { switch (attrp[ai].id) { case G_ATTRSIZE: GETSIZE (attrp[ai].u.s, ps, MINTWSIZE); break; case G_ATTRBORDERWIDTH: wflags |= WS_BORDER; break; case G_ATTRTEXT: s = attrp[ai].u.t; break; case G_ATTRAPPENDTEXT: Gerr (POS, G_ERRCANNOTSETATTR1, "appendtext"); return -1; case G_ATTRMODE: if ( strcmp ("oneline", attrp[ai].u.t) != 0 && strcmp ("input", attrp[ai].u.t) != 0 && strcmp ("output", attrp[ai].u.t) != 0 ) { Gerr (POS, G_ERRBADATTRVALUE, attrp[ai].u.t); return -1; } break; case G_ATTRWINDOWID: Gerr (POS, G_ERRCANNOTSETATTR1, "windowid"); return -1; case G_ATTRNEWLINECB: WTU->func = attrp[ai].u.func; break; case G_ATTRUSERDATA: widget->udata = attrp[ai].u.u; break; default: Gerr (POS, G_ERRBADATTRID, attrp[ai].id); return -1; } } Gadjustwrect (parent, &ps); wflags |= (ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL); if (ps.y > 40) wflags |= (WS_HSCROLL | WS_VSCROLL); if (!(widget->w = CreateWindow ( "EDIT", s, wflags, 0, 0, ps.x, ps.y, parent->w, (HMENU) (widget - &Gwidgets[0]), hinstance, NULL ))) { Gerr (POS, G_ERRCANNOTCREATEWIDGET); return -1; } ShowWindow (widget->w, SW_SHOW); UpdateWindow (widget->w); if (parent && parent->type == G_ARRAYWIDGET) Gawinsertchild (parent, widget); return 0;}int GTsetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) { Gwidget_t *parent; PIXsize_t ps; DWORD wflags1; int ai; parent = (widget->pwi == -1) ? NULL : &Gwidgets[widget->pwi]; wflags1 = SWP_NOMOVE | SWP_NOZORDER; for (ai = 0; ai < attrn; ai++) { switch (attrp[ai].id) { case G_ATTRSIZE: GETSIZE (attrp[ai].u.s, ps, MINTWSIZE); Gadjustwrect (parent, &ps); SetWindowPos (widget->w, (HWND) NULL, 0, 0, ps.x, ps.y, wflags1); break; case G_ATTRBORDERWIDTH: Gerr (POS, G_ERRCANNOTSETATTR2, "borderwidth"); return -1; case G_ATTRTEXT: Gnocallbacks = TRUE; SendMessage (widget->w, WM_SETTEXT, 0, ""); SendMessage (widget->w, EM_SETSEL, -1, 32760); SendMessage (widget->w, EM_REPLACESEL, 0, (LPARAM) attrp[ai].u.t); SendMessage (widget->w, EM_SETSEL, -1, 32760);#if 0 SendMessage (widget->w, EM_REPLACESEL, 0, (LPARAM) "\r\n"); SendMessage (widget->w, EM_SETSEL, -1, 32760);#endif Gnocallbacks = FALSE; break; case G_ATTRAPPENDTEXT: Gnocallbacks = TRUE; SendMessage (widget->w, EM_SETSEL, -1, 32760); SendMessage (widget->w, EM_REPLACESEL, 0, (LPARAM) attrp[ai].u.t); SendMessage (widget->w, EM_SETSEL, -1, 32760); SendMessage (widget->w, EM_REPLACESEL, 0, (LPARAM) "\r\n"); SendMessage (widget->w, EM_SETSEL, -1, 32760); Gnocallbacks = FALSE; break; case G_ATTRMODE: if ( strcmp ("oneline", attrp[ai].u.t) != 0 && strcmp ("input", attrp[ai].u.t) != 0 && strcmp ("output", attrp[ai].u.t) != 0 ) { Gerr (POS, G_ERRBADATTRVALUE, attrp[ai].u.t); return -1; } break; case G_ATTRWINDOWID: Gerr (POS, G_ERRCANNOTSETATTR2, "windowid"); return -1; case G_ATTRUSERDATA: widget->udata = attrp[ai].u.u; break; default: Gerr (POS, G_ERRBADATTRID, attrp[ai].id); return -1; } } return 0;}int GTgetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) { RECT r; int rtn, ai, i, j; for (ai = 0; ai < attrn; ai++) { switch (attrp[ai].id) { case G_ATTRSIZE: GetWindowRect (widget->w, &r); attrp[ai].u.s.x = r.right - r.left; attrp[ai].u.s.y = r.bottom - r.top; break; case G_ATTRBORDERWIDTH: Gerr (POS, G_ERRCANNOTGETATTR, "borderwidth"); return -1; case G_ATTRTEXT: if ((rtn = GetWindowTextLength (widget->w)) + 1 > Gbufn) { Gbufp = Marraygrow (Gbufp, (long) (rtn + 1) * BUFSIZE); Gbufn = rtn + 1; } GetWindowText (widget->w, &Gbufp[0], Gbufn - 1); for (i = 0, j = 0; Gbufp[i]; i++) if (Gbufp[i] != '\r') Gbufp[j++] = Gbufp[i]; Gbufp[j++] = 0; attrp[ai].u.t = &Gbufp[0]; break; case G_ATTRAPPENDTEXT: Gerr (POS, G_ERRCANNOTGETATTR, "appendtext"); return -1; case G_ATTRMODE: attrp[ai].u.t = "oneline"; break; case G_ATTRWINDOWID: sprintf (&Gbufp[0], "0x%lx", widget->w); attrp[ai].u.t = &Gbufp[0]; break; case G_ATTRNEWLINECB: attrp[ai].u.func = WTU->func; break; case G_ATTRUSERDATA: attrp[ai].u.u = widget->udata; break; default: Gerr (POS, G_ERRBADATTRID, attrp[ai].id); return -1; } } return 0;}int GTdestroywidget (Gwidget_t *widget) { Gwidget_t *parent; parent = (widget->pwi == -1) ? NULL : &Gwidgets[widget->pwi]; if (parent && parent->type == G_ARRAYWIDGET) Gawdeletechild (parent, widget); DestroyWindow (widget->w); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -