windows - 如何创建对话框以在 Fortran 中收集用户输入

标签 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

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

最佳答案

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

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

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

关于windows - 如何创建对话框以在 Fortran 中收集用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891040/

相关文章:

linux - 从 linux 到 windows 的远程命令

node.js - 在 Windows Node.js 中使用 unix 文件行为

c++ - GetLogicalDriveStrings,为什么是字符串列表

linux - makefile 编译 - make : Nothing to be done for 'all'

python - Cython中类似于Fortran的数组切片

c++ - 如何通过TCP接收多个文件并在C++中同时保存它们?

windows - 使用 Docker 在 Windows 上安装 gitlab

windows - 如何在Windows中组合GUI应用程序

c++ - 有没有办法处理 "delay"WM_ACTIVATE/WM_ACTIVATEAPP 消息?

fortran - Fortran 中的用户定义运算符