文档库 最新最全的文档下载
当前位置:文档库 › 1C#_调用WIN32的API函数 USER32.DLL实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)

1C#_调用WIN32的API函数 USER32.DLL实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)

1C#_调用WIN32的API函数  USER32.DLL实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)
1C#_调用WIN32的API函数  USER32.DLL实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)

Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm 时还是很有帮助的。有时候我们之直接调用Win32的API,可以很高效的实现想要的效果。

代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

namespace WindowsAPI

{

class CSharp_Win32Api

{

#region User32.dll函数

///

///该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。hWnd:设备上下文环境被检索的窗口的句柄

///

[DllImport("user32.dll",CharSet=CharSet.Auto)]

public static extern IntPtr GetDC(IntPtr hWnd);

///

///函数释放设备上下文环境(DC)供其他应用程序使用。

///

public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

///

///该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。

///

static public extern IntPtr GetDesktopWindow();

///

///该函数设置指定窗口的显示状态。

///

static public extern bool ShowWindow(IntPtr hWnd, short State);

///

///通过发送重绘消息WM_PAINT给目标窗体来更新目标窗体客户区的无效区域。

///

static public extern bool UpdateWindow(IntPtr hW nd);

///

///该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。

///

static public extern bool SetForegroundWindow(Int Ptr hWnd);

///

///该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。

///

static public extern bool SetWindowPos(IntPtr hW nd,IntPtr hWndInsertAfter,int x,int y,int Width,int He ight,uint flags);

///

///打开剪切板

///

static public extern bool OpenClipboard(IntPtr h WndNewOwner);

///

///关闭剪切板

///

static public extern bool CloseClipboard();

///

///打开清空

static public extern bool EmptyClipboard();

///

///将存放有数据的内存块放入剪切板的资源管理中

///

static public extern IntPtr SetClipboardData(uint Format,IntPtr hData);

///

///在一个矩形中装载指定菜单条目的屏幕坐标信息

///

static public extern bool GetMenuItemRect(IntPtr hWnd,IntPtr hMenu,uint Item,ref RECT rc);

[DllImport("user32.dll",ExactSpelling=true,Ch arSet=CharSet.Auto)]

///

///该函数获得一个指定子窗口的父窗口句柄。

///

public static extern IntPtr GetParent(IntPtr hWn

d);

///

///该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。

///

///其窗口程序将接收消息的窗口的句柄

///指定被发送的消息

///指定附加的消息指定信息

///指定附加的消息指定信息

///

public static extern int SendMessage(IntPtr hWnd, int msg,int wParam,int lParam);

public static extern IntPtr SendMessage(IntPtr h Wnd,int msg,int wParam,IntPtr lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref RECT lParam);

public static extern int SendMessage(IntPtr hWnd, int msg,int wParam,ref POINT lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref TBBUTTON lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref TBBUTTONINFO lParam);

public static extern int SendMessage(IntPtr hWnd, int msg,int wParam,ref REBARBANDINFO lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref TVITEM lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref LVITEM lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref HDITEM lParam);

public static extern void SendMessage(IntPtr hWn d,int msg,int wParam,ref HD_HITTESTINFO hti);

///

///该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里

///

public static extern IntPtr PostMessage(IntPtr h Wnd,int msg,int wParam,int lParam);

public static extern IntPtr SetWindowsHookEx(int hookid,HookProc pfnhook,IntPtr hinst,int threadid);

[DllImport("user32.dll",CharSet=CharSet.Auto, ExactSpelling=true)]

public static extern bool UnhookWindowsHookEx(Int Ptr hhook);

[DllImport("user32.dll",CharSet=CharSet.Auto, ExactSpelling=true)]

public static extern IntPtr CallNextHookEx(IntPtr hhook,int code,IntPtr wparam,IntPtr lparam);

///

///该函数对指定的窗口设置键盘焦点。

///

public static extern IntPtr SetFocus(IntPtr hWnd) ;

///

///该函数在指定的矩形里写入格式化文本,根据指定的方法对文本格式化(扩展的制表符,字符对齐、折行等)。

///

public extern static int DrawText(IntPtr hdc,s tring lpString,int nCount,ref RECT lpRect,int uFormat);

///

///该函数改变指定子窗口的父窗口。

///

public extern static IntPtr SetParent(IntPtr hCh ild,IntPtr hParent);

///

///获取对话框中子窗口控件的句柄

///

public extern static IntPtr GetDlgItem(IntPtr hD lg,int nControlID);

///

///该函数获取窗口客户区的坐标。

///

public extern static int GetClientRect(IntPtr hW nd,ref RECT rc);

///

///该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。

///

public extern static int InvalidateRect(IntPtr h Wnd,IntPtr rect,int bErase);

///

///该函数产生对其他线程的控制,如果一个线程没有其他消息在其消息队列里。

public static extern bool WaitMessage();

///

///该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。

///

public static extern bool PeekMessage(ref MSG m sg,int hWnd,uint wFilterMin,uint wFilterMax,uint wFlag);

///

///该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge

寄送的线程消息。此函数接收一定范围的消息值。

///

public static extern bool GetMessage(ref MSG ms g,int hWnd,uint wFilterMin,uint wFilterMax);

///

///该函数将虚拟键消息转换为字符消息。

///

public static extern bool TranslateMessage(ref M SG msg);

///

///该函数调度一个消息给窗口程序。

///

public static extern bool DispatchMessage(ref MS G msg);

///

///该函数从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源.

///

public static extern IntPtr LoadCursor(IntPtr hI nstance,uint cursor);

///

///该函数确定光标的形状。

///

public static extern IntPtr SetCursor(IntPtr hCu rsor);

///

///确定当前焦点位于哪个控件上。

///

public static extern IntPtr GetFocus();

///

///该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。

public static extern bool ReleaseCapture();

///

///准备指定的窗口来重绘并将绘画相关的信息放到一个PAINTSTRUCT结构中。

///

public static extern IntPtr BeginPaint(IntPtr hW nd,ref PAINTSTRUCT ps);

///

///标记指定窗口的绘画过程结束,每次调用BeginPaint函数之后被请求

///

public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);

///

///半透明窗体

///

public static extern bool UpdateLayeredWindow(Int Ptr hwnd,IntPtr hdcDst,ref POINT pptDst,ref SIZE psize, IntPtr hdcSrc,ref POINT pprSrc,Int32crKey,ref BLENDFUNCTI ON pblend,Int32dwFlags);

///

///该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。

///

public static extern bool GetWindowRect(IntPtr h Wnd,ref RECT rect);

///

///该函数将指定点的用户坐标转换成屏幕坐标。

///

public static extern bool ClientToScreen(IntPtr hWnd,ref POINT pt);

///

///当在指定时间内鼠标指针离开或盘旋在一个窗口上时,此函数寄送消息。

///

public static extern bool TrackMouseEvent(ref TR ACKMOUSEEVENTS tme);

///

///

///

public static extern bool SetWindowRgn(IntPtr hW nd,IntPtr hRgn,bool redraw);

///

///该函数检取指定虚拟键的状态。

///

public static extern ushort GetKeyState(int virt Key);

///

///该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。

///

public static extern bool MoveWindow(IntPtr hWnd, int x,int y,int width,int height,bool repaint);

///

///该函数获得指定窗口所属的类的类名。

///

public static extern int GetClassName(IntPtr hWn d,out STRINGBUFFER ClassName,int nMaxCount);

///

///该函数改变指定窗口的属性

///

public static extern int SetWindowLong(IntPtr hW nd,int nIndex,int dwNewLong);

///

///该函数检索指定窗口客户区域或整个屏幕的显示设备上下文环境的句柄,在随后的GDI函数中可以使用该句柄在设备上下文环境中绘图。

///

public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion,uint flags);

