主题:Visual Fortran 中提取lParam的类型数据方法
在fotran API编程时,常需在WM_NIFITYF分支中提取lParam参数,其整数指针往往是一个数据结构,而C++有强制类型转换,在Fortan中似乎找不到,本人采用了如下一种技巧,供分享,希望有高人提供更快捷的方法(该例子为操作一列表视图控件的部分):
type(T_NMHDR),pointer ::pHeader!注意消息的信息
type(T_NMHDR),target ::tHeader !注意消息的信息
pointer(lP,tHeader)
***********
!*****实用堰*****
case(IDC_LPW)
lP = lParam
pHeader=>tHeader
if(pHeader%code==NM_CLICK) then
iSelect = SendMessage(hWndList1,LVM_GETNEXTITEM,-1,LVNI_FOCUSED) ! 返回选择项
IF(iSelect==-1) THEN !无选择项
! i=MessageBox(ghWndMain,"无列表视图选项!","错误",MB_OK.OR.MB_ICONINFORMATION)
ParaDialogProc=0
RETURN
ENDIF
flag = 1 !设置flag以便我们知道有项目选中
LvItem.mask=LVIF_TEXT;
LvItem.iSubItem=0;
LvItem.pszText=loc(Text);
LvItem.cchTextMax=256;
LvItem.iItem=iSelect;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem)) !获取Text
i=SetDlgItemText(hDlg,IDC_EPWSTY,trim(Text))
!
LvItem.iSubItem=1;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
i=SetDlgItemText(hDlg,IDC_EPWNZ,trim(Text))
!
LvItem.iSubItem=2;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWB0Z,trim(Text))
!
LvItem.iSubItem=3;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWM,trim(Text))
!
LvItem.iSubItem=4;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWYAN,trim(Text))
endif
ParaDialogProc=1
RETURN
type(T_NMHDR),pointer ::pHeader!注意消息的信息
type(T_NMHDR),target ::tHeader !注意消息的信息
pointer(lP,tHeader)
***********
!*****实用堰*****
case(IDC_LPW)
lP = lParam
pHeader=>tHeader
if(pHeader%code==NM_CLICK) then
iSelect = SendMessage(hWndList1,LVM_GETNEXTITEM,-1,LVNI_FOCUSED) ! 返回选择项
IF(iSelect==-1) THEN !无选择项
! i=MessageBox(ghWndMain,"无列表视图选项!","错误",MB_OK.OR.MB_ICONINFORMATION)
ParaDialogProc=0
RETURN
ENDIF
flag = 1 !设置flag以便我们知道有项目选中
LvItem.mask=LVIF_TEXT;
LvItem.iSubItem=0;
LvItem.pszText=loc(Text);
LvItem.cchTextMax=256;
LvItem.iItem=iSelect;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem)) !获取Text
i=SetDlgItemText(hDlg,IDC_EPWSTY,trim(Text))
!
LvItem.iSubItem=1;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
i=SetDlgItemText(hDlg,IDC_EPWNZ,trim(Text))
!
LvItem.iSubItem=2;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWB0Z,trim(Text))
!
LvItem.iSubItem=3;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWM,trim(Text))
!
LvItem.iSubItem=4;
i = SendMessage(hWndList1,LVM_GETITEMTEXT,iSelect,loc(LvItem))
Text(i:i) = ' '
i=SetDlgItemText(hDlg,IDC_EPWYAN,trim(Text))
endif
ParaDialogProc=1
RETURN