DIALOG2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST13TOP
*&---------------------------------------------------------------------*
DATA GV_INPUT01 TYPE C LENGTH 10 VALUE '初始值'.
DATA GV_INPUT02 TYPE C LENGTH 10.
DATA GV_INPUT03 TYPE N LENGTH 10 VALUE '196'.
DATA GV_INPUT04 TYPE C LENGTH 10 .

DATA GV_SCHOOL TYPE ZBC_XSY_SCHOOL-ZSCHOOL.

DATA ICON01 TYPE C LENGTH 10 ."VALUE '@01@图标'.

DATA GV_WERKS TYPE MARD-WERKS.
DATA GV_LGORT TYPE MARD-LGORT.
DATA GV_MATNR TYPE MARD-MATNR.

*点选按钮  选择复制为x,不选为空
DATA GV_RB01 TYPE C LENGTH 1.
DATA GV_RB02 TYPE C LENGTH 1.
DATA GV_RB03 TYPE C LENGTH 1.

*复选按钮  选中赋值为x,不选为空
DATA GV_CHECK TYPE C LENGTH 1.

DATA GV_0130 TYPE C LENGTH 10.

*按钮
DATA GT_STATUS TYPE TABLE OF SY-UCOMM WITH HEADER LINE .
DATA GV_TITLE TYPE C LENGTH 4.


* TABLE CTRL 显示用内表
*DATA GT_SCHOOL TYPE TABLE OF ZBC_XSY_SCHOOL.
*DATA GS_SCHOOL TYPE ZBC_XSY_SCHOOL.

TYPES: BEGIN OF GTY_SCHOOL,
         SEQ TYPE I.
       INCLUDE STRUCTURE ZBC_XSY_SCHOOL.
TYPES: END OF GTY_SCHOOL.

DATA GT_SCHOOL TYPE TABLE OF GTY_SCHOOL.
DATA GS_SCHOOL TYPE GTY_SCHOOL.

*向导自动创建分页签代码  -BEGIN
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_CTRL'
CONSTANTS: BEGIN OF C_TS_CTRL,
             TAB1 LIKE SY-UCOMM VALUE 'TS_CTRL_FC1',
             TAB2 LIKE SY-UCOMM VALUE 'TS_CTRL_FC2',
             TAB3 LIKE SY-UCOMM VALUE 'TS_CTRL_FC3',
             TAB4 LIKE SY-UCOMM VALUE 'TS_CTRL_FC4',
           END OF C_TS_CTRL.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_CTRL'
CONTROLS:  TS_CTRL TYPE TABSTRIP.
DATA:      BEGIN OF G_TS_CTRL,
             SUBSCREEN   LIKE SY-DYNNR,  "界面编号
             PROG        LIKE SY-REPID VALUE 'ZTS_XSY_TEST13',
             PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_CTRL-TAB1,
           END OF G_TS_CTRL.
DATA:      OK_CODE LIKE SY-UCOMM.
*向导自动创建分页签代码  -END



*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_CTRL_0120'
CONSTANTS: BEGIN OF C_TS_CTRL_0120,
             TAB1 LIKE SY-UCOMM VALUE 'TS_CTRL_0120_FC1',
             TAB2 LIKE SY-UCOMM VALUE 'TS_CTRL_0120_FC2',
           END OF C_TS_CTRL_0120.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_CTRL_0120'
CONTROLS:  TS_CTRL_0120 TYPE TABSTRIP.
DATA:      BEGIN OF G_TS_CTRL_0120,
             SUBSCREEN   LIKE SY-DYNNR,
             PROG        LIKE SY-REPID VALUE 'ZTS_XSY_TEST13',
             PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_CTRL_0120-TAB1,
           END OF G_TS_CTRL_0120.



*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL' ITSELF
CONTROLS: TC_CTRL TYPE TABLEVIEW USING SCREEN 0110.

*&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL'
DATA:     G_TC_CTRL_LINES  LIKE SY-LOOPC.
*&---------------------------------------------------------------------*
*&      Module  SET_VALUES  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_values OUTPUT.
*  GV_INPUT01 = '输入框1高亮'.
  GV_INPUT02 = '可修改'.
  GV_INPUT03 = '999'.