///

///获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景返回值Long。

///

public static extern IntPtr GetWindowDC(IntPtr h Wnd);

///

///该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。

///

public static extern int FillRect(IntPtr hDC,r ef RECT rect,IntPtr hBrush);

///

///该函数返回指定窗口的显示状态以及被恢复的、最大化的和最小化的窗口位置。

///

public static extern int GetWindowPlacement(IntPt r hWnd,ref WINDOWPLACEMENT wp);

///

///该函数改变指定窗口的标题栏的文本内容

///

public static extern int SetWindowText(IntPtr hW nd,string text);

///

///该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控制,则拷贝控制的文本。

///

public static extern int GetWindowText(IntPtr hW nd,out STRINGBUFFER text,int maxCount);

///

///用于得到被定义的系统数据或者系统配置信息.

///

static public extern int GetSystemMetrics(int nI ndex);

///

///该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。

///

static public extern int SetScrollInfo(IntPtr hw nd,int bar,ref SCROLLINFO si,int fRedraw);

///

///该函数显示或隐藏所指定的滚动条。

///

public static extern int ShowScrollBar(IntPtr hW nd,int bar,int show);

///

///该函数可以激活一个或两个滚动条箭头或是使其失效。

///

public static extern int EnableScrollBar(IntPtr hWnd,uint flags,uint arrows);

///

///该函数将指定的窗口设置到Z序的顶部。

///

public static extern int BringWindowToTop(IntPtr hWnd);

///

///该函数滚动指定窗体客户区域的目录。

///

static public extern int ScrollWindowEx(IntPtr h Wnd,int dx,int dy,ref RECT rcScroll,ref RECT rcClip,Int

Ptr UpdateRegion,ref RECT rcInvalidated,uint flags);

///

///该函数确定给定的窗口句柄是否识别一个已存在的窗口。

///

public static extern int IsWindow(IntPtr hWnd);

///

///该函数将256个虚拟键的状态拷贝到指定的缓冲区中。

///

public static extern int GetKeyboardState(byte[] pbKeyState);

///

///该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。

///

public static extern int ToAscii(int uVirtKey,in t uScanCode,byte[]lpbKeyState,byte[]lpwTransKey,int fuState) ;

#endregion

}

VFP常见编程实例(免费下载)

VFP常见编程实例 1、1-100的累加 ** 求1到100的累加值 CLEAR s=0 i=1 DO WHILE i<=100 s=s+i i=i+1 &&一定记住先累加后循环ENDDO ?s RETURN 2、阶乘 ** 求5的阶乘 CLEAR j=1 i=1 DO WHILE i<=5 j=j*i

i=i+1 ENDDO ?j RETURN 3、求阶乘和 ** 求1至5的阶乘和CLEAR s=0 i=1 j=1 DO WHILE i<=5 j=j*i s=s+j i=i+1 ENDDO ?s RETURN 4、条件定位

** 查询定位记录指针在赵伟上 CLEAR USE 学生 LOCATE FOR 姓名="赵伟" IF FOUND() DISPLAY ELSE CANCEL ENDIF CONTINUE 5、用scan语句查询定位 ** 用scan语句查询定位记录在赵伟上 CLEAR SCAN FOR 姓名="赵伟" DISPLAY ENDSCAN RETURN 6、用scan语句扫描符合条件的记录,并显示出来** 把年龄小于30岁的人显示出来

SCAN FOR 年龄<30 DISPLAY ENDSCAN RETURN 7、查找男性职工 ** 查找男性职工CLEAR LOCATE FOR 性别="男" DO WHILE FOUND() DISPLAY CONTINUE ENDDO RETURN ** 查找男性职工CLEAR LOCATE FOR 性别="男" DO WHILE NOT EOF() DISPLAY CONTINUE

