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)
include 'resource.fd' !默认的资源文件头
type(dialog) dlg
logical retlog
retlog = DlgInit(IDD_WINDOW, dlg)
6 使用对话框的一般过程
- 建立TYPE(dialog)型变量,并调用DlgInit或DlgInitWithResourceHandle函数连接对话框。
- 用DlgSet等手段,赋予控件初始值。
- 使用DlgSetSub函数,规定控件响应回调程序。
- 显示对话框。模态可用DlgModal,无模态情况下用DlgModeless函数调用,并在消息处理例程中增加DLGISDLGMESSAGE事件。
- 用DlgGet等手段取用控件值。
- 用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
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
Viktor的Fortran手记之四 IFC可视化设计(一)
呵呵……原来在日文版的浏览器下FCKEditor也会变日文版的……很好很强大……
下列内容根据Intel(R) Visual Fortran Compiler Documentation编译。
1 控件类型支持
除ActiveX外,Intel Visual Fortran Compiler(以下简称IFC)支持十五种控件:
- Button
- Check box
- Combo box
- Edit box
- Group box
- List box
- Picture
- Progress bar
- Radio button
- Scroll bar (horizonal)
- Scroll bar (vertical)
- Slider
- Spin control
- Static text
- Tab control
2 控件值的取用: DLGGET()
注意,该东西是个函数,返回逻辑型(.true.对应“成功”,.false.对应“成仁”)。需要什么,应该写成参数。写法是
逻辑值 = DlgGet(对话框变量, 控件ID, 存放值的变量, 需要的值的名称)
比如
retlog = DlgGet(dlg, IDC_SCROLLBAR_TEMPERATURE, slidepos, DLG_POSITION)
需要注意的是,读EDIT控件只能读字符串,存到字符串(一般可用txt之类的名字)中。需要数值时再用read读数值:
double precision :: tol
...
retlog = DlgGet(dlg, IDC_EDIT_TOL, text)
!因为Edit的默认属性就是框里的内容
read (text, *) tol
...
retlog = DlgGet(dlg, IDC_EDIT_TOL, text)
!因为Edit的默认属性就是框里的内容
read (text, *) tol
3 将H文件转化为FD文件
IFC提供DEFTOFD程序。是不是自动的,没试,不敢说。
4 主程序要求
必须
use iflogm
也必须包含.fd文件,如
include 'resource.fd'