TYPE-POOLS ICON.
*   WRITE  ICON_GRAPHICS AS ICON TO ICON01.
*ICON01+0(4) = '显示'.
ICON01 = '@0N@图标显示'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_ELEMENTS  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_elements OUTPUT.
  IF GV_CHECK = 'X'. "显示

  ELSE.    "隐藏
    LOOP AT SCREEN.
IF
*使用SCREEN元素分组设置
  SCREEN-GROUP3 = 'SEX'.
*使用SCREEN 元素名称判断
*      IF SCREEN-NAME = 'GV_RB01' OR
*         SCREEN-NAME = 'GV_RB02' OR
*         SCREEN-NAME = 'GV_RB03' .
         SCREEN-INVISIBLE = '1'. " 0 否定  1 肯定
         SCREEN-INPUT = '0'. "设置不可输入
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  CASE G_TS_CTRL-PRESSED_TAB.  "点选了那个分页签按钮
    WHEN C_TS_CTRL-TAB1.  "点了第一个
          GV_TITLE = '新建'.
    WHEN C_TS_CTRL-TAB2.    "点了第二个
       GV_TITLE = '修改'.
    WHEN C_TS_CTRL-TAB3.   "点了第三个
       GV_TITLE = '显示'.
    WHEN C_TS_CTRL-TAB4.   "点了第个
       GV_TITLE = '新增加的分页签'.
*          GT_STATUS = 'SAVE'.
*          APPEND GT_STATUS.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.

  SET PF-STATUS '0100' EXCLUDING GT_STATUS.
  SET TITLEBAR '0100' WITH GV_TITLE.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_SET OUTPUT.
 TS_CTRL-ACTIVETAB = G_TS_CTRL-PRESSED_TAB. "已激活的分页签:默认为第一个分页签
  CASE G_TS_CTRL-PRESSED_TAB.  "点选了那个分页签按钮
    WHEN C_TS_CTRL-TAB1.  "点了第一个
      G_TS_CTRL-SUBSCREEN = '0110'.   "屏幕编号0110
    WHEN C_TS_CTRL-TAB2.    "点了第二个
      G_TS_CTRL-SUBSCREEN = '0120'.    "屏幕编号0120
    WHEN C_TS_CTRL-TAB3.   "点了第三个
      G_TS_CTRL-SUBSCREEN = '0130'.     "屏幕编号0130
    WHEN C_TS_CTRL-TAB4.   "点了第个
      G_TS_CTRL-SUBSCREEN = '0140'.     "屏幕编号0140
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_SET OUTPUT.
  TS_CTRL_0120-ACTIVETAB = G_TS_CTRL_0120-PRESSED_TAB.
  CASE G_TS_CTRL_0120-PRESSED_TAB.
    WHEN C_TS_CTRL_0120-TAB1.
      G_TS_CTRL_0120-SUBSCREEN = '0121'.
    WHEN C_TS_CTRL_0120-TAB2.
      G_TS_CTRL_0120-SUBSCREEN = '0122'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_VALUE  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_value OUTPUT.
  GV_0130 = 'DISPLAY!'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0110  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE status_0110 OUTPUT.
*  SET PF-STATUS '0110'.
**  SET TITLEBAR 'xxx'.
*ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0130  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE status_0130 OUTPUT.
*  SET PF-STATUS '0110'.
**  SET TITLEBAR 'xxx'.
*ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_CTRL_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_SCHOOL LINES TC_CTRL-lines.
*  DESCRIBE TABLE GT_SCHOOL OCCURS GV_LINES.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_CTRL_GET_LINES OUTPUT.
  G_TC_CTRL_LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_TABLE_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_table_data OUTPUT.
  DATA GV_SEQ TYPE I.
  SELECT *
    FROM ZBC_XSY_SCHOOL
    INTO CORRESPONDING FIELDS OF TABLE GT_SCHOOL
    UP TO 5 ROWS.

   CLEAR GV_SEQ.
   LOOP AT GT_SCHOOL INTO GS_SCHOOL.
     GV_SEQ = GV_SEQ + 1.
     GS_SCHOOL-SEQ = GV_SEQ.
     MODIFY GT_SCHOOL FROM GS_SCHOOL.
   ENDLOOP.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE SY-UCOMM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN  'SAVE'.
      PERFORM SAVE_LIST.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  CHECK_SCHOOL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE check_school INPUT.
 DATA LS_SCHOOL TYPE ZBC_XSY_SCHOOL.
 IF GV_SCHOOL IS INITIAL.
   MESSAGE E000 WITH '必须输入学校代码'.
 ELSE.
   SELECT SINGLE *
     FROM ZBC_XSY_SCHOOL
     INTO CORRESPONDING FIELDS OF LS_SCHOOL
     WHERE ZSCHOOL = GV_SCHOOL.
     IF SY-SUBRC = 0.
       MESSAGE S000 WITH '学校代码存在!'.
     ELSE.
       MESSAGE E000 WITH '学校代码不存在!'.
     ENDIF.
 ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CHECK_MARD  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE check_mard INPUT.