VFP函数大全

VFP函数大全 %运算符用于计算并返回两个数值表达式相除之后的余数 $(包含)运算符用于进行字符表达式之间的包含关系运算,如果一个字符表达式包含在另一个字符表达式之中,则函数返回真 ABS() 计算并返回指定数值表达式的绝对值 ACLASS() 用于将一个对象的父类名放置于一个内存数组中 ACOPY() 把一个数组的元素拷贝到另一个数组中 ACOS() 计算并返回一个指定数值表达式的余弦值 ADATABASES() 用于将所有打开的数据库名和它的路径存入一个内在变量数组中 ADB OBJECT S() 用于把当前数据库中的连接、表或SQL视图的名存入内存变量数组中 ADEL() 用于从一维数据中删除一个元素,或从二维数组中删除一行或者一列元素 ADIR() 将文件的有关信息存入指定的数组中,然后返回文件数 AELEMENT() 通过元素的下标,返回元素号 AFIELDS 将当前的结构信息存入数组中,然后返回表中的字段数 AFONT() 将可用字体的信息存入数组中 AERROR() 用于创建包含VFP或ODBC错误信息的内存变量 AINS() 在一维数组中插入一个元素或在二维数组中插入一行或一列元素 AINSTANCE() 用于将类的所有实例存入内存变量数组中,然后返回数组中存放的实例数 ALEN() 返回数组中元素、行或者列数 ALIAS() 返回当前工作区或指定工作区内表的别名 ALLTRIM() 从指定字符表达式的首尾两端删除前导和尾随的空格字符,然后返回截去空格后的字符串 AMEMBERS() 用于将对象的属性、过程和成员对象存入内存变量数组中

ANSITOOEM() 将指定字符表达式中的每个字符转换为MS-DOS(OEM)字符集中对应字符 APRINTERS() 将Print Manager中安装的当前打印机名存入内存变量数组中 ASC() 用于返回指定字符表达式中最左字符的ASCII码值 ASCAN() 搜索一个指定的数组,寻找一个与表达式中数据和数据类型相同的数组元素 ASELOBJ() 将活动的Form设计器当前控件的对象引用存储到内存变量数组中 ASIN() 计算并返回指定数值表达式反正弦值 ASORT() 按升序或降序排列数组中的元素 ASUBSCRIPT() 计算并返回指定元素号的行或者列坐标 AT() 寻找字符串或备注字段在另一字符串或备注字段中的第一次出现,并返回位置 ATAN() 计算并返回指定数值表达式的反正切值 ATC() 寻找字符串或备注字段中的第一次出现,并返回位置,将不考虑表达式中字母的大小写 ATCLINE() 寻找并返回一个字符串表达式或备注字段在另一字符表达式或备注字段中第一次出现的行号。不区分字符大小写 ATLINE() 寻找并返回一个字符表达式或备注字段在另一字符表达式或备注字段中第一次出现的行号ATN2() 根据指定的值返回所有4个像限内的反正切值 AUSED() 用于将一次会话期间的所有表别名和工作区存入变量数组之中 BAR() 从用DEFINE POPUP命令定义的菜单中返回最近所选择的菜单项的编号,或返回一个从VFP菜单所选择的一个菜单命令 BARCOUNT() 返回DEFINE POPUP命令所定义的菜单中的菜单项数,或返回VFP系统菜单上的菜单项数 BARPROMPT() 返回一个菜单项的有关正文 BETWEEN() 确定指定的表达式是否介于两个相同类型的表达式之间 BITAND() 返回两个数值表达式之间执行逐位与(AND)运算的结果 BITCLEAR() 清除数值表达式中的指定位,然后再返回结果值 BITLSHIFT() 返回将数值表达式左移若干位后的结果值

linux 内存相关操作函数

Linux内核中内存相关的操作函数 1、kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。 gfp_t flags 的选项较多。参考内核文件gfp.h. 在函数kmalloc()实现中,如果申请的空间较小,会根据申请空间的大小从slab中获取;如果申请的空间较大,如超过一个页面,会直接从buddy系统中获取。 2、vmalloc()/vfree() void *vmalloc(unsigned long size) 函数作用:从高端(如果存在,优先从高端)申请内存页面,并把申请的内存页面映射到内核的动态映射空间。vmalloc()函数的功能和alloc_pages(_GFP_HIGHMEM)+kmap() 的功能相似,只所以说是相似而不是相同,原因在于用vmalloc()申请的物理内存页面映射到内核的动态映射区(见下图),并且,用vmalloc()申请的页面的物理地址可能是不连续的。而alloc_pages(_GFP_HIGHMEM)+kmap()申请的页面的物理地址是连续的,被映射到内核的KMAP区。 vmalloc分配的地址则限于vmalloc_start与vmalloc_end之间。每一块vmalloc分配的内核虚拟内存都对应一个vm_struct结构体(可别和vm_area_struct搞混,那可是进程虚拟内存区域的结构),不同的内核虚拟地址被4k大小的空闲区间隔,以防止越界--见下图)。与进程虚拟地址的特性一样,这些虚拟地址与物理内存没有简单的位移关系,必须通过内核页表才可转换为物理地址或物理页。它们有可能尚未被映射,在发生缺页时才真正分配物理页面。 如果内存紧张,连续区域无法满足,调用vmalloc分配是必须的,因为它可以将物理不连续的空间组合后分配,所以更能满足分配要求。vmalloc可以映射高端页框,也可以映射底端页框。vmalloc的作用只是为了提供逻辑上连续的地址… 注意:在申请页面时,如果注明_GFP_HIGHMEM,即从高端申请。则实际是优先从高端内存申请,顺序为(分配顺序是HIGH, NORMAL, DMA )。 3、alloc_pages()/free_pages() 内核空间申请指定个数的内存页,内存页数必须是2^order个页。 alloc_pages(gfp_mask, order) 中,gfp_mask 是flag标志,其中可以为_ _GFP_DMA、_GFP_HIGHMEM 分别对应DMA和高端内存。

