以文本方式查看主题

-  Fortran中文网  (http://fortran.cn/bbs/index.asp)
--  Fortran语言使用经验交流  (http://fortran.cn/bbs/list.asp?boardid=2)
----  [原创]用fortran写用户界面程序  (http://fortran.cn/bbs/dispbbs.asp?boardid=2&id=515)

--  作者:lm_lxt
--  发布时间:2006/12/1 0:23:14

--  [原创]用fortran写用户界面程序
这个图片是用fortran写的windows窗口,非常简单,但是比QUICKWIN的窗口要漂亮一些!


此主题相关图片如下:
按此在新窗口浏览图片

[此贴子已经被作者于2006-12-10 18:10:40编辑过]


--  作者:baolanjun
--  发布时间:2006/12/4 8:57:14

--  
还可以的嘛
--  作者:lm_lxt
--  发布时间:2006/12/4 8:59:01

--  
也可以加入菜单,这样就可以写简单的程序了.
此主题相关图片如下:
按此在新窗口浏览图片

[此贴子已经被作者于2006-12-4 8:59:29编辑过]


--  作者:lm_lxt
--  发布时间:2006/12/4 20:53:23

--  
现在发现用fortran写界面程序很有意思,图形中间那个是光标,把它做成苹果形状。


此主题相关图片如下:
按此在新窗口浏览图片


--  作者:lm_lxt
--  发布时间:2006/12/7 11:27:11

--  
这是一个简单的模态对话框。
此主题相关图片如下:
按此在新窗口浏览图片
--  作者:lm_lxt
--  发布时间:2006/12/9 22:14:13

--  
附件里面是一个编辑框和列表框的应用。点击浏览该文件
--  作者:lm_lxt
--  发布时间:2006/12/10 18:03:16

--  
下面是六楼所示界面的源码,大家共同探讨!

module hh
integer hInst  

integer hDlg
end module hh

integer function WinMain( hInstance, hPrevInstance, lpszCmdLine, nCmdShow )
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'_WinMain@16\' :: WinMain
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'WinMain\' :: WinMain
!DEC$ ENDIF

!包含有用的模块
use user32
use dfwin
use hh
USE clipinc

integer hInstance      !定义句柄
integer hPrevInstance  !定义句柄
integer nCmdShow
integer lpszCmdLine
!*****************************************************************
interface
integer*4 function MainWndProc ( hwnd, mesg, wParam, lParam )
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'_MainWndProc@16\' :: MainWndProc
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'MainWndProc\' :: MainWndProc
!DEC$ ENDIF

integer*4 hwnd
integer*4 mesg  
integer*4 wParam
integer*4 lParam
end function
end interface
!******************************************************************

type (T_WNDCLASS)       wc    
type (T_MSG)            mesg
integer                 hWnd,COLOR

character*100 lpszClassName,lpszAppName,lpszMenuName

COLOR=9 !这个用来改变窗口的背景颜色

lpszCmdLine = lpszCmdLine
nCmdShow = nCmdShow


lpszClassName ="Generic"C
lpszAppName ="窗口程序,非模态对话框"C
lpszMenuName="menumenu"C

if(hPrevInstance .eq. 0) then
     wc%lpszClassName = LOC(lpszClassName)
     wc%lpfnWndProc = LOC(MainWndProc)
     wc%style = IOR(CS_VREDRAW , CS_HREDRAW)
     wc%hInstance = hInstance
     wc%hIcon = LoadIcon( hInstance, "MYICON")
     wc%hCursor = LoadCursor( hInstance, "MYCURSOR" )
     wc%hbrBackground = ( COLOR_WINDOW+COLOR )
     wc%lpszMenuName = LOC(lpszMenuName)
     wc%cbClsExtra = 0
     wc%cbWndExtra = 0
     i1 = RegisterClass(wc)
end if

hWnd = CreateWindowEx(  0, lpszClassName,                      &
                        lpszAppName,                           &
                        INT(WS_OVERLAPPEDWINDOW),              &
                        CW_USEDEFAULT,                         &
                        0,                                     &
                        CW_USEDEFAULT,                         &
                        0,                                     &
                        NULL,                                  &
                        NULL,                                  &
                        hInstance,                             &
                        NULL                                   &
                        )

hInst=hInstance  

i = ShowWindow( hWnd, SW_SHOWNORMAL)
do while( GetMessage (mesg, NULL, 0, 0))
   if(IsDialogMessage(hDlg,mesg)==0)then
   i =  TranslateMessage( mesg )
   i =  DispatchMessage( mesg )
   endif
end do
WinMain = mesg%wParam
end

!*********************************以下是窗口处理函数*************
integer function MainWndProc (hWnd, mesg, wParam, lParam)
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'_MainWndProc@16\' :: MainWndProc
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'MainWndProc\' :: MainWndProc
!DEC$ ENDIF

use user32
use dfwin
use hh
USE clipinc

!*****************************************************************
interface
logical function DialogFunc ( hdWnd, mesg, wParam, lParam )
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'_DialogFunc@16\' :: DialogFunc
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'DialogFunc\' :: DialogFunc
!DEC$ ENDIF

integer*4 hdWnd
integer*4 mesg  
integer*4 wParam
integer*4 lParam
end function
end interface
!******************************************************************

integer hWnd, mesg, wParam, lParam

   select case ( mesg )
         case(WM_COMMAND)
        select case(LOWORD(wParam))
                  case(IDM_OPEN)
                    hDlg=CreateDialog(hInst, LOC("AboutBox"C),hWnd,LOC(DialogFunc))
      case(IDM_DIALOG)
                    call PostQuitMessage( 0 )
     end select
         case (WM_DESTROY)
                  call PostQuitMessage( 0 )
         case default
               MainWndProc = DefWindowProc( hWnd, mesg, wParam, lParam )
      return
   end select
end
!**********************对话框窗口函数***********************
logical function DialogFunc( hdWnd, mesg, wParam, lParam )
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'_DialogFunc@16\' :: DialogFunc
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : \'DialogFunc\' :: DialogFunc
!DEC$ ENDIF

use user32
use dfwin
USE clipinc
use hh

integer hdWnd, mesg, wParam, lParam
integer*4 i
logical logresult,F,T
character*100 string


F=1<0   !F的值为FALSE
T=1>0   !T的值为TRUE

select case (mesg)
    case (WM_COMMAND)
        select case(LOWORD(wParam))
                  case(IDOK)
         logresult=DestroyWindow(hdWnd)
         DialogFunc=T
         RETURN
      case(IDCANCEL)
         logresult=DestroyWindow(hdWnd)
         DialogFunc=T
         RETURN
                  case(IDC_LIST1)
         if(HIWORD(wParam)==LBN_DBLCLK)THEN
      i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_GETCURSEL,0,0)
      write(string,"(\'你已经选择了第\',I3,\'项!\')")i
         i=MessageBox(hdWnd,string,"提示框",MB_OK)
      ENDIF
         DialogFunc=T
         RETURN
      case(IDC_SELECT)
         i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_GETCURSEL,0,0)
      if(i==LB_ERR)THEN
         write(string,"(\'你没有作出选择!\')")
      else
         write(string,"(\'你已经选择了第\',I3,\'项!\')")i
      endif
         i=MessageBox(hdWnd,string,"提示框",MB_OK)
         DialogFunc=T
         RETURN
      case(IDC_EDITOK)
         i=GetDlgItemText(hdWnd,IDC_EDIT,string,100)
                     i=MessageBox(hdWnd,string,"你输入的内容为:",MB_OK)
         DialogFunc=T
         RETURN          
        end select
    case(WM_INITDIALOG)
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("计算机"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("物  理"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("数  学"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("语  文"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("英  语"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("历  史"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("地  理"C))
  i=SendDlgItemMessage(hdWnd,IDC_LIST1,LB_ADDSTRING,0,LOC("生  物"C))
  DialogFunc=T
  RETURN
end select
DialogFunc=F
RETURN
end

[此贴子已经被作者于2006-12-10 18:04:37编辑过]


--  作者:lm_lxt
--  发布时间:2006/12/12 18:24:27

--  
这个是单、复选框的简单应用!点击浏览该文件
--  作者:lm_lxt
--  发布时间:2006/12/15 13:32:26

--  
对于位图的操作
此主题相关图片如下:
按此在新窗口浏览图片
--  作者:lm_lxt
--  发布时间:2006/12/16 9:36:15

--  
简单的图形绘制
此主题相关图片如下:
按此在新窗口浏览图片
京ICP备05056801号