*  DATA LS_MARD TYPE MARD.
*
**补前导零
**  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
**    EXPORTING
**      input         = GV_MATNR
**   IMPORTING
**     OUTPUT        = GV_MATNR
*            .
**表ZSTUDENT_01
*
*   SELECT SINGLE WERKS LGORT MATNR
*     FROM MARD
*     INTO CORRESPONDING FIELDS OF LS_MARD
*     WHERE WERKS = GV_WERKS
*     AND LGORT = GV_LGORT
*     AND MATNR = GV_MATNR.
*     IF SY-SUBRC = 0.
*       MESSAGE S000 WITH 'MARD表中存在相同数据!'.
*     ELSE.
*       SET CURSOR FIELD 'GV_MATNR'.
*       MESSAGE E000 WITH 'MARD表中不存在相同数据!'.
*     ENDIF.
*ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_SEX_VALUE  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_sex_value INPUT.
    IF GV_RB01 = 'X'.
      GV_INPUT04 = '性别为男'.
    ELSEIF GV_RB02 = 'X'.
      GV_INPUT04 = '性别为女'.
      ELSEIF GV_RB03 = 'X'.
      GV_INPUT04 = '性别保密'.
    ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT_PROGRAM  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit_program INPUT.
LEAVE PROGRAM.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_GET INPUT.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE."根据点选按钮,给全局参数赋值
    WHEN C_TS_CTRL-TAB1.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB1.
      CLEAR GT_STATUS[].
*      GT_STATUS = 'SAVE'.
*      APPEND GT_STATUS.
    WHEN C_TS_CTRL-TAB2.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB2.
    WHEN C_TS_CTRL-TAB3.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
      CLEAR GT_STATUS[].
      GT_STATUS = 'SAVE'.
      APPEND GT_STATUS.
    WHEN C_TS_CTRL-TAB4.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB4.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_GET INPUT.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE.
    WHEN C_TS_CTRL_0120-TAB1.
      G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB1.
    WHEN C_TS_CTRL_0120-TAB2.
      G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB2.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  DISPLAY_MESSAGE  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE display_message INPUT.
*   MESSAGE S000 WITH 'ENTERED'.
*ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_CTRL_USER_COMMAND INPUT.
  OK_CODE = SY-UCOMM.
  PERFORM USER_OK_TC USING    'TC_CTRL'
                              'GT_SCHOOL'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM = OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST13F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SAVE_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_list .

ENDFORM.

*----------------------------------------------------------------------*
*   INCLUDE TABLECONTROL_FORMS                                         *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  USER_OK_TC                                               *
*&---------------------------------------------------------------------*
 FORM USER_OK_TC USING    P_TC_NAME TYPE DYNFNAM
                          P_TABLE_NAME
                          P_MARK_NAME
                 CHANGING P_OK      LIKE SY-UCOMM.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA: L_OK              TYPE SY-UCOMM,
         L_OFFSET          TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

