我正在尝试显示来自不同显示文件的窗口。即使提供了RMVWDW之后,新窗口仍会与前一个窗口重叠。从多个显示文件中显示窗口时,RMVWDW是否可以工作?从不同的显示文件显示窗口时,显示新窗口时删除上一个窗口的解决方案是什么?
因此,在没有更好地描述问题的情况下,让我尝试描述正在发生的事情。我写了一些最小的程序来提供帮助。
首先,我们有一个仅包含全屏记录的显示文件和一个窗口。该窗口将覆盖全屏记录。
DSPF1
A R RECORD1
A 3 19'Base display record'
A 20 18'Base Display Record'
A R W01 WINDOW(7 15 10 50)
A 5 14'Window in DSPF1'
Run Code Online (Sandbox Code Playgroud)
相关程序PGM1
**free
dcl-f dspf1 workstn;
dcl-pr pgm2 ExtPgm('PGM2');
end-pr;
write record1;
exfmt w01;
pgm2();
*inlr = *On;
return;
Run Code Online (Sandbox Code Playgroud)
同时显示record1和w01,并等待按下命令键。注意显示屏上的两个记录。
用户按下Enter键,并调用PGM2。以下是显示文件和程序的源。注意显示文件源中的ASSUME关键字。这样可以防止打开该显示文件时从显示中删除以前的显示文件。
DSPF2
A R W02 WINDOW(9 20 10 50)
A RMVWDW
A 5 14'Window 1 from DSPF2'
A R W03 WINDOW(4 5 10 50)
A RMVWDW
A 5 14'Window 2 from DSPF2'
A R DUMMY ASSUME
A OVERLAY
A 1 2' '
Run Code Online (Sandbox Code Playgroud)
DSPF2的程序是PGM2。
**free
dcl-f dspf2 workstn ignore(dummy);
exfmt w02;
exfmt w03;
*inlr = *On;
return;
Run Code Online (Sandbox Code Playgroud)
这将显示DSPF2中的第一个窗口,等待命令键按下,然后从DSPF2中删除第一个窗口,并显示DSPF2中的第二个窗口。
当您按Enter键时,您将获得:
再次输入以结束两个程序。
请注意,PGM2不会删除DSPF1中的窗口。当DSPF2打开时,ASSUME关键字可使显示保持与PGM1无关。DSPF2处于活动状态时,DSPF1被挂起,因此,除非您从DSPF2省略了ASSUME关键字,否则您不能在DSPF2处于活动状态时删除该窗口。但是,如果省略ASSUME关键字,则在打开DSPF2时会删除整个显示。
我想如果您在调用程序2之前重新编写了没有窗口的屏幕,则可以从DSPF1中删除该窗口,但是您必须DFRWRT(*NO)在DSPF1上进行设置,否则写入操作不足以更新屏幕。