Как создать диалоговое окно для сбора пользовательского ввода в Fortran - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь создать код на Фортране, показывающий какое-то диалоговое окно для сред 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

Но я не знаю, как создать диалоговое окно для сбора пользовательского ввода (например, числа или текста), например, после прикрепленного изображения, путем вызова Win32 API (или других способов) из Fortran.

enter image description here

У кого-нибудь есть хорошая идея для этой цели? Будет очень полезно, если вы поделитесь своей мудростью (например, пример кода).

1 Ответ

2 голосов
/ 28 апреля 2019

Было бы полезно, если бы вы указали, какой компилятор Фортрана вы используете, так как некоторые включают модули определения Windows API и другие полезные элементы. Intel Visual Fortran имеет модули, а также несколько примеров, которые можно загрузить как часть Intel Parallel Studio XE для пакета примеров Windows - см. Подпапку compiler_f этого документа. Для чистых вызовов API пример Win32 \ Angle содержит диалоговое текстовое поле, из которого он читает, так что вы можете изучить его. Это должно хорошо переводиться (кроме имен модулей) в другие компиляторы. Имейте в виду, что все вызовы WinAPI являются STDCALL (для 32-разрядных систем), поэтому убедитесь, что все используемые вами интерфейсы указывают это.

Intel Fortran также предоставляет библиотеку диалоговых окон, более удобную для Fortran, которая может обрабатывать многое из того, что вам нужно. Пример Dialog \ WHIZZY иллюстрирует множество элементов управления, использующих это.

Ваш пример кода показывает только окно сообщения, которое НЕ является диалогом. Диалоговые окна требуют использования редактора ресурсов для определения диалогового окна, а затем кода для отображения диалогового окна, ожидания ввода и последующей обработки пользовательских вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...