vfp中api函数调用实例

vfp中api函数调用实例 我们在vfp编程时,为了弥补vfp本身功能的不足,常常会用到win32api函数来对vfp 的功能进行扩展,例如取得系统信息、对注册表进行操作等,但由于win32api函数是c++的数据结构形式,在调用时与vfp的数据格式有所不同,因此在调用时往往会产生问题。下面,笔者就在vfp如何调用win32api函数,并就一些常用的win32api函数调用实例作一具体介绍。 一、vfp中调用win32api函数的格式 vfp中调用win32api函数的命令主要是declare-dll和clear dlls两个。 1.declare-dll 它用于注册外部windows 32位动态链接库(.dll)中的一个函数。 语法: declare [cfunctiontype] functionname in libraryname [as aliasname] [cparamtype1 [@] paramname1, cparamtype2 [@] paramname2, ...] 说明: cfunctiontype 指定该函数返回值的类型,其类型代码如下: short16位整数 integer32位整数 single32位浮点数 double64位浮点数 string字符串 functionname指定在要注册使用的32位函数名。注意functionname区分大小写。 如果该函数名与visual foxpro的保留字相同,应使用as参数另起别名。 in libraryname 指定该函数所在的外部动态链接库文件名,如果libraryname为win32api时,vfp将依次查找:kernel32.dll、gdi32.dll、user32.dll、mpr.dll及advapi32.dll 等动态链接库文件名。 as aliasname 为当api函数的名称与visual foxpro的保留字相同时,另取aliasname别名,另取的别名是不区分大小写的。 cparametertype1 [@] paramname1, cparametertype2 [@] paramname2, ... 指定传递给被调用的32位.dll函数的参数类型及参数名称。其类型代码如cfunctiontype,如果要以传址方法传递参数则应在参数名前加上@。 2. clear dlls 释放所有利用declare-dll命令所装入的动态链接库。 一旦申明win32api函数成功,就可以和一般函数一样用?xxx()、=xxx() 来使用。 二、vfp中常用win32api函数调用实例 1.利用win32api函数获取指定磁盘的卷标: stor 0 to c—var,c—cd,c—qf c—disk=′c:\′ &&指定磁盘 declare integer getvolumeinformation in win32api string @,string @,integer,; integer @, integer @, integer @, string @, integer xx=getvolumeinformation(c—disk,″ ″,20,@c—var,@c—cd,@c—qf,0,0) clear dlls 返回值: xx〈〉0 获取指定磁盘的卷标成功,反之则未成功。

linux的system () 函数详解

linux的system () 函数详解 system(执行shell 命令) 相关函数 fork,execve,waitpid,popen 表头文件 #i nclude 定义函数 int system(const char * string)? 函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。 返回值 =-1:出现错误 =0:调用成功但是没有出现子进程 >0:成功退出的子进程的id 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。 附加说明 在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。 范例 #i nclude main() { system(“ls -al /etc/passwd /etc/shadow”)? } 执行结果: -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd -r--------- 1 root root 572 Sep 2 15 :34 /etc/shado 例2: char tmp[]? sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev)? system(tmp)? 其中dev是/dev/sda1。

vfP 函数练习题

