Viktor的Fortran手记之五 IFC可视化设计(二)

5 连接变量和对话框

对话框必须连接到变量上。变量的类型是

type(dialog)

并且定义在IFLOGM.F90模块中。(CFC是定义在DIALOGM模块中)具体的连接方式如下:

use iflogm
include 'resource.fd' !默认的资源文件头
type(dialog) dlg
logical retlog
retlog = DlgInit(IDD_WINDOW, dlg)

6 使用对话框的一般过程

  1. 建立TYPE(dialog)型变量,并调用DlgInitDlgInitWithResourceHandle函数连接对话框。
  2. DlgSet等手段,赋予控件初始值。
  3. 使用DlgSetSub函数,规定控件响应回调程序。
  4. 显示对话框。模态可用DlgModal,无模态情况下用DlgModeless函数调用,并在消息处理例程中增加DLGISDLGMESSAGE事件。
  5. DlgGet等手段取用控件值。
  6. DlgUninit释放对话框。(必要!)

7 Edit和Static

这些都是最普通的控件,使用时,没有必要附加属性指定,因为得以存取的,无非是字串(对应字串型)。DlgGet与DlgSet是重载函数。如果用逻辑型变量存取,修改的是Enabled属性。IFC Documentation给出了一个内部读写的例子,插在事件处理回调程序中:

!无关定义等略

character(256) text !按Viktor的习惯还是写character(len=256)好
logical retlog

select case (control_name)
    case (IDC_EDIT_CELSIUS)
        retlog = DlgGet(dlg, IDC_EDIT_CELSIUS, text) !将Edit内容装入text中
        read (text, *, iostat = retint) cel !所谓“内部读取”,其实是数据转化过程
        if (retint .eq. 0) then !成功,以免没有读到正确的值
            far = (cel - 0.0) * (212.0 - 32) / 100.0 + 32.0 !为什么不化简?
            write (text, *) far !内部输出。不用判断了。
            retlog = DlgSet(dlg, IDC_EDIT_FAR, trim(adjustl(text))) !左对齐好看
        end if
    !下略
end select case