*&SPWIZARD: Table control specific operations                          *
*&SPWIZARD: evaluate TC name and operations                            *
   SEARCH P_OK FOR P_TC_NAME.
   IF SY-SUBRC <> 0.
     EXIT.
   ENDIF.
   L_OFFSET = STRLEN( P_TC_NAME ) + 1.
   L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations                 *
   CASE L_OK.
     WHEN 'INSR'.                      "insert row
       PERFORM FCODE_INSERT_ROW USING    P_TC_NAME
                                         P_TABLE_NAME.
       CLEAR P_OK.

     WHEN 'DELE'.                      "delete row
       PERFORM FCODE_DELETE_ROW USING    P_TC_NAME
                                         P_TABLE_NAME
                                         P_MARK_NAME.
       CLEAR P_OK.

     WHEN 'P--' OR                     "top of list
          'P-'  OR                     "previous page
          'P+'  OR                     "next page
          'P++'.                       "bottom of list
       PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
                                             L_OK.
       CLEAR P_OK.
*     WHEN 'L--'.                       "total left
*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
*     WHEN 'L-'.                        "column left
*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
*     WHEN 'R+'.                        "column right
*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
*     WHEN 'R++'.                       "total right
*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
     WHEN 'MARK'.                      "mark all filled lines
       PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
                                         P_TABLE_NAME
                                         P_MARK_NAME   .
       CLEAR P_OK.

     WHEN 'DMRK'.                      "demark all filled lines
       PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
                                           P_TABLE_NAME
                                           P_MARK_NAME .
       CLEAR P_OK.

*     WHEN 'SASCEND'   OR
*          'SDESCEND'.                  "sort column
*       PERFORM FCODE_SORT_TC USING P_TC_NAME
*                                   l_ok.

   ENDCASE.

 ENDFORM.                              " USER_OK_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_INSERT_ROW                                         *
*&---------------------------------------------------------------------*
 FORM fcode_insert_row
               USING    P_TC_NAME           TYPE DYNFNAM
                        P_TABLE_NAME             .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_LINES_NAME       LIKE FELD-NAME.
   DATA L_SELLINE          LIKE SY-STEPL.
   DATA L_LASTLINE         TYPE I.
   DATA L_LINE             TYPE I.
   DATA L_TABLE_NAME       LIKE FELD-NAME.
   FIELD-SYMBOLS <TC>                 TYPE CXTAB_CONTROL.
   FIELD-SYMBOLS <TABLE>              TYPE STANDARD TABLE.
   FIELD-SYMBOLS <LINES>              TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
   CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
   ASSIGN (L_LINES_NAME) TO <LINES>.

*&SPWIZARD: get current line                                           *
   GET CURSOR LINE L_SELLINE.
   IF SY-SUBRC <> 0.                   " append line to table
     L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line                                               *
     IF L_SELLINE > <LINES>.
       <TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
     ELSE.
       <TC>-TOP_LINE = 1.
     ENDIF.
   ELSE.                               " insert line into table
     L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
     L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
   ENDIF.
*&SPWIZARD: set new cursor line                                        *
   L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.

*&SPWIZARD: insert initial line                                        *
   INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
   <TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor                                                 *
   SET CURSOR LINE L_LINE.

 ENDFORM.                              " FCODE_INSERT_ROW

*&---------------------------------------------------------------------*
*&      Form  FCODE_DELETE_ROW                                         *
*&---------------------------------------------------------------------*
 FORM fcode_delete_row
               USING    P_TC_NAME           TYPE DYNFNAM
                        P_TABLE_NAME
                        P_MARK_NAME   .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_TABLE_NAME       LIKE FELD-NAME.

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.
   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
   FIELD-SYMBOLS <WA>.
   FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: delete marked lines                                        *
   DESCRIBE TABLE <TABLE> LINES <TC>-LINES.

   LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     IF <MARK_FIELD> = 'X'.
       DELETE <TABLE> INDEX SYST-TABIX.
       IF SY-SUBRC = 0.
         <TC>-LINES = <TC>-LINES - 1.
       ENDIF.
     ENDIF.
   ENDLOOP.

 ENDFORM.                              " FCODE_DELETE_ROW

