⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmndwin.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
字号:
/********************************************************************** * File:        cmndwin.cpp  (Formerly cmdwin.c) * Description: Command Window class * Author:      Phil Cheatle * Created:     Thu Oct 10 16:25:24 BST 1991 * * (C) Copyright 1991, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. * **********************************************************************/#include "mfcpch.h"#include <ctype.h>#include "evnts.h"#include "cmndwin.h"#define BACKSPACE_KEY       '\010'#define RETURN_KEY          '\015'#define BORDER_HEIGHT             (menu_char_height / 2)#define MSG_AREA_TOP_LEFT_X       0#define MSG_AREA_TOP_LEFT_Y       0#define MSG_AREA_HEIGHT           (int)(menu_char_height * 1.5 )#define MSG_TEXT_START_X          (menu_char_height / 2)#define MSG_TEXT_START_Y          (MSG_AREA_TOP_LEFT_Y - menu_char_height)#define PROMPT_AREA_TOP_LEFT_X    0#define PROMPT_AREA_TOP_LEFT_Y    \	(MSG_AREA_TOP_LEFT_Y - MSG_AREA_HEIGHT - BORDER_HEIGHT)#define PROMPT_AREA_HEIGHT        MSG_AREA_HEIGHT#define PROMPT_TEXT_START_X       (menu_char_height / 2)#define PROMPT_TEXT_START_Y       (PROMPT_AREA_TOP_LEFT_Y - menu_char_height)#define MENU_AREA_TOP_LEFT_X      0#define MENU_AREA_TOP_LEFT_Y      \	(PROMPT_AREA_TOP_LEFT_Y - PROMPT_AREA_HEIGHT -  BORDER_HEIGHT)#define MIN_WINDOW_WIDTH          (PROMPT_TEXT_START_X + 80 * menu_char_width)#define EXTERNEXTERN INT_VAR (editor_cmdwin_width, 950, "CmdWin max non scrollable width");EXTERN INT_VAR (editor_cmdwin_height, 550,"CmdWin max non scrollable height");EXTERN INT_VAR (editor_cmdwin_xpos1, 20, "X pos of first command window");EXTERN INT_VAR (editor_cmdwin_ypos1, 20, "Y pos of first command window");EXTERN INT_VAR (editor_cmdwin_xoffset, 30, "X offset between command windws");EXTERN INT_VAR (editor_cmdwin_yoffset, 30, "Y offset between command windws");INT16COMMAND_WINDOW::next_win_x_pos = 0;INT16COMMAND_WINDOW::next_win_y_pos = 0;/********************************************************************** * COMMAND_WINDOW::COMMAND_WINDOW() * * COMMAND_WINDOW constructor **********************************************************************/                                 // window nameCOMMAND_WINDOW::COMMAND_WINDOW(const char *name,                               MENU_ROOT *menu_ptr  // root of menu                              ) {  BOX menu_box;  INT16 window_height;  INT8 window_type = FULLSIZEWIN;//Default  INT16 xsize;  INT16 ysize;  message_str[0] = '\0';  prompt_str[0] = '\0';  strcpy(win_name, name);   menu_root = menu_ptr;  menu_box = menu_root->recalc_bounding_box (MENU_AREA_TOP_LEFT_X,    MENU_AREA_TOP_LEFT_Y);  if (menu_box.width () > MIN_WINDOW_WIDTH) {    window_width = menu_box.width ();  }  else {    window_width = MIN_WINDOW_WIDTH;  }  window_height = MSG_AREA_TOP_LEFT_Y - menu_box.bottom ();  xsize = window_width;  ysize = window_height;  if (window_width > editor_cmdwin_width) {    window_type = SCROLLINGWIN;    xsize = editor_cmdwin_width;  }  if (window_height > editor_cmdwin_height) {    window_type = SCROLLINGWIN;    ysize = editor_cmdwin_height;  }  if ((next_win_x_pos == 0) && (next_win_x_pos == 0)) {                                 //Init for 1st win    next_win_x_pos = editor_cmdwin_xpos1;    next_win_y_pos = editor_cmdwin_ypos1;  }  x_pos = next_win_x_pos;  y_pos = next_win_y_pos;                                 //min x  fd = create_window (name, window_type, x_pos, y_pos, xsize, ysize, MSG_AREA_TOP_LEFT_X,    window_width,                //max x    menu_box.bottom (),          //min y    MSG_AREA_TOP_LEFT_Y,         //max_y    TRUE,                        //mouse DOWN    FALSE, FALSE, TRUE);         //key press  vdc_extent (fd, 0, 0, xsize, ysize);  next_win_x_pos += editor_cmdwin_xoffset;  next_win_y_pos += editor_cmdwin_yoffset;  plot(); }/********************************************************************** * COMMAND_WINDOW::event() * * COMMAND_WINDOW event handler **********************************************************************/void COMMAND_WINDOW::event(                 //Process event //Command event type                           GRAPHICS_EVENT &g_event,                           INT32 *cmd_event,                           char *new_value  //of menu item                          ) {  message_str[0] = '\0';  prompt_str[0] = '\0';  *cmd_event = UNIDENTIFIED_COMMAND;  new_value[0] = '\0';  switch (g_event.type) {    case DOWN_EVENT:    {      menu_root->event (this, FCOORD (g_event.x, g_event.y),        cmd_event, new_value);      if (*cmd_event == UNIDENTIFIED_COMMAND)        *cmd_event = NULL_COMMAND;      break;    }    case KEYPRESS_EVENT:    {      if (g_event.key == 3) {    //Control C        exit (0);      }    }    default:    {      //                      sprintf( message_str, "ERROR: Unrecognised graphics event %d",      //                                      g_event.type );      *cmd_event = NULL_COMMAND;      break;    }  }  plot(); }/********************************************************************** * COMMAND_WINDOW::msg() * * COMMAND_WINDOW message display **********************************************************************/void COMMAND_WINDOW::msg(                     //Display message                         const char *msg_str  //Text to display                        ) {  strcpy(message_str, msg_str);   plot_msg_area();   overlap_picture_ops(TRUE); }/********************************************************************** * COMMAND_WINDOW::plot() * * COMMAND_WINDOW (re) paint the window **********************************************************************/void COMMAND_WINDOW::plot() {   clear_view_surface(fd);   text_font_index (fd, 1);  character_height(fd, menu_char_height);   plot_msg_area();   plot_prompt_area();   menu_root->plot (fd);}/********************************************************************** * COMMAND_WINDOW::plot_msg_area() * **********************************************************************/void COMMAND_WINDOW::plot_msg_area() {   fill_color_index(fd, DARK_SLATE_BLUE);   interior_style(fd, INT_SOLID, FALSE);   rectangle (fd,    MSG_AREA_TOP_LEFT_X, MSG_AREA_TOP_LEFT_Y,    MSG_AREA_TOP_LEFT_X + window_width - 1,    MSG_AREA_TOP_LEFT_Y - MSG_AREA_HEIGHT);  text_color_index(fd, WHITE);   text2d (fd, MSG_TEXT_START_X, MSG_TEXT_START_Y, message_str, 0, FALSE);}/********************************************************************** * COMMAND_WINDOW::plot_prompt_area() * **********************************************************************/void COMMAND_WINDOW::plot_prompt_area() {   INT8 i;  INT8 prompt_len;  char char_str[2];  fill_color_index(fd, DARK_SLATE_BLUE);   interior_style(fd, INT_SOLID, FALSE);   rectangle (fd,    PROMPT_AREA_TOP_LEFT_X, PROMPT_AREA_TOP_LEFT_Y,    PROMPT_AREA_TOP_LEFT_X + window_width - 1,    PROMPT_AREA_TOP_LEFT_Y - MSG_AREA_HEIGHT);  text_color_index(fd, WHITE);   prompt_len = strlen (prompt_str);  char_str[1] = '\0';  for (i = 0; i < prompt_len; i++) {    char_str[0] = prompt_str[i];    text2d (fd,      PROMPT_TEXT_START_X + (i * menu_char_width),      PROMPT_TEXT_START_Y, char_str, 0, FALSE);  }}/********************************************************************** * COMMAND_WINDOW::internal_prompt() * * COMMAND_WINDOW Prompt for and read a response * WITHOUT DOING a PLOT! **********************************************************************/BOOL8 COMMAND_WINDOW::internal_prompt(                      //Prompt user                                      const char *msg_str,  //Prompt message                                      char *response_str    //Response & Default                                     ) {  GRAPHICS_EVENT event;  INT8 pos;  BOOL8 ok = TRUE;  strcpy(message_str, msg_str);   strcpy(prompt_str, response_str);   plot_msg_area();   plot_prompt_area();   overlap_picture_ops(TRUE);   /* MODE THE UI SO THAT IT ONLY RESPONDS TO KEYPRESSes IN THE COMMAND WINDOW */  event.key = '\0';  while (event.key != RETURN_KEY) {    await_event(fd,         //just cmd window                TRUE,       //wait for event                ANY_EVENT,  //ONLY keypresses                &event);    if (event.type != KEYPRESS_EVENT) {      ok = FALSE;      response_str[0] = '\0';      break;    }    pos = strlen (response_str);    if (isprint (event.key) && pos < MAX_CHARS) {      response_str[pos] = event.key;      response_str[pos + 1] = '\0';      text2d (fd,        PROMPT_TEXT_START_X + (pos * menu_char_width),        PROMPT_TEXT_START_Y, response_str + pos, 0, FALSE);    }    else {      switch (event.key) {        case BACKSPACE_KEY:          if (pos > 0) {            response_str[pos - 1] = '\0';            fill_color_index(fd, DARK_SLATE_BLUE);             interior_style(fd, INT_SOLID, FALSE);             rectangle (fd,              PROMPT_TEXT_START_X + (pos -              1) * menu_char_width,              PROMPT_AREA_TOP_LEFT_Y,              PROMPT_AREA_TOP_LEFT_X + window_width - 1,              PROMPT_AREA_TOP_LEFT_Y - PROMPT_AREA_HEIGHT);          }          break;        case RETURN_KEY:          break;        default:          sprintf (message_str, "NON PRINTING CHAR: %o", event.key);          plot_msg_area();       }    }    overlap_picture_ops(TRUE);   }  message_str[0] = '\0';  prompt_str[0] = '\0';  #ifdef __UNIX__  //   clear_event_queue(0);                                                             //clear ALL win events  #endif  return ok;}/********************************************************************** * COMMAND_WINDOW::press_radio_button() * * COMMAND_WINDOW Change the selected button in a radio set **********************************************************************/void COMMAND_WINDOW::press_radio_button(                                  //of this radio set                                        RADIO_MENU *radio_sub_menu_item,  //This button                                        RADIO_MENU_LEAF *button_menu_item) {  radio_sub_menu_item->press_radio_button (button_menu_item);  plot(); }/********************************************************************** * COMMAND_WINDOW::update_menu_tree() * * Following a CHANGE to the menu tree, the * boundng boxes must be recalculated, this may require the window to be * re-created, the window must then be re-displayed. **********************************************************************/void COMMAND_WINDOW::update_menu_tree() {   BOX menu_box;  INT16 window_height;  INT8 window_type = FULLSIZEWIN;//Default  INT16 xsize;  INT16 ysize;  menu_box = menu_root->recalc_bounding_box (MENU_AREA_TOP_LEFT_X,    MENU_AREA_TOP_LEFT_Y);  if (menu_box.width () > MIN_WINDOW_WIDTH) {    window_width = menu_box.width ();  }  else {    window_width = MIN_WINDOW_WIDTH;  }  window_height = MSG_AREA_TOP_LEFT_Y - menu_box.bottom ();  xsize = window_width;  ysize = window_height;  if (window_width > editor_cmdwin_width) {    window_type = SCROLLINGWIN;    xsize = editor_cmdwin_width;  }  if (window_height > editor_cmdwin_height) {    window_type = SCROLLINGWIN;    ysize = editor_cmdwin_height;  }  destroy_window(fd);                                  //min x  fd = create_window (win_name, window_type, x_pos, y_pos, xsize, ysize, MSG_AREA_TOP_LEFT_X,    window_width,                //max x    menu_box.bottom (),          //min y    MSG_AREA_TOP_LEFT_Y,         //max_y    TRUE,                        //mouse DOWN    FALSE, FALSE, TRUE);         //key press  vdc_extent (fd, 0, 0, xsize, ysize);  plot(); }/********************************************************************** * COMMAND_WINDOW::prompt() * * COMMAND_WINDOW Prompt for and read a response **********************************************************************/BOOL8 COMMAND_WINDOW::prompt(                      //Prompt user                             const char *msg_str,  //Prompt message                             char *response_str    //Response & Default                            ) {  BOOL8 ok;  ok = internal_prompt (msg_str, response_str);  plot();   return ok;}/********************************************************************** * COMMAND_WINDOW::replace_menu_text() * * COMMAND_WINDOW Change the label of a specified menu item **********************************************************************/void COMMAND_WINDOW::replace_menu_text(                       //for this item                                       LEAF_MENU_NODE *menu_item,                                       const char *new_label  //New label                                      ) {  menu_item->new_label (new_label);  menu_item->plot (fd);}/********************************************************************** * COMMAND_WINDOW::set_toggle() * * COMMAND_WINDOW Change the value of a specified menu item **********************************************************************/void COMMAND_WINDOW::set_toggle(  //for this item                                TOGGLE_MENU_LEAF *menu_item,                                BOOL8 new_value) {  menu_item->set_toggle (new_value);  menu_item->plot (fd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -