以文本方式查看主题

-  Fortran中文网  (http://fortran.cn/bbs/index.asp)
--  Fortran语言开发经验交流  (http://fortran.cn/bbs/list.asp?boardid=3)
----  [原创]最简单的windows框架源程序  (http://fortran.cn/bbs/dispbbs.asp?boardid=3&id=719)

--  作者:lm_lxt
--  发布时间:2007/4/21 11:28:51

--  [原创]最简单的windows框架源程序
!******************************************************************************

!这是用fortran语言开发的一个最简单的windows程序

!程序用来显示一个具有windows特征的窗口

!******************************************************************************

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

!定义函数的传递参数  

integer*4 hInstance       !定义当前实例句柄

integer*4 hPrevInstance   !定义句柄,永远是NULL型

integer*4 nCmdShow        !定义程序执行的时候窗口的显示方式

integer*4 lpszCmdLine     !指向字符串的指针

integer*4 i

!******************************************************************************

!定义函数接口,注意这一段是必须的

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*4           hWnd     !定义程序窗口的句柄

integer*4           COLOR    !定义窗口的背景颜色

character*100 lpszClassName  !定义窗口类的名字

character*100 lpszAppName    !定义窗口的名字,即窗口的标题

COLOR=9   !用来改变窗口的背景颜色,从1-20颜色会变化

lpszClassName ="Generic"C

lpszAppName ="WINDOWS程序的框架"C

!指定窗口的特征

if(hPrevInstance .eq. 0) then

     wc%lpszClassName = LOC(lpszClassName)      !指定窗口类的名字

     wc%lpfnWndProc = LOC(MainWndProc)          !指定窗口函数的地址

     wc%style = 0                               !指定窗口的类型

     wc%hInstance = hInstance                   !指定当前实例句柄

     wc%hIcon = LoadIcon( NULL, IDI_WINLOGO)    !指定窗口的图标

     wc%hCursor = LoadCursor( NULL, IDC_CROSS ) !指定鼠标光标

     wc%hbrBackground = ( COLOR_WINDOW+COLOR )  !指定窗口的背景颜色

     wc%lpszMenuName = 0                        !指定窗口主菜单的名字

     wc%cbClsExtra = 0                          !没有额外的信息提供

     wc%cbWndExtra = 0                          !没有额外的信息提供

     i  = RegisterClass(wc)                     !让系统注册窗口,即告知系统窗口的特征是什么样的

end if

!创建窗口

hWnd = CreateWindowEx(  0,                          &  !扩展的窗口风格

                        lpszClassName,              &  !窗口类的名字

                        lpszAppName,                &  !窗口的标题

                        INT(WS_OVERLAPPEDWINDOW),   &  !窗口的类型

                        CW_USEDEFAULT,              &  !窗口左上角的X坐标

                        0,                          &  !窗口左上角的Y坐标

                        CW_USEDEFAULT,              &  !窗口的宽度

                        0,                          &  !窗口的高度

                        NULL,                       &  !父窗口的句柄

                        NULL,                       &  !主菜单的句柄

                        hInstance,                  &  !当前实例句柄

                        NULL                        &  !附加信息的指针

                        )

                        

!显示窗口

i = ShowWindow( hWnd, SW_SHOWNORMAL)

i = UpdateWindow( hWnd )

!进入消息循环

do while( GetMessage (mesg, NULL, 0, 0) .NEQV. .FALSE.)

   i =  TranslateMessage( mesg )

   i =  DispatchMessage( mesg )

end do

WinMain = mesg%wParam

return

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

integer*4 hWnd      !窗口的句柄

integer*4 mesg      !消息类结构体

integer*4 wParam    !消息相关的附加信息

integer*4 lParam    !消息相关的附加信息

!进行消息的处理

select case ( mesg )

         case (WM_DESTROY)       !如果关闭窗口,则退出应用程序

               call PostQuitMessage( 0 )

         case default           !其他信息系统自己处理

               MainWndProc = DefWindowProc( hWnd, mesg, wParam, lParam )

end select

return

end

程序在CVF或者IVF中都可以运行.

在这个框架下面,可以加入自己想要的一部分,使自己的程序具有简单的界面!

[此贴子已经被作者于2007-4-21 15:26:48编辑过]


京ICP备05056801号