*&---------------------------------------------------------------------*
*&      Form  COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*      -->P_OK       ok code
*----------------------------------------------------------------------*
 FORM COMPUTE_SCROLLING_IN_TC USING    P_TC_NAME
                                       P_OK.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_TC_NEW_TOP_LINE     TYPE I.
   DATA L_TC_NAME             LIKE FELD-NAME.
   DATA L_TC_LINES_NAME       LIKE FELD-NAME.
   DATA L_TC_FIELD_NAME       LIKE FELD-NAME.

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.
   FIELD-SYMBOLS <LINES>      TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl                              *
   CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
   ASSIGN (L_TC_LINES_NAME) TO <LINES>.


*&SPWIZARD: is no line filled?                                         *
   IF <TC>-LINES = 0.
*&SPWIZARD: yes, ...                                                   *
     L_TC_NEW_TOP_LINE = 1.
   ELSE.
*&SPWIZARD: no, ...                                                    *
     CALL FUNCTION 'SCROLLING_IN_TABLE'
          EXPORTING
               ENTRY_ACT             = <TC>-TOP_LINE
               ENTRY_FROM            = 1
               ENTRY_TO              = <TC>-LINES
               LAST_PAGE_FULL        = 'X'
               LOOPS                 = <LINES>
               OK_CODE               = P_OK
               OVERLAPPING           = 'X'
          IMPORTING
               ENTRY_NEW             = L_TC_NEW_TOP_LINE
          EXCEPTIONS
*              NO_ENTRY_OR_PAGE_ACT  = 01
*              NO_ENTRY_TO           = 02
*              NO_OK_CODE_OR_PAGE_GO = 03
               OTHERS                = 0.
   ENDIF.

*&SPWIZARD: get actual tc and column                                   *
   GET CURSOR FIELD L_TC_FIELD_NAME
              AREA  L_TC_NAME.

   IF SYST-SUBRC = 0.
     IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column                                           *
       SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
     ENDIF.
   ENDIF.

*&SPWIZARD: set the new top line                                       *
   <TC>-TOP_LINE = L_TC_NEW_TOP_LINE.


 ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
*       marks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
                               P_TABLE_NAME
                               P_MARK_NAME.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
  DATA L_TABLE_NAME       LIKE FELD-NAME.

  FIELD-SYMBOLS <TC>         TYPE cxtab_control.
  FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <WA>.
  FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: mark all filled lines                                      *
  LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     <MARK_FIELD> = 'X'.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
*       demarks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
                                 P_TABLE_NAME
                                 P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA L_TABLE_NAME       LIKE FELD-NAME.

  FIELD-SYMBOLS <TC>         TYPE cxtab_control.
  FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <WA>.
  FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: demark all filled lines                                    *
  LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     <MARK_FIELD> = SPACE.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

在这里插入图片描述

PROCESS BEFORE OUTPUT.

  MODULE status_0100. "标题和按钮
  MODULE set_elements.  "界面元素的显示与隐藏
  MODULE set_values.    "元素赋初始值


*向导自动创建分页签代码  -BEGIN
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_CTRL'
  MODULE TS_CTRL_ACTIVE_TAB_SET.
  CALL SUBSCREEN TS_CTRL_SCA
    INCLUDING G_TS_CTRL-PROG G_TS_CTRL-SUBSCREEN."调用字子界面
*向导自动创建分页签代码 -END




PROCESS AFTER INPUT.
  MODULE exit_program AT EXIT-COMMAND. "强制退出  要放在PAI第一个

*向导自动创建分页签代码  -BEGIN
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_CTRL'
  CALL SUBSCREEN TS_CTRL_SCA.
  MODULE TS_CTRL_ACTIVE_TAB_GET.
*向导自动创建分页签代码 -END


  "数据检查
  MODULE set_sex_value.  "设置性别值

*检查字段,当值或属性发生改变时,触发MODULE
*单一字段的 检查
*MODULE CHECK_SCHOOL. "不要单独使用pai module

*多个字段的检查
*MODULE CHECK_MARD.

*用于检查
  FIELD gv_school MODULE check_school ON REQUEST. "ON REQUEST:当值发生改变的时候

  CHAIN.
    FIELD gv_werks.
    FIELD gv_lgort.
    FIELD gv_matnr.
    MODULE check_mard ON CHAIN-REQUEST.
  ENDCHAIN.

  MODULE user_command_0100."按钮功能

