请教,输入输出黑色视窗不出现的原因
请教:在给从前写的fortran加了一个对话框截面后,原来程序运行时闪出来的输入输出黑色视窗(就是我们常用来测试软件安装是否成功时写“hi world!”出现的视窗)不再出现了,程序也不往下走了,这是缺少什么语句? 请给出以下信息:1. 你使用什么操作系统,使用什么编译器?
2. 选择的什么类型的工程?(Console / QuickWin / Win32 APP )
3. 给出必要代码或截图 win10系统,用的是vs fortran+winteracter
Console
代码贴进来不会 Module Global
Use Winteracter !// 使用 Winteracter
Use Resid !// 使用 Resid 资源ID
Implicit None
End Module Global
!
PROGRAM dushu
Use Global
Implicit None
! 参数定义
TYPE(WIN_MESSAGE):: MESSAGE
LOGICAL :: QUIT=.FALSE.
INTEGER :: ITYPE,I,J,ijk
! 需要通过界面对话框读入下面的数据
INTEGER :: NVC,NPC,NJQ,NN ! 竖曲线个数,平曲线个数,禁区个数
REAL :: LSTART,LEND ! 起始里程,结束里程,最好涵盖所要的范围;
REAL :: CHPL(105) ! 竖曲线的变坡点里程(NVC)
REAL :: CHPR(105) ! 竖曲线的变坡点半径(NVC)
REAL :: CHPI(106) ! 竖曲线的各段坡度 (NVC+1)
REAL :: XYZ0(3) ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
REAL :: NALF ! 平曲线第一段导线方位角
REAL :: JD(51) ! 导线长度累计,与曲线个数对应(NPC+1)
REAL :: PR(50) ! 平曲线半径(NPC)
REAL :: ALF(50) ! 导线相对前一导线的偏角,逆时针为正(NPC)
REAL :: LS(50) ! 平曲线的缓和曲线长(NPC)
REAL :: XXT(66),XDT(66) ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
REAL :: X(40000),Y(40000) ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
!
CALL WInitialise() ! 初始化窗口
CALL WindowOpen(HideWindow) ! 此演示不需要根窗口,因此要隐藏它
!开始窗口程序(用于替代原输入数据部分)
CALL WDialogLoad(IDD_DIALOG001)
CALL WDialogShow(itype=Modeless)
!
ijk=0
!****************************************************
DO WHILE(.NOT.QUIT)
CALL WMessage(ITYPE,MESSAGE)
SELECT CASE (ITYPE)
CASE (PushButton)
SELECT CASE (MESSAGE%VALUE1)
CASE (IDOK)
CALL WDialogGetInteger(IDF_INTEGER1,NVC)!获取输入的数据NVC
CALL WDialogGetInteger(IDF_INTEGER2,NPC)!获取输入的数据NPC
CALL WDialogGetInteger(IDF_INTEGER3,NJQ)!获取输入的数据NJQ
CALL WDialogGetInteger(IDF_INTEGER4,NN) !获取输入的数据NJQ
CALL WDialogGetReal(IDF_REAL1,LSTART) !获取输入的数据LSTART
CALL WDialogGetReal(IDF_REAL2,LEND) !获取输入的数据LEND
CALL WDialogGetReal(IDF_REAL3,XYZ0(1)) !获取输入的数据XYZ0(1)
CALL WDialogGetReal(IDF_REAL4,XYZ0(2)) !获取输入的数据XYZ0(2)
CALL WDialogGetReal(IDF_REAL5,XYZ0(3)) !获取输入的数据XYZ0(3)
CALL WDialogGetReal(IDF_REAL6,NALF) !获取输入的数据NALF
CALL WGridRows(IDF_GRID1,NVC+1) !根据NVC确定表行数
CALL WGridRows(IDF_GRID2,NPC+1) !根据NPC确定表行数
CALL WGridRows(IDF_GRID3,NJQ) !根据NJQ确定表行数
CALL WGridRows(IDF_GRID4,NN) !根据NJQ确定表行数
if(ijk.eq.0)then
do i=1,NVC
CALL WGridGetCellReal(IDF_GRID1,2,i,CHPL(i))!获取输入的数据CHPL()
CALL WGridGetCellReal(IDF_GRID1,3,i,CHPR(i))!获取输入的数据CHPR()
end do
do i=1,NVC+1
CALL WGridGetCellReal(IDF_GRID1,4,i,CHPI(i))!获取输入的数据CHPI()
end do
do i=1,NPC
CALL WGridGetCellReal(IDF_GRID2,3,i,PR(i)) !获取输入的数据PR()
CALL WGridGetCellReal(IDF_GRID2,4,i,ALF(i)) !获取输入的数据ALF()
CALL WGridGetCellReal(IDF_GRID2,5,i,LS(i)) !获取输入的数据LS()
end do
do i=1,NPC+1
CALL WGridGetCellReal(IDF_GRID2,2,i,JD(i)) !获取输入的数据JD()
end do
endif
if(ijk.eq.1)then
do i=1,NJQ
CALL WGridGetCellReal(IDF_GRID3,2,i,XXT(i)) !获取输入的数据XXT()
CALL WGridGetCellReal(IDF_GRID3,3,i,XDT(i)) !获取输入的数据XDT()
end do
endif
if(ijk.eq.1)then
do i=1,NN
CALL WGridGetCellReal(IDF_GRID4,1,i,X(i)) !获取输入的数据X()
CALL WGridGetCellReal(IDF_GRID4,2,i,Y(i)) !获取输入的数据Y()
end do
endif
QUIT=.FALSE.
CASE (IDCANCEL)
QUIT=.TRUE.
END SELECT
END SELECT
END DO
!****************************************************
CALL WindowClose()
!
! 打开输出文件以验证读入数据的正确性
! OPEN(3,FILE='FXX.SCR',STATUS='UNKNOWN')
!
WRITE(*,555)"AAA"
WRITE(*,774) NVC,NPC,NJQ,NN ! 竖曲线个数,平曲线个数
WRITE(*,772) LSTART,LEND ! 起始里程,结束里程,最好涵盖所要的范围;
WRITE(*,773) XYZ0(1),XYZ0(2),XYZ0(3) ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
WRITE(*,666) NALF ! 平曲线第一段导线方位角
WRITE(*,555)"BBB"
DO I=1,NVC,1
WRITE(*,772) CHPL(I),CHPR(I) ! 竖曲线的变坡点里程(NVC)
end do
WRITE(*,555)"CCC"
DO I=1,NVC+1,1
WRITE(*,666) CHPI(I) ! 竖曲线的各段坡度 (NVC+1)
end do
WRITE(*,555)"DDD"
DO J=1,NPC,1
WRITE(*,773) PR(J),ALF(J),LS(J) ! 平曲线半径(NPC)
end do
WRITE(*,555)"EEE"
DO J=1,NPC+1,1
WRITE(*,666) JD(J) ! 导线长度累计,与曲线个数对应(NPC)
end do
WRITE(*,555)"FFF"
DO J=1,NJQ,1
WRITE(*,772) XXT(J),XDT(J) ! 禁区小里程(NJQ)
end do
WRITE(*,555)"GGG"
DO I=1,NN
WRITE(*,772) X(I),Y(I) ! 地面线点X()
end do
!
! CLOSE(3) ! 关闭文件
!
555 FORMAT(10A)
666 FORMAT(SP,F13.4)
772 FORMAT(SP,2F13.4)
773 FORMAT(SP,3F13.4)
774 FORMAT(SP,4I4)
STOP
!
END PROGRAM dushu 本帖最后由 楚香饭 于 2024-12-7 17:52 编辑
37行有一个 Do While(.NOT.QUIT)
无限循环,只有当 QUIT 为 真,退出这个无限循环(消息循环)之后,后面的代码才会被执行。
如果你用了 winteracter 做了图形用户界面,通常需要把命令行的代码修改后,放在某个消息(例如点击某按钮)的处理过程中。
而不是放在退出消息循环之后,因为退出主消息循环,往往意味着图形用户界面就结束了。
如果你是看的本站的教程,那么会建议你新建工程时选择 Windows Application。但这会导致 Console 命令行界面不再出现。
这适合于代码完全采用图形用户界面,没有任何Console输入输出的程序。
但你的程序中,使用了部分图形用户界面,也同时使用了Console的输入输出交互。如果你希望保留Console命令行界面,请创建工程时选择Console工程类型。
页:
[1]