第二章练习题 一、选择题。 1. 就关系数据描述语言来说,Visual FoxPro属于______数据库管理系统。 A)问答式B)语言描述式 C)域描述语句式D)关系描述语句式 2. 下列______符号不能作为Visual FoxPro中的变量名。 A)ABCDEFG B)K1234 C)12ASDFG D)xyz 3. 日期型数据长度固定为______个字符。 A)10B)12 C)8 D)6 4. 在Visual FoxPro数据库文件中,逻辑型、日期型、备注型数据的宽度分别是______。 A)1,8,128 B)2,8,10 C)1,8,10 D)1,8,任意 5. 以下4个符号中,______是Visual FoxPro中的一个常量。 A)T B)TOP C).T. D)TO 6. Visual FoxPro中,表达式: 2*3^2+2*8/4+3^2的值为______。 A)64 B)31 C)49 D)22 7. 下列4个式子中,______不是Visual FoxPro中的表达式。 A)05/23/88 B)"2002" C)X+Y D)XYZ='5' AND ABC=5 8. 将逻辑值赋给内存变量X的正确方法是______。 A)X="T" B)STORE "T" TO X C)X=TRUE D)STORE .T. TO X 9. 设M="324.2",?43+&M的结果是______。 A)43 B)324.2 C)43324.2 D)367.2 10. 设A=123,B=456,K="A+B",则表达式l+&K的值是______。 A)1123456 B)580 C)1+A+B D)579 11. 顺序键入以下命令,显示结果为______。 STORE "14.31" TO X Y=INT(&X+5) ?Y A)20 B)14.315 C)14.31 D)19 12. Visual FoxPro中的索引文件分为单索引文件和复合索引文件,其中复合索引文件的扩展名为______。A)IDX B)EDX C)CDX D)NDX 13. 用于存储内存变量的文件扩展名为______。 A)FPT B)PRG C)FMT D)MEM 14. Visual FoxPro函数INT(RAND()*10)的值是在______范围内的整数。 A)(0,1)B)(1,10)C)(0,10)D)(1,9) 15. 数学式子sin25°写成Visual FoxPro表达式是______。 A)SIN25 B)SIN(25)C)SIN(25°)D)SIN(25*PI/180) 16. 设某数据库有100条记录。用函数EOF ( ) 测试结果为.T.,此时,当前记录号为______。 A)100 B)101 C)99D)1 17. 在下列表达式中,结果为日期类型的正确表达式是______。 A)DATE() + 25 B)DA TE() + TIME() C)DATE() – CTOD("06/11/2002") D)365 – DATE() 18. 执行如下命令: ?LEN(TRIM("北京市□□□")) 结果是______(其中□表示一个空格)。 A)6 B)3 C)9 D)10 19. 执行下列命令: M="ABCDabcd" ?SUBSTR(M,INT(LEN(M)/2+1),2) 输出结果是______。 A)AB B)ab C)bc D)abcd 20. Visual FoxPro数据库文件中,函数ROUND(1234.567,2)的值是______。 A)1234.57 B)1234.56 C)1235 D)1234 21. 执行下列命令后显示的结果是______。 A=CTOD("05/23/89") B=CTOD("05/03/89") ?B-A A)20 B)-20 C)“05/20/89” D)“05/-20/89” 22. 执行下列命令后显示的结果是______。 STR="VFoxPr数据库" ?SUBSTR(STR,LEN(STR)/2+1,6) A)VFoxPrB)数据库C)数据D)Pr数据 23. 执行下列命令后显示的结果是______。 X="Visual FoxPro is OK" ?AT("Fox",X) A)8B)6 C)FoxPro D)Visual 24. 函数STUFF("数据库",5,6,"管理系统")的结果是______。 A)数据库管理系统B)数据管理系统C)管理系统D)库系统 25. FoxPro数据库管理系统的数据模型是______。 A)概念型B)网状型C)关系型D)层次型 26. 下面4条叙述中,正确的叙述是______。 A)在命令窗口中被赋值的变量都是全局变量 B)在上级程序定义的变量在被调用的下级程序中无效 C)在程序中,用DECLARE定义的数组为全局变量 D)在程序中,用DIMENSION定义的数组为全局变量 27. 下面4条叙述中,正确的叙述是______。 A)在命令窗口中被赋值的变量均为局部变量 B)在命令窗口中用PRIV ATE命令说明的变量均为局部变量 C)在被调用的下级程序中用PUBLIC命令说明的变量都是全局变量 D)在程序中用PRIVA TE命令说明的变量均为全局变量 28. 下面4条叙述中,正确的叙述是______。 A)局部变量不可以与全局变量同名,但可以与上级程序中的局部变量同名 1

linux添加系统调用实验步骤

首先,进入到内核源码目录/usr/src/linux-2.6.34中,添加自己的系统调用号。 lyh@lyh:~$ cd /usr/src/linux-2.6.34/ 系统调用号在unistd_32.h文件中定义。内核中每个系统调用号都是 以“__NR_"开头的,在该文件中添加自己的系统调用号 lyh@lyh:/usr/src/linux-2.6.34$ sudo vim arch/x86/include/asm/unistd_32.h #define __NR_pwritev 334 #define __NR_rt_tgsigqueueinfo 335 #define __NR_perf_event_open 336 #define __NR_recvmmsg 337 #define __NR_mycall 338 #ifdef __KERNEL__ #define NR_syscalls 339 在内核源文件中该行为#define NR_syscalls 338,在系统调用执行的过程中,system_call()函数会根据该值来对用户态进程的有效性进行检查。如果这个号大于或等于NR_syscalls,系统调用处理程序终止。所以应该将原来的#define NR_syscalls 338修改为#define NR_syscalls 339 其次,在系统调用表中添加相应的表项 (1)lyh@lyh:/usr/src/linux-2.6.34$ sudo vim arch/x86/kernel/syscall_table_32.S ENTRY(sys_call_table) .long sys_restart_syscall .long sys_exit ………………(这里省略了部分) .long sys_rt_tgsigqueueinfo .long sys_perf_event_open .long sys_recvmmsg .long sys_mycall (2)lyh@lyh:/usr/src/linux-2.6.34$ sudo vim arch/h8300/kernel/syscalls.S #include #include

vfp调用word OR excel

vfp调用word OR excel(二) 10.从VFP中导出数据的几种方法! 答:当VFP处理好数据后,这时你可以用多种方法将这些数据导出,以便被其它应用程序(如Excel等)所用。下面向你简单介绍几种导出数据的方法: 1.用“导出数据”对话框。你可以从VFP主菜单中选择“文件/导出…”打开 “导出”对话框,在该对话框中的“来源”框中输入表名(c:\vfp\students.dbf ),在“类型”中指定要导出数据的类型(Microsoft Excel),在“到”框中输入 导出的路径和文件名(C:\excel\aa.xls),然后按“确定”即可。这时你如果查看command窗口,可发现以下代码: COPY TO C:\excel\aa.XLS TYPE XL5 2.用COPY TO命令。COPY TO命令的工作对象是VFP中的表,它要依据“TYPE”项才知道要产生哪一类导出文件。对于上面的导出过程,可用以下方法实现:USE students COPY TO C:\excel\aa.XLS TYPE XL5 12.在VFP6中,如何调用已经存在的WORD文件? oW = CREATEOBJECT([word.basic]) with oW .Apprestore() .Appmaximize() .fileopen("路径+文件名.扩展名") ENDWITH 13.打开word文件的控件? 用RUN /N3 C:\WORD.EXE 文档路径 C:\WORD.EXE是我自己写的,你用时换成WORD的真正路径就行了!