在这里插入图片描述

*&---------------------------------------------------------------------*
*&      Module  SET_VALUES  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_values OUTPUT.
*  GV_INPUT01 = '输入框1高亮'.
  GV_INPUT02 = '可修改'.
  GV_INPUT03 = '999'.

TYPE-POOLS ICON.
*   WRITE  ICON_GRAPHICS AS ICON TO ICON01.
*ICON01+0(4) = '显示'.
ICON01 = '@0N@图标显示'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_ELEMENTS  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_elements OUTPUT.
  IF GV_CHECK = 'X'. "显示

  ELSE.    "隐藏
    LOOP AT SCREEN.
IF
*使用SCREEN元素分组设置
  SCREEN-GROUP3 = 'SEX'.
*使用SCREEN 元素名称判断
*      IF SCREEN-NAME = 'GV_RB01' OR
*         SCREEN-NAME = 'GV_RB02' OR
*         SCREEN-NAME = 'GV_RB03' .
         SCREEN-INVISIBLE = '1'. " 0 否定  1 肯定
         SCREEN-INPUT = '0'. "设置不可输入
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  CASE G_TS_CTRL-PRESSED_TAB.  "点选了那个分页签按钮
    WHEN C_TS_CTRL-TAB1.  "点了第一个
          GV_TITLE = '新建'.
    WHEN C_TS_CTRL-TAB2.    "点了第二个
       GV_TITLE = '修改'.
    WHEN C_TS_CTRL-TAB3.   "点了第三个
       GV_TITLE = '显示'.
    WHEN C_TS_CTRL-TAB4.   "点了第个
       GV_TITLE = '新增加的分页签'.
*          GT_STATUS = 'SAVE'.
*          APPEND GT_STATUS.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.

  SET PF-STATUS '0100' EXCLUDING GT_STATUS.
  SET TITLEBAR '0100' WITH GV_TITLE.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_SET OUTPUT.
 TS_CTRL-ACTIVETAB = G_TS_CTRL-PRESSED_TAB. "已激活的分页签:默认为第一个分页签
  CASE G_TS_CTRL-PRESSED_TAB.  "点选了那个分页签按钮
    WHEN C_TS_CTRL-TAB1.  "点了第一个
      G_TS_CTRL-SUBSCREEN = '0110'.   "屏幕编号0110
    WHEN C_TS_CTRL-TAB2.    "点了第二个
      G_TS_CTRL-SUBSCREEN = '0120'.    "屏幕编号0120
    WHEN C_TS_CTRL-TAB3.   "点了第三个
      G_TS_CTRL-SUBSCREEN = '0130'.     "屏幕编号0130
    WHEN C_TS_CTRL-TAB4.   "点了第个
      G_TS_CTRL-SUBSCREEN = '0140'.     "屏幕编号0140
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_SET OUTPUT.
  TS_CTRL_0120-ACTIVETAB = G_TS_CTRL_0120-PRESSED_TAB.
  CASE G_TS_CTRL_0120-PRESSED_TAB.
    WHEN C_TS_CTRL_0120-TAB1.
      G_TS_CTRL_0120-SUBSCREEN = '0121'.
    WHEN C_TS_CTRL_0120-TAB2.
      G_TS_CTRL_0120-SUBSCREEN = '0122'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_VALUE  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_value OUTPUT.
  GV_0130 = 'DISPLAY!'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0110  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE status_0110 OUTPUT.
*  SET PF-STATUS '0110'.
**  SET TITLEBAR 'xxx'.
*ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0130  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE status_0130 OUTPUT.
*  SET PF-STATUS '0110'.
**  SET TITLEBAR 'xxx'.
*ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_CTRL_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_SCHOOL LINES TC_CTRL-lines.
*  DESCRIBE TABLE GT_SCHOOL OCCURS GV_LINES.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_CTRL_GET_LINES OUTPUT.
  G_TC_CTRL_LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_TABLE_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_table_data OUTPUT.
  DATA GV_SEQ TYPE I.
  SELECT *
    FROM ZBC_XSY_SCHOOL
    INTO CORRESPONDING FIELDS OF TABLE GT_SCHOOL
    UP TO 5 ROWS.

   CLEAR GV_SEQ.
   LOOP AT GT_SCHOOL INTO GS_SCHOOL.
     GV_SEQ = GV_SEQ + 1.
     GS_SCHOOL-SEQ = GV_SEQ.
     MODIFY GT_SCHOOL FROM GS_SCHOOL.
   ENDLOOP.
