大家都知道,易语言可艮劁飨戽以通过直接创建Windows窗口来创建,当然,我们也可以利用代码来创建,今天小编就来教大家如何利用代码创建一个窗口。
<砖镑苣逢/p>
因为是用代码,所以我就不需要Windows窗口程序了,创建一个Windows控制台程序就行了。
首先复制以下命令到DLL命令表中,我们需要用到这些API。
==========DLL命令==========
.版本2
.DLL命令CreateWindowEx,整数型,"user32","CreateWindowExA",,建立窗口
.参数dwExStyle,整数型
.参数lpClassName,文本型
.参数lpWindowName,文本型
.参数dwStyle,整数型
.参数x,整数型
.参数y,整数型
.参数nWidth,整数型
.参数nHeight,整数型
.参数hWndParent,整数型
.参数hMenu,整数型
.参数hInstance,整数型
.参数lpParam,整数型
.DLL命令RegisterClassEx,整数型,"user32","RegisterClassExA"
.参数pcWndClassEx,WNDCLASSEX
.DLL命令ShowWindow,整数型,"user32","ShowWindow",,控制窗口的可见性(在vb里使用:针对vb窗体及控件,请使用对应的vb属性)如窗口之前是可见的,则返回TRUE(非零),否则返回FALSE(零)
.参数hwnd,整数型,,窗口句柄,要向这个窗口应用由nCmdShow指定的命令
.参数nCmdShow,整数型,,为窗口指定可视性方面的一个命令。请用下述任何一个常数;SW_HIDE:隐藏窗口,活动状态给令一个窗口;SW_MINIMIZE:最小化窗口,活动状态给令一个窗口;SW_RESTORE:用原来的大小和位置显示一个窗口,同时令其进入活动状态;SW_SHOW:用当前的大小和位置显示一个窗口,同时令其进入活动状态;SW_SHOWMAXIMIZED:最大化窗口,并将其激活;SW_SHOWMINIMIZED:最小化窗口,并将其激活;SW_SHOWMINNOACTIVE:最小化一个窗口,同时不改变活动窗口;SW_SHOWNA:用当前的大小和位置显示一个窗口,不改变活动窗口;SW_SHOWNOACTIVATE:用最近的大小和位置显示一个窗口,同时不改变活动窗口;SW_SHOWNORMAL:与SW_RESTORE相同;
.DLL命令UpdateWindow,整数型,"user32","UpdateWindow",,强制立即更新窗口,窗口中以前屏蔽的所有区域都会重画(在vb里使用:如vb窗体或控件的任何部分需要更新,可考虑直接使用refresh方法非零表示成功,零表示失败
.参数hwnd,整数型,,欲更新窗口的句柄;
.DLL命令GetModuleHandle,整数型,"kernel32","GetModuleHandleA",,获取一个应用程序或动态链接库的模块句柄如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError
.参数lpModuleName,文本型,,指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;
.DLL命令DefWindowProc,整数型,"user32","DefWindowProcA",,调用缺省窗口过程
.参数hwnd,整数型
.参数wMsg,整数型
.参数wParam,整数型
.参数lParam,整数型
.DLL命令DispatchMessage,整数型,"user32","DispatchMessageA",,向窗口发送消息
.参数lpMsg,MSG
.DLL命令GetMessage,整数型,"user32","GetMessageA",,从线索消息队列中返回一条消息
.参数lpMsg,MSG
.参数hwnd,整数型
.参数wMsgFilterMin,整数型
.参数wMsgFilterMax,整数型
.DLL命令TranslateMessage,整数型,"user32","TranslateMessage",,转换虚拟关键字消息
.参数lpMsg,MSG
.DLL命令LoadCursor,整数型,"user32","LoadCursorA",,从指定的模块或应用程序实例中载入一个鼠标指针。LoadCursorBynum是LoadCursor函数的类型安全声明执行成功则返回已载入的指针的句柄;零表示失败。在Windows;95和Win16环境中,这个函数只能载入标准尺寸的图标
.参数实例句柄,整数型,,一个DLL的模块句柄;或者一个实例句柄,指定包含了鼠标指针的可执行程序
.参数鼠标指针标识,整数型,,作为一个字串,指定欲载入的指针资源。作为一个长整数值,指定欲载入的资源ID;或者设置一个常数,代表某幅固有系统指针。如装载的是一个固有系统指针,注意hInstance参数应设为零。在api32.txt文件中以前缀IDC_作为标志;
.DLL命令LoadIcon,整数型,"user32","LoadIconA",,从指定的模块或应用程序实例中载入一个图标。其中,LoadIconBynum是LoadIcon函数的类型安全声明执行成功则返回已载入的图标的句柄;零表示失败。会设置GetLastError
.参数实例句柄,整数型
.参数图标标识,整数型
.DLL命令PostQuitMessage,,"user32","PostQuitMessage",,通知WINDOWS线索将中断
.参数nExitCode,整数型
==========DLL命令==========
返回程序集,粘贴如下代码到代码编辑区。
==========代码==========
.版本2
.局部变量窗口类,WNDCLASSEX
.局部变量NULL,文本型
.局部变量窗口类名,文本型
.局部变量消息,MSG
.局部变量窗口句柄,整数型
.局部变量窗口样式,整数型
窗口类名=“MyWindowClass”
'下面的代码填写窗口类的“注册表格”
窗口类.cbSize=48'要指定整个结构所占的字节数,必须
窗口类.style=位或(#CS_HREDRAW,#CS_VREDRAW,#CS_DBLCLKS)
窗口类.hInstance=GetModuleHandle(NULL)'取当前应用程序的实例句柄。
'上面这句也可以这样:
'窗口类.hInstance=GetModuleHandle(取执行文件名())
'!!注意:LoadIcon和LoadCursor的两个函数的参数都改成了整数型。
窗口类.hIcon=LoadIcon(窗口类.hInstance,129)'易语言EXE文件的图标标号为129
窗口类.hCursor=LoadCursor(0,#IDC_ARROW)
窗口类.hbrBackground=#COLOR_BTNFACE+1'也可以使用其他的Color常量,注意在后面要+1。
窗口类.lpszClassName=窗口类名
窗口类.lpfnWndProc=&窗口函数
'注册表填写好了之后,进行注册登记窗口类。
.如果真(RegisterClassEx(窗口类)=0)
信息框(“注册窗口类失败!”,#错误图标,)
返回(1)
.如果真结束
'窗口类注册成功了就可以创建窗口了。
窗口样式=位或(#WS_CAPTION,#WS_SYSMENU,#WS_OVERLAPPED,#WS_THICKFRAME,#WS_MAXIMIZEBOX,#WS_MINIMIZEBOX)
窗口句柄=CreateWindowEx(0,窗口类名,“《易精经》例程-白手起家,凭空创建窗口”,窗口样式,#CW_USEDEFAULT,#CW_USEDEFAULT,400,240,0,0,窗口类.hInstance,0)
.如果真(窗口句柄=0)
信息框(“创建窗口失败!”,#错误图标,)
返回(1)
.如果真结束
'将窗口显示出来。
ShowWindow(窗口句柄,#SW_SHOWNORMAL)
UpdateWindow(窗口句柄)
'下面就是消息循环
'当GetMessage函数发现消息的消息值为WM_QUIT的时候,就返回0,从而退出循环。
.判断循环首(GetMessage(消息,0,0,0)≠0)
TranslateMessage(消息)
DispatchMessage(消息)
.判断循环尾()
返回(消息.wParam)
.子程序窗口函数,整数型,,这是窗口过程,用来处理窗口消息
.参数hWnd,整数型,,窗口句柄
.参数uMsg,整数型,,消息值
.参数wParam,整数型,,参数一
.参数lParam,整数型,,参数二
.局部变量x
.局部变量y
.判断开始(uMsg=#WM_DESTROY)
PostQuitMessage(0)'将WM_QUIT消息放入消息队列中,这样GetMessage收到WM_QUIT消息时就会返回0,从而退出消息循环
返回(0)
.默认
.判断结束
返回(DefWindowProc(hWnd,uMsg,wParam,lParam))'其他的消息通通交给DefWindowProc函数处理。
==========代码==========
再粘贴如下代码到数据类型区。
==========代码==========
.版本2
.数据类型WNDCLASSEX
.成员cbSize,整数型
.成员style,整数型
.成员lpfnWndProc,子程序指针,,,'<<<<注意这里要改成子程序指针类型
.成员cbClsExtra,整数型
.成员cbWndExtra,整数型
.成员hInstance,整数型
.成员hIcon,整数型
.成员hCursor,整数型
.成员hbrBackground,整数型
.成员lpszMenuName,文本型
.成员lpszClassName,文本型
.成员hIconSm,整数型
.数据类型MSG
.成员hwnd,整数型
.成员message,整数型
.成员wParam,整数型
.成员lParam,整数型
.成员time,整数型
.成员pt,POINTAPI
.数据类型POINTAPI
.成员横向位置,整数型
.成员纵向位置,整数型
==========代码==========
最后粘贴如下常量到常量中。
==========代码==========
.版本2
.常量CW_USEDEFAULT,"2147483648"
.常量SW_SHOWNORMAL,"1"
.常量CS_HREDRAW,"2"
.常量CS_VREDRAW,"1"
.常量WS_CAPTION,"12582912"
.常量WS_MAXIMIZEBOX,"65536"
.常量WS_MINIMIZEBOX,"131072"
.常量WS_OVERLAPPED,"0"
.常量WS_SYSMENU,"524288"
.常量WS_THICKFRAME,"262144"
.常量IDC_ARROW,"32512"
.常量COLOR_WINDOW,"5"
.常量WM_DESTROY,"2"
.常量COLOR_BTNFACE,"15"
.常量WM_CLOSE,"16",,当一个窗口或应用程序要关闭时发送一个信号
.常量CS_DBLCLKS,"8"
.常量WM_LBUTTONDBLCLK,"515",,//双击鼠标左键
.常量WM_LBUTTONDOWN,"513",,//按下鼠标左键
.常量WM_LBUTTONUP,"514",,//释放鼠标左键
.常量WM_MOUSEMOVE,"512",,//移动鼠标
==========代码==========
最后调试运行一下,窗口就成功创建了。