比如用WORD 打开SD.DOC 就写 RUN /N3 C:\WORD.EXE C:\SD.DOC 另:TXLS_EOLE = CREATEOBJECT('word.application') TXLS_EOLE.Documents.Open('文件名.doc') TXLS_EOLE.Visible=.t. 注意:别忘了关闭哦 TXLS_EOLE.Documents.close &&关闭文档 TXLS_EOLE.quit &&关闭word RELEASE TXLS_EOLE &&释放对象 再者: fw=alltrim(this.value) if file('&fw') *documents.open filename('&fw') wrdapp = createobject("word.application") wrdapp.visible=.t. *wrdapp.documents.add wrdapp.documents.open(alltrim(this.value)) else messagebox(fw+chr(13)+'文件不存在,请确认',0+16,'文件路径出错') RETURN(.F.) ENDIF 14.在表单中创建一个编辑框,用来显示WORD文档! 做一个按扭,在CLICK中写:THISFORM.EDIT1.value=FILETOSTR(GETFILE('DOC')) 这个不也行,而且还简单 15.强烈建议:直接使用ole可以在表单中打开word,建议不使用这种办法,改为利用api 用windows默认的程序打开word,数据库只存储word文档所在的位置和名字。

qt4中如何调用C函数(linux下)

qt默认的编程语言为C++语言。如果你用qt编译.c文件,会出现找不到C语言的默认头文件等错误(如:stdio.h等)。qt中不支持 extern "C"{}的这种写法,我前几天有一个C程序需要移植到Qt的工程中,本希望直接extern "C"就ok了,但发现qt4居然不支持这种写法。我的程序中用到了好几个linux系统头文件,是向串口发指令之类的程序,程序中用到了互斥锁并创建了一个线程。如果再用qt语言来写一遍的话我会挂掉的,所以没有办法,在网上找了半天,终于找到解决方法。 将.c文件编译为函数库的方式在qt下调用,这种方法貌似行得通,我就开始行动了。 下面的内容讲得比较多,比较全,比较适合初学者,是我在网上down的,给出了原网站的链接,最后给出了一个程序。经过自己整理好归纳如下: 需要说明的是:使用gcc可以将程序编译成动态库或者静态库的形式,它们在程序中的调用的方式也不尽相同,给出的程序中调用的是动态连接库。编译成动态的还是静态的根据自己的需要进行。如果原C程序编译的时候需要gcc的额外选项(如gcc -lpthread -o hello hello.c)等,建议采用动态的形式。 1.什么是静态连接库,什么是动态链接库 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的EXE 文件中了。但是若使用DLL,该DLL 不必被包含在最终EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与EXE 独立的DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。在windows和linux上都是相同的,只不过文件的格式不同而已。 https://www.wendangku.net/doc/f72200772.html,/winston/archive/2008/07/05/1236273.html 2.gcc生成静态库和动态库 第1步:编辑得到举例的程序--hello.h、hello.c和main.c; 第2步:将hello.c编译成.o文件;

vfp中地常用函数与命令

VFP常用的命令和函数 1.数据库操作语言 使用可以CLOSE 命令关闭各种类型的文件。 DBC( ) 函数返回当前数据库的名称和路径。SQLCANCEL( ) 函数请求取消一条正在执行的 SQL 语句。SQLCOMMIT( ) 函数提交一个事务处理。SQLCONNECT( ) 函数建立一个对数据源的连接。SQLDISCONNECT( ) 函数结束一个对数据源的连接。SQLEXEC( ) 函数发送一条 SQL 语句到数据源中处理。SQLGETPROP( ) 函数获取一个活动连接的当前设置。 SQLMORERESULTS( ) 函数如果存在多个可用的结果集,则将另一个结果集复制到Visual FoxPro 临时表(cursor)中。 SQLROLLBACK( ) 函数取消当前事务处理期间所做的任何更改。SQLSETPROP( ) 函数指定一个活动连接的设置。SQLSTRINGCONNECT( ) 函数使用一个连接字符串建立与数据源的连接。TABLEREVERT( ) 函数放弃对缓冲行、缓冲表或临时表(cursor)的修改。 TABLEUPDATE( ) 函数提交对缓冲行、缓冲表或临时表(cursor)适配器的修改。 字段操作语言 使用可以BLANK 命令清除字段中的数据。 DELETED( ) 函数指出一个记录是否被标记为删除。FCOUNT( ) 函数返回一个表中的字段数量。 FIELD( ) 函数根据编号返回表中的字段名。 GATHER 命令用来自指定源的数据替换记录中的数据。SCATTER 命令从当前记录中复制数据到指定的目标。SET EXACT 命令指定比较不同长度两个串时的规则。

VFP中调用其他应用程序的方法

VFP中调用其他应用程序的方法 在用VFP进行应用程序设计中,经常需要调用其他的应用程序。这时候我们立即会想到RUN命令。使用RUN命令只需知道应用程序的文件名及其路径即可。 下面的示例是以最大化方式启动Windows目录下的图画板程序并同时打开c:\windows\Bubbles.bmp文件: RUN/n3 C:\Windows\Pbrush.exe c:\windows\Bubbles.bmp RUN命令的参数用法可以参考Visual FoxPro的帮助文件。 但是令人失望的是,在实际开发时我们常常无法确定所需要启动的应用程序的文件名及其安装的路径。比如我们需要启动用户机器上的浏览器并连接到某一个网址,该机器可能安装的是IE,也可能是NetScape,还有可能是其他的浏览器软件,安装的路径更是无从确定。下面给出我在工作中找到的两种解决方法,这两种方法都是通过Win32 API函数来解决问题,因此其解决思路也可以用到其他编程语言中去。 (一)从注册表中获取被调用软件的名称及路径。 我们只需要提供被调用的软件所处理的文件类型(由文件扩展名来确定),即可通过查找注册表中该软件注册的可以处理的文件类型的数据项来得到该软件的文件名及安装路径。 *主函数 PROCEDURE lookreg