ENDMODULE.

在这里插入图片描述


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE SY-UCOMM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN  'SAVE'.
      PERFORM SAVE_LIST.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  CHECK_SCHOOL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE check_school INPUT.
 DATA LS_SCHOOL TYPE ZBC_XSY_SCHOOL.
 IF GV_SCHOOL IS INITIAL.
   MESSAGE E000 WITH '必须输入学校代码'.
 ELSE.
   SELECT SINGLE *
     FROM ZBC_XSY_SCHOOL
     INTO CORRESPONDING FIELDS OF LS_SCHOOL
     WHERE ZSCHOOL = GV_SCHOOL.
     IF SY-SUBRC = 0.
       MESSAGE S000 WITH '学校代码存在!'.
     ELSE.
       MESSAGE E000 WITH '学校代码不存在!'.
     ENDIF.
 ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CHECK_MARD  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE check_mard INPUT.
*  DATA LS_MARD TYPE MARD.
*
**补前导零
**  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
**    EXPORTING
**      input         = GV_MATNR
**   IMPORTING
**     OUTPUT        = GV_MATNR
*            .
**表ZSTUDENT_01
*
*   SELECT SINGLE WERKS LGORT MATNR
*     FROM MARD
*     INTO CORRESPONDING FIELDS OF LS_MARD
*     WHERE WERKS = GV_WERKS
*     AND LGORT = GV_LGORT
*     AND MATNR = GV_MATNR.
*     IF SY-SUBRC = 0.
*       MESSAGE S000 WITH 'MARD表中存在相同数据!'.
*     ELSE.
*       SET CURSOR FIELD 'GV_MATNR'.
*       MESSAGE E000 WITH 'MARD表中不存在相同数据!'.
*     ENDIF.
*ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_SEX_VALUE  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_sex_value INPUT.
    IF GV_RB01 = 'X'.
      GV_INPUT04 = '性别为男'.
    ELSEIF GV_RB02 = 'X'.
      GV_INPUT04 = '性别为女'.
      ELSEIF GV_RB03 = 'X'.
      GV_INPUT04 = '性别保密'.
    ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT_PROGRAM  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit_program INPUT.
LEAVE PROGRAM.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_GET INPUT.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE."根据点选按钮,给全局参数赋值
    WHEN C_TS_CTRL-TAB1.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB1.
      CLEAR GT_STATUS[].
*      GT_STATUS = 'SAVE'.
*      APPEND GT_STATUS.
    WHEN C_TS_CTRL-TAB2.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB2.
    WHEN C_TS_CTRL-TAB3.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
      CLEAR GT_STATUS[].
      GT_STATUS = 'SAVE'.
      APPEND GT_STATUS.
    WHEN C_TS_CTRL-TAB4.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB4.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_GET INPUT.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE.
    WHEN C_TS_CTRL_0120-TAB1.
      G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB1.
    WHEN C_TS_CTRL_0120-TAB2.
      G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB2.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  DISPLAY_MESSAGE  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*MODULE display_message INPUT.
*   MESSAGE S000 WITH 'ENTERED'.
*ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_CTRL_USER_COMMAND INPUT.
  OK_CODE = SY-UCOMM.
  PERFORM USER_OK_TC USING    'TC_CTRL'
                              'GT_SCHOOL'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM = OK_CODE.
ENDMODULE.

在这里插入图片描述

PROCESS BEFORE OUTPUT.
MODULE GET_TABLE_DATA.

*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_CTRL'
  MODULE TC_CTRL_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_COL_ATTR.
  LOOP AT   GT_SCHOOL
       INTO GS_SCHOOL
       WITH CONTROL TC_CTRL
       CURSOR TC_CTRL-CURRENT_LINE.
    MODULE TC_CTRL_GET_LINES.
