如何在Fortran中创建一个对话框来收集用户输入

时间:2019-04-28 14:04:50

标签: windows winapi fortran

我试图制作一个Fortran代码,以显示一些Windows环境的对话框。例如,我成功制作了一个简单的“确定/取消”对话框,如下所示。

PROGRAM test_dialog
!
    implicit none
!
    write(*,*) OKCancelDialog( "Continue?"//achar(0), "Test dialog"//achar(0) )
!
CONTAINS
!
    FUNCTION OkCancelDialog( message, dlg_title ) RESULT( res )
!
        use ifwin
!
        implicit none
!
        character( len = * ), intent( in ) :: message
        character( len = * ), intent( in ) :: dlg_title
        integer                            :: res
!
        integer( SINT )                    :: ret
!
        ret = MessageBox( GetForegroundWindow(), message, dlg_title, MB_ICONQUESTION + MB_OKCANCEL )
!
        res = 0
        select case( ret )
            case( IDOK )
                res = 1
            case( IDCANCEL )
                res = 0
            case default
                res = 0
        end select
!
    END FUNCTION OkCancelDialog
!
END PROGRAM test_dialog

但是,我不知道如何通过从Fortran调用Win32 API(或其他方式)来创建一个对话框来收集用户输入(例如,数字或文本),例如后面的​​图像。

enter image description here

有人为此目的有个好主意吗?如果您分享一些智慧(例如示例代码),将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您指定使用的是哪个Fortran编译器,将会有所帮助,因为其中有些包括Windows API定义模块和其他有用的项目。英特尔Visual Fortran具有模块和大量示例,可以作为Intel Parallel Studio XE for Windows Samples Bundle的一部分下载-请参阅该程序的editor_f子文件夹。对于纯API调用,Win32 \ Angle示例包含一个读取对话框的文本框,因此您可以进行研究。这应该很好地(除了模块名称)转换为其他编译器。请记住,WinAPI调用全部都是STDCALL(在32位上),因此请确保使用的接口都指定了这一点。

英特尔®Fortran还提供了一个对Fortran更友好的对话框库,可以处理您需要的许多内容。 Dialog \ WHIZZY示例说明了使用此控件的许多控件。

您的示例代码仅显示一个消息框,而不是一个对话框。对话框要求使用资源编辑器定义对话框,然后使用代码显示对话框窗口,等待输入,然后处理用户的选择。

答案 1 :(得分:0)

在C语言中,tinyfiledialogs提供了许多模态跨平台对话框和弹出通知(用于图形和控制台模式)。我是作者。它包括一个如何从fortran调用此C代码的示例。