Parameter filetype && 文件类型 * 申明要用到的API 函数 DECLARE Integer RegOpenKey IN Win32API ; Integer nHKey, String @cSubKey, Integer @nResult DECLARE Integer RegCloseKey IN Win32API ; Integer nHKey DECLARE Integer RegQueryvalueEx IN Win32API ; Integer nHKey, String lpszvalueName, Integer dwReserved,; Integer @lpdwType, String @lpbData, Integer @lpcbData #DEFINE HKEY_CLASSES_ROOT -2147483648 #DEFINE C_EXTNOFOUND_LOC "查找失败!" LOCAL cExtn,cAppKey,cAppName,nErrNum LOCAL oReg,regfile cAppKey = "" cAppName = "" nCurrentKey = 0 nErrNum =GetAppPath (filetype,@cAppKey,@cAppName)

Linux系统API函数手册簿

(一)文件操作篇 1、creat(建立文件) 头文件 1 #include 2 #include 3 #include 定义函数 1int creat(const char * pathname, mode_tmode); 函数说明 参数pathname指向欲建立的文件路径字符串。creat()相当于使用下列的调用方式调用open() 1 open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC)); 错误代码 关于参数mode请参考open()函数。 返回值 creat()会返回新的文件描述词,若有错误发生则会返回-1,并把错误代码设给errno。EEXIST 参数pathname所指的文件已存在。 EACCESS 参数pathname 所指定的文件不符合所要求测试的权限 EROFS 欲打开写入权限的文件存在于只读文件系统内 EFAULT 参数pathname 指针超出可存取的内存空间 EINVAL 参数mode 不正确。 ENAMETOOLONG 参数pathname太长。 ENOTDIR 参数pathname为一目录 ENOMEM 核心内存不足 ELOOP 参数pathname有过多符号连接问题。 EMFILE 已达到进程可同时打开的文件数上限 ENFILE 已达到系统可同时打开的文件数上限 附加说明 creat()无法建立特别的装置文件,如果需要请使用mknod()。 2、open(打开文件) 头文件 1 #include 2 #include 3 #include 定义函数

VFP命令、函数及程序语句大全

VFP命令、函数及程序语句大全.txt16生活,就是面对现实微笑,就是越过障碍注视未来;生活,就是用心灵之剪,在人生之路上裁出叶绿的枝头;生活,就是面对困惑或黑暗时,灵魂深处燃起豆大却明亮且微笑的灯展。17过去与未来,都离自己很遥远,关键是抓住现在,抓住当前。VFP命令、函数及程序语句大全(1) 学过VFP(Microsoft Visual FoxPro)的朋友都知道它是微软公司开发的数据库管理系统。它 经历了从dBASE、FoxBASE、FoxPro直到VFP的发展过程。本文便以VFP 6.0为例介绍它的命令、函数 及程序语句,为学习VFP的朋友提供必要的学习参考,也为已经精通VFP的朋友提供复习的好机会。 一、主要命令: 1、CREATE 作用:建立一个新的表。 格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA,下 同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下 同。) 说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出 对话框,要求用户输入想要建立的表名。在命令中不加文件名或问号系统也会弹出对话框,要求用 户输入想要建立的表名。 2、MODIFY STRUCTURE 作用:显示表文件结构,并允许修改此表的结构。 格式:MODIFY STRUCTURE 说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。 3、APPEND 作用:在当前表的尾部(无论表中有无记录)追加记录(在当前表指当前正使用的表)。 格式:APPEND [BLANK] 说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。无BLANK 参数 时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。 4、INSERT 作用:在表文件中间插入一个新记录。 格式:INSERT [BEFORE] [BLANK] 说明:INSERT 在当前记录后插入一记录; INSERT BEFORE 在当前记录前插入一记录; INSERT BEFORE BLANK 在当前记录前插入一空记录。 INSERT - SQL命令追加记录 INSERT INTO 表名[(字段1[,字段2…])];

VFP常用命令详解

VFP常用命令详解 VFP命令、函数及程序语句大全(1) VFP命令是一种实现对数据库系统进行操作的动词或短语。VFP命令可在VFP命令窗口中单独运行,也可编制成程序成批运行,由命令和函数编制的程序可对数据库系统进行自动、复杂的操作,使数据库系统应用起来更加友好、方便。 ?VFP常用命令分类表 类别命令 建立文件类CREATE,MODIFY,COPY,SAVE等 数据库操作类USE,CLOSE,COPY,MODIFY STRUCTURE等 数据编辑类BROWSE,EDIT,CHANG,REPLACE,UPDATE等 记录指针操作类GOTO,LOCATE,SEEK,FIND,SKIP等 记录操作类APPEND,DELETE,INSERT等 数据显示类BROWSE,LIST,DISPLAY等 数据统计类SUM,COUNT,AVERAGE,TOTAL等 存变量操作类ACCEPT,INPUT,READ,SAVE等 程序控制类DO,DO WHILE…ENDDO,IF…ENDIF等 系统设置类SET TALK,SET DEFAULT TO等 ?命令格式 VFP命令一般由命令动词和控制短语构成。 一般格式: 命令动词[FROM<源文件>][TO<目标文件>][记录范围][FOR/WHILE<条件>] [FIELDS<字段名表>] [ ]表示可选,<>表示必选, / 表示或选

