我试图制作一个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(或其他方式)来创建一个对话框来收集用户输入(例如,数字或文本),例如后面的图像。
有人为此目的有个好主意吗?如果您分享一些智慧(例如示例代码),将不胜感激。
答案 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代码的示例。