*&SPWIZARD:   MODULE TC_CTRL_CHANGE_FIELD_ATTR
  ENDLOOP.

 MODULE STATUS_0110.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_CTRL'
  LOOP AT GT_SCHOOL.
    CHAIN.
      FIELD GS_SCHOOL-SEQ.
      FIELD GS_SCHOOL-ZSCHOOL.
      FIELD GS_SCHOOL-ZSNAME.
      FIELD GS_SCHOOL-ZADD.
    endchain.
  ENDLOOP.
  MODULE TC_CTRL_USER_COMMAND.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_COL_ATTR.

* MODULE USER_COMMAND_0110.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MFC中,CFormView类可以通过资源ID来关联一个对话框模板,也可以通过代码动态创建一个对话框。当CFormView对象被创建时,它会自动调用Create函数,该函数会根据资源ID或代码动态创建一个对话框,并将其作为CFormView的子窗口。 如果你想更换已经加载好的dialog,可以先在资源编辑器中创建一个新的对话框模板,然后在CFormView的派生类中添加一个成员变量来保存对话框的指针。在需要更换对话框的地方,调用DestroyWindow函数销毁当前的对话框,然后调用Create函数创建新的对话框,并将其作为CFormView的子窗口。 举个例子,如果我们在CFormView的派生类中需要更换一个名为MyDialog2的对话框,可以使用以下代码: 复制 void CMyFormView::OnButtonClicked() { // 销毁当前的对话框 GetDlgItem(IDC_DIALOG)->DestroyWindow(); // 创建一个 MyDialog2 对话框 CMyDialog2* pDlg = new CMyDialog2(); pDlg->Create(IDD_MY_DIALOG2, this); // 将 MyDialog2 对话框作为子窗口添加到 CFormView 中 pDlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); } 在这个例子中,我们在OnButtonClicked函数中先调用DestroyWindow函数销毁当前的对话框,然后动态创建一个名为pDlg的CMyDialog2对象,并调用Create函数创建MyDialog2对话框。最后,我们调用SetWindowPos函数将MyDialog2对话框作为子窗口添加到CFormView中,并设置其显示位置和大小。这样,就完成了更换对话框的操作。
06-11
你的回答是正确的,但是我注意到你在回答时把之前我的回答中的一些内容也包含了进去,导致回答有些混乱。下面是你回答中的部分内容和一些修改建议: 在MFC中,`CFormView` 类可以通过资源 ID 来关联一个对话框模板,也可以通过代码动态创建一个对话框。当 `CFormView` 对象被创建时,它会自动调用 `Create` 函数,该函数会根据资源 ID 或代码动态创建一个对话框,并将其作为 `CFormView` 的子窗口。 如果你想更换已经加载好的对话框,可以先在资源编辑器中创建一个新的对话框模板,然后在 `CFormView` 的派生类中添加一个成员变量来保存对话框的指针。在需要更换对话框的地方,调用 `DestroyWindow` 函数销毁当前的对话框,然后调用 `Create` 函数创建新的对话框,并将其作为 `CFormView` 的子窗口。 举个例子,如果我们在 `CFormView` 的派生类中需要更换一个名为 `MyDialog2` 的对话框,可以使用以下代码: ```c++ void CMyFormView::OnButtonClicked() { // 销毁当前的对话框 GetDlgItem(IDC_DIALOG)->DestroyWindow(); // 创建一个 MyDialog2 对话框 CMyDialog2* pDlg = new CMyDialog2(); pDlg->Create(IDD_MY_DIALOG2, this); // 将 MyDialog2 对话框作为子窗口添加到 CFormView 中 pDlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); } ``` 在这个例子中,我们在 `OnButtonClicked` 函数中先调用 `DestroyWindow` 函数销毁当前的对话框,然后动态创建一个名为 `pDlg` 的 `CMyDialog2` 对象,并调用 `Create` 函数创建 `MyDialog2` 对话框。最后,我们调用 `SetWindowPos` 函数将 `MyDialog2` 对话框作为子窗口添加到 `CFormView` 中,并设置其显示位置和大小。这样,就完成了更换对话框的操作。 建议在回答时,先仔细阅读问题和之前的回答,避免重复或混淆的情况发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值