例如: (1)APPEND FROM C:\RSDA.DBF FOR 基本工资>100 FIELDS 编号,姓名,职称,基本工资。 从C:\RSDA.DBF 表中把基本工资大于100元的记录添加到当前表添加字段为:编号,姓名,职称,基本工资。 (2)COUNT FOR 职称="高工"TO GG 统计高工的记录数到内存变量GG。 控制短语规定了对数据库操作的限制条件: 1.指向输入输出目标 FROM/TO APPEND FROM,COPY FILE TO <目标文件> 2.限制记录范围(SCOPE) ALL 所有记录 NEXT 本记录后的第几个记录 RECORD<1> 第1个记录 REST 当前记录之后所有记录 3.选择字段 FIELDS<字段表>选择输入/输出的字段。 4.限制条件 FOR/WHILE<条件> FOR 基本工资>100 .AND.基本工资<200 命令格式规则 命令的行为单位,一行书写不完,在未尾加上“;”第二行接着写。

linux0.11系统调用原理及实验总结

Linux0.11系统调用原理及实验总结 1系统调用的原理 1.1概述 系统调用是一个软中断,中断号是0x80,它是上层应用程序与Linux系统内核进行交互通信的唯一接口。通过int 0x80,就可使用内核资源。不过,通常应用程序都是使用具有标准接口定义的C函数库间接的使用内核的系统调用,即应用程序调用C函数库中的函数,C函数库中再通过int 0x80进行系统调用。 所以,系统调用过程是这样的: 应用程序调用libc中的函数->libc中的函数引用系统调用宏->系统调用宏中使用int 0x80完成系统调用并返回。 另外一种访问内核的方式是直接添加一个系统调用,供自己的应用程序使用,这样就不再使用库函数了,变得更为直接,效率也会更高。 1.2相关的数据结构 在说具体的调用过程之前,这里先要说几个数据结构。 1.2.1 系统调用函数表 系统调用函数表sys_call_table是在sys.h中定义的,它是一个函数指针数组,每个元素是一个函数指针,它的值是各个系统提供的供上层调用的系统函数的入口地址。也就是说通过查询这个表就可以调用软中断0x80所有的系统函数处理函数。 1.2.2 函数指针偏移宏 这是一系列宏,它们的定义在unistd.h中,基本形式为#define _NR_name value,name为系统函数名字,value是一个整数值,是name所对应的系统函数指针在sys_call_table中的偏移量。 1.2.3 系统调用宏 系统调用宏_syscalln(type,name)在内核的unistd.h文件中定义的,对它展开就是: type name(参数列表) { 调用过程; }; 其中,n为参数个数,type为函数返回值类型,name为所要调用的系统函数的名字。在unistd.h 中共定义了4个这样的宏(n从0到3),也就是说,0.11核中系统调用最多可带3个参数。

vfp函数大全

%运算符用于计算并返回两个数值表达式相除之后的余数 $(包含)运算符用于进行字符表达式之间的包含关系运算,如果一个字符表达式包含在另一个字符表达式之中,则函数返回真 ABS() 计算并返回指定数值表达式的绝对值 ACLASS() 用于将一个对象的父类名放置于一个内存数组中 ACOPY() 把一个数组的元素拷贝到另一个数组中 ACOS() 计算并返回一个指定数值表达式的余弦值 ADATABASES() 用于将所有打开的数据库名和它的路径存入一个内在变量数组中ADBOBJECTS() 用于把当前数据库中的连接、表或SQL视图的名存入内存变量数组中ADEL() 用于从一维数据中删除一个元素,或从二维数组中删除一行或者一列元素 ADIR() 将文件的有关信息存入指定的数组中,然后返回文件数 AELEMENT() 通过元素的下标,返回元素号 AFIELDS 将当前的结构信息存入数组中,然后返回表中的字段数 AFONT() 将可用字体的信息存入数组中 AERROR() 用于创建包含VFP或ODBC错误信息的内存变量 AINS() 在一维数组中插入一个元素或在二维数组中插入一行或一列元素 AINSTANCE() 用于将类的所有实例存入内存变量数组中,然后返回数组中存放的实例数ALEN() 返回数组中元素、行或者列数 ALIAS() 返回当前工作区或指定工作区内表的别名 ALLTRIM() 从指定字符表达式的首尾两端删除前导和尾随的空格字符,然后返回截去空格后的字符串 AMEMBERS() 用于将对象的属性、过程和成员对象存入内存变量数组中 ANSITOOEM() 将指定字符表达式中的每个字符转换为MS-DOS(OEM)字符集中对应字符APRINTERS() 将Print Manager中安装的当前打印机名存入内存变量数组中 ASC() 用于返回指定字符表达式中最左字符的ASCII码值 ASCAN() 搜索一个指定的数组,寻找一个与表达式中数据和数据类型相同的数组元素ASELOBJ() 将活动的Form设计器当前控件的对象引用存储到内存变量数组中 ASIN() 计算并返回指定数值表达式反正弦值 ASORT() 按升序或降序排列数组中的元素 ASUB script () 计算并返回指定元素号的行或者列坐标 AT() 寻找字符串或备注字段在另一字符串或备注字段中的第一次出现,并返回位置 ATAN() 计算并返回指定数值表达式的反正切值 ATC() 寻找字符串或备注字段中的第一次出现,并返回位置,将不考虑表达式中字母的大小写 ATCLINE() 寻找并返回一个字符串表达式或备注字段在另一字符表达式或备注字段中第一次出现的行号。不区分字符大小写 ATLINE() 寻找并返回一个字符表达式或备注字段在另一字符表达式或备注字段中第一次出现的行号 ATN2() 根据指定的值返回所有4个像限内的反正切值 AUSED() 用于将一次会话期间的所有表别名和工作区存入变量数组之中 BAR() 从用DEFINE POPUP命令定义的菜单中返回最近所选择的菜单项的编号,或返回一个从VFP菜单所选择的一个菜单命令 BARCOUNT() 返回DEFINE POPUP命令所定义的菜单中的菜单项数,或返回VFP系统菜单上的菜单项数

相关文档