当前位置: 首页 > 英语学习 > 英语资源 > vfp setwindowpos

vfp setwindowpos

2016-01-12 08:54:17 成考报名 来源:http://www.chinazhaokao.com 浏览:

导读: vfp setwindowpos篇一:编程问题 1,Q ...

欢迎来到中国招生考试网http://www.chinazhaokao.com/成考报名栏目,本文为大家带来《vfp setwindowpos》,希望能帮助到你。

vfp setwindowpos篇一:编程问题

1,Q:用 DEBUG 读取硬盘的主引导记录:

A: C:\>DEBUG

-a100

mov ax,0201 ;02 代表“读”

mov bx,200 ;运行结果放在内存地址 0200 处

mov cx,1 ;

mov dx,80 ;80 代表第一硬盘

int 13 ;调用磁盘中断

int 20 ;结束程序

-g=100 ;从 100 处开始运行程序

-d200 ;显示主引导记录 -q 2,Q:用批处理给一系列文件循环改名:

A:假设有三个文件,名为F3.EXE,F2.EXE,F1.EXE,则以下批处理可以给他们循环改名:

AUTO.BAT:

ren F3.EXE X

ren F2.EXE F3.EXE

ren F1.exe F2.exe

ren X F1.EXE

3,Q:那些 Web server 支持 ASP?

A:一般情况下,只有 Windows 下的 Web server 支持 ASP, 如高版本的 IIS、PWS4.0 等。Windows98 和 Windows98se 上随下运行的 Web Server,安装特定软件后,也可以支持 ASP。

4,Q:为何我将这句话(“Let's go now!”)插入到数据库中的时候会发生错误?

A:因为大多数的数据库(Access,MS SQL Server) 都把单引号当作分割符号使用的,所以不可以直接将单引号插入到数据 库中,你必须在执行SQL语句之前, 分别将每一个单引号替换成两个单引号:

MyData=Replace(MyData," ' "," '' ",1)

然后,再保存到数据库中就行了。

5,Q:在 ASP 中使用 ADO 的 AddNew 方法和直接使用“Insert into...”语句有何不同?那种方式更好?

A: ADO 的 AddNew 方法只是将“Insert into ”语句封装了起来, 所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的 “翻译”时间。虽然SQL语句不如 AddNew 等语句容易接受,但是学习一些常用的 SQL 语句在进行数据库编程中是非常重要的。

6,Q:经常看到联接数据库有两种方式 DSN 以及 DSN-LESS,两者是什么意思? 有什么不同吗?

A:DSN 是英文“Data Source Name”(数据源名)的缩写,DSN方式也就是采用数据源的联接方式,这个数据源可以在“控制面板”里面的“ODBC Data Sources”中进行设置,然后就这样使用: Conn.Open "DSN=Test;UID=Admin;PWD=;"其中的“Test”就 是你自己设定的数据源的名称。注意,要同时使用 UID 以及 PWD,否则会出错。

同样的,DSN-LESS 就是非数据源方式的联接方法,使用方法是:

Conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=\somepath\mydb.mdb;Uid=Admin;Pwd=;"

在相同的硬件环境下,DSN-LESS 方式要比 DSN 方式的性能要高,但是一旦 ASP 源代码因为某些安全问题而被别人看到,将会泄漏数据库的账号以及密码,所以这两种方式是各有利弊的。

7,Q:为什么我使用“Window.open()”方法打开的新窗口的 ASP 页面中经常会出现 Session 丢失的现象?

A:微软的 IE4.x 会经常出现这种情况,但 IE5.x 中已经纠正了这个错误。 所以,为了兼容所有的浏览器,你可以使用诸如“test.asp?name=xxx”的方式来在窗口之间传递参数,这样的效果更好, 只是要注意,如果传递的参数很重要,请不要使用明文方式进行传递,否则很容易导致安全问题。 盘附带的 PWS 可以支持 ASP。 WindowsNT4.0 安装 SP4 和 OP4 后,也可以支持 ASP。Windows2000 直接支持 ASP。一些在 UNIX

8,Q:好像 Redirect 方法只可以重新定向到同一帧里面,可不可以定向到其他帧呢?

A:可以,要加上这个:〈BASE Target="FrameName"〉。 然后,当你再使用 Redirect 方法的时候,就会重新定向到名字叫 做 FrameName 的帧里面了。

9,Q:为什么我使用 Response.Redirect 的时候出现错误?

A:最常见的原因就是你在写入页面之后对 HTTP 标题进行了修改,解决的方法是在页面的开始写上

〈%Response.Buffer=True%〉

10,Q:最近随同 IIS5.0 一起出现的 ASP3.0 有何新的功能?

A:其实并没有什么新的变化,但是新增加了两个 Server 对象的方法:Server.Transfer 以及 Server.Excute,还有一个 新的对象 ASPError。具体的使用方法请参考微软的网站:

11,Q:我有没有必要在每一个 ASP 文件中使用“Option Explicit”?

A:你最好这样,因为这样可以使得你的程序出错机会降到最少,并且会提升整体性能将近 9.8% 。

12,Q:我需不需要在每个 ASP 文件的开头使用 〈%@LANGUAGE=VBScript%〉?

A:如果你使用的脚本语言就是 VBScript 的话, 请尽量不要使用这个语句(VBScript是 ASP 的缺省脚本语言),否则程序 整体性能将会下降将近 1.2%。 但是如果你使用的并不是 VBScript 语言的话,请使用这个语句。

13,Q:我在 ASP 脚本中写了很多的注释,这会不会影响服务器处理 ASP 文件的速度?

A:经国外技术人员测试,带有过多注释的 ASP 文件整体性能仅仅会下降 0.1%,也就是说基本上不会影响到服务器的性能 下降。

14,Q:为什么我的记录集的 RecordCount 值总是返回 -1 ?

A:你应当使用这种模式来打开存取数据库的记录集:

rec.open strSQL,conn,1,1

其中的 strSQL 是操作数据库的 SQL 语句; conn 是联接数据库的 Connection 变量。

15,Q:什么是线程?

A:线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何进行线程通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。

16,Q:在 VB 中用 ADO 通过 ODBC 连接 ORACLE 数据库,读取有记录的表中的数据时为何返回结果的总是 NULL?

A:请使用微软的 ODBC for Oracle 驱动程序,在 ODBC 管理器中是 Microsoft ODBC for Oracle。不要使用 Oracle 自带的驱动程序。尽量使用新的 ODBC 驱动程序。

17,Q:VB 在打开窗口中,文件类型及文件名变为乱码,不知如何解释(重装后也不行)?

A:将 \windows\fonts 目录下的一个名为 mingliu.ttc 的文件删了试试。

18,Q:请问怎样在 VB 中设置系统热键?

A:代码如下:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer

Private Function MyHotKey(vKeyCode) As Boolean

MyHotKey = ((GetAsyncKeyState(vKeyCode) < 0))

End Function

然后,建立一个 timer 控件,输入以下代码:

Sub timer1_timer()

If myHotKey(vbkeyX) then „ ' 这里的 vbkeyX 是指系统热键为 X

End Sub

19,Q:如何让一个窗口总是处于各窗口的最上层?

A:代码如下:

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _

ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Const HWND_TOPMOST = -1

Private Sub Form_Load()

SetWindowPos Me.hwnd,HWND_TOPMOST,Me.Left/Screen.TwipsPerPixelX, _

Me.Top\Screen.TwipsPerPixelY,Me.Width\Screen.TwipsPerPixelX, _

Form1.Height \ Screen.TwipsPerPixelY, 0

End Sub

20,Q:我想在 Delphi 程序中直接调用 Word 文档并使用 Word 的功能,这个程序该怎样编? 该用什么控件呢?

A:

方法一:

1) 从 WORD.EXE 中导入 WORD 的 Type Library

2) var wd : _Application;

wdt : Table;

dot1,FileName: OleVariant;

begin

dot1 := 'c:\abc.dot';

wd := coApplication_.Create;

wd.Documents.Add(dot1, EmptyParam);

wdt := wd.ActiveDocument.Tables.Item(1);

wdt.Cell(1,3).Range.Text := 'Hello!';

//以下是保存和关闭文档及 Word, 可以不关,下面两个例程略过此步。

//EmptyParam 用来代替不使用的参数。

FileName := 'c:\test.doc';

wd.ActiveDocument.SaveAs(FileName,EmptyParam,EmptyParam,

EmptyParam,

EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,

EmptyParam);

wd.ActiveDocument.Close(EmptyParam,EmptyParam,EmptyParam);

wd.Quit(EmptyParam,EmptyParam,EmptyParam);

end;

方法二:

var

Ole: Variant;

NewDoc: Variant;

DocTable: Variant;

begin

//方法二的参数可以直接使用 Delphi 的数据类型。其它方法只能使用 OleVariant 类型.

Ole := CreateOleObject('Word.Application');

Ole.Application.Visible := true;

NewDoc := Ole.Documents.Add('C:\abc.dot');

DocTable := NewDoc.Tables.Item(1);

DocTable.Cell(1,3).Range.Text := 'Hello!';

//设置Variant对象为UnAssigned来释放该对象的引用。

NewDoc := UnAssigned;

DocTable := UnAssigned;

Ole := UnAssigned;

end;

方法三:使用 Server 页的 TWordApplication 控件,同理,你可以用里头的所有控件。Ole 为TWordApplication控件名称。 var

NewDoc: Variant;

DocTable: Variant;

o: OleVariant;

begin

o := 'c:\abc.dot';

NewDoc := Ole.Documents.Add(o,EmptyParam);

DocTable := NewDoc.Tables.Item(1);

DocTable.Cell(1,3).Range.Text := 'Hello!';

NewDoc := UnAssigned;

DocTable := UnAssigned;

end;

推荐用方法一和方法三。因为方法二不提供类型参数检查,也因为方法二的接口调用效率低。程序中所使用的属性和方法资料可以在 Office 的 VBA 帮助中查到。需要者请在安装 Office 时选择安装 VBA 编程帮助。

21,Q:想用 Dephi4.0 实现这样的效果:在程序启动时在主窗口中同时放置几个 Dockable 的子窗口。子窗口的大小和 Dock 的位置都可以变化,也可以拖离主窗口成为独立的窗口。(如同Visual C++6.0 集成环境的界面一样),请问怎么实现?

A:在 Delphi5.0 的 Borland\Delphi5\Demos\Docking 文件夹下有完整的示例程序,请参看例程

22,Q:我的 VB6 总把全角符号和半角符号一样对待,而且它对字符串的长度也辨不清如len("中华人民共和国")的返回值为 7。而其 FileLen() 的返回值却又似乎正常,等于文件的长度(Bit),请问到底得如何解决?

A: VB4.0 以后,string 类型以 UNICODE 存放,以 ANSI 形式写入文件。所以,len 和 FileLen 结果不同。len 返回字数,每个中、英文均为 1;lenb 返回字节数,每个中、英文均为 2。

如果需要返回 ANSI 的字节数,可用如下函数:

Public Function LenANSI(strU as string) as long

LenANSI = LenB(StrConv(strU, vbFromUnicode))

End function

23,Q:能否在 VB 中作 DLL 文件?

A:VB 不能制作 Win32 DLL 文件,但它可创建 ActiveX DLL。

24,Q:如何在不使用 Windows 的打印对话框或打印设置框的情况下,在 VB 程序中设定打印机的自定义纸张尺寸?

A:可设置 Printer 对象的 Width 和 Height 属性。对于同一种打印机,Windows9X 往往可以成功设置自定义纸张大小,而 NT 不能。这主要取决于打印机驱动程序。另外,即使驱动程序接受这些设置,它也会根据情况作些微调。

25,Q:在 VB 中如何控制计算结果的整数位和小数位?

A:可用 Format 函数,或 VB 新增的 FormatNumber(可本地化)等函数。

26,Q:在 VB6.0 中如何区分汉字和半角西文字符?

A:用 LenB(StrConv(str, vbFromUnicode)),结果为 1 是半角,为 2 是全角。另外一个 undocumented 的方法是,ASC(str),结果>0是半角,<0是全角。

27,Q:微软VISUAL J++ 和 JAVA 有什么不同?

A:微软已经放弃了java,他发布了一个新产品叫 C# 与 sun 的 java 竞争。C# 与 C++ 类似却很容易开发COM/DCOM 程序,但目前北美没有人用 C#。而 sun 的 java 却很热,年薪在 6 万元以上。

28,Q:如何在 VB 中调用资源文件中的资源,如图片、光标等?

A:可用 LoadResPicture(index,format) 来调用。其中“index”是必需的,它是一个整数或字符串,用来指定资源文件中数据的标识符 (ID) ,“format”是必需的一个数值或常数,指定返回数据的格式,返回一个 Picture 对象,例如位图、图标或光标。

例如:Picture1.Picture=LoadResPicture(100, vbResBitmap),常量有vbResBitmap ,vbResCursor, vbResIcon 等。*.res 文件可以用 VC++ 来产生和编辑,在 VB 中调用。

29,Q:是否运行用 Delphi 开发的数据库应用程序时,一定要装 BDE? 能否可以将其包含在应用程序中,使不安装 BDE,就可运行?

A:不可以。BDE 是 Delphi 和 Inprise 公司其他一些产品的数据引擎!有它才可以和 ODBC 相连接。

30,Q:请问怎么样将用VFP5.0编写的小软件编绎成可以脱离VFP而独立运行的软件?

A:将 VFP5.0 的的两个支持文件放置在与可执行文件相同的目录中,或者在 MS-DOS 搜索路径中,即可独立运行。

31,Q: 如何在 VC++6.0 中使用 MSComm 控件与单片机通讯? 要求是 PC 机发一个字节的命令,单片机返回相应的1--3字节数据。 A:首先将端口串行化:

commh = CreateFile(tmpstr, GENERIC_READ,GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); 然后设 DCB。读使用 ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader); 写使用 WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, &osWrite);

也可以使用 _inp, _outp 来直接写串口的端口。

32,Q:在 VB 网格中输入数据:

A:VISUAL BASIC 提供的网格控制(Grid)主要是用来直观地输出数据,但不能输入数据,使用起来很不方便。能不能向网格中输入数据呢?这里提供一种解决方法,供大家参考:

利用一文本框作为缓冲,实现编辑功能。当网格改变行列时,把网格当前行列的内容传递给文本框;当网格中有 ASCII 字符产生时,把输入焦点设置为文本框,并把输入的 ASCII 字符送给文本框;当编辑完文本框的内容时,按 Enter 键或 TAB 键,把文本框的内容送给网格的当前行列,并把输入焦点设置为网格。

如下程序所示(其中 Textl 为文本框,Labell 为标签,Gridl 为网格):

Option Explicit

Const EnterAsc=13

Const TabAsc=9

Private Sub Form_Load()

Labell.Caption=”请输入”

End Sub

Private Sub Gridl_KeyPress(KeyAscii As Integer)

Text1.StFocus

Textl.SelStart=0

If KeyAscii <> EnterAsc And KeyAscii <> TabAsc Then

SendKeys Chr(KeyAscii)

End IF

End Sub

Private Sub Gridl_RowColChange()

Textl.Text=Grid1.Text

vfp setwindowpos篇二:API函数SendMessage参数即Windows消息详解

API函数SendMessage参数即Windows消息详解Windows是一个消息驱动式系统,SendMessage是应用程序和应用程序之间进行消息传递的主要手段之一,这里搜集整理了SendMessage函数的详细参数介绍,以备自用。VFP声明:DECLARE INTEGER SendMessage IN user32;INTEGER hWnd,;INTEGER wMsg,;INTEGER wParam,;INTEGER lParam参数1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。参数2:wMsg-用于区别其他消息的常量值.参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.参数4: lParam-通常是一个指向内存中数据的指针。wMsg参数常量值:#DeFine WM_CREATE 0x01 创建一个窗口 #DeFine WM_DESTROY 0x02当一个窗口被破坏时发送 #DeFine WM_MOVE 0x03移动一个窗口 #DeFine WM_SIZE 0x05改变一个窗口的大小 #DeFine WM_ACTIVATE 0x06一个窗口被激活或失去激活状态 #DeFine WM_SETFOCUS 0x07一个窗口获得焦点 #DeFine WM_KILLFOCUS 0x08一个窗口失去焦点 #DeFine WM_ENABLE 0x0A一个窗口改变成Enable状态 #DeFine WM_SETREDRAW 0x0B设置窗口是否能重画 #DeFine WM_SETTEXT 0x0C应用程序发送此消息来设置一个窗口的文本 #DeFine WM_GETTEXT 0x0D应用程序发送此消息来复制对应窗口的文本到缓冲区 #DeFine WM_GETTEXTLENGTH 0x0E得到与一个窗口有关的文本的长度(不包含空字符) #DeFine WM_PAINT 0x0F要求一个窗口重画自己 #DeFine WM_CLOSE 0x10当一个窗口或应用程序要关闭时发送一个信号 #DeFine WM_QUERYENDSESSION 0x11当用户选择结束对话框或程序自己调用ExitWindows函数 #DeFine WM_QUIT 0x12用来结束程序运行 #DeFine WM_QUERYOPEN 0x13当用户窗口恢复以前的大小位置时,把此消息发送给某个图标 #DeFine WM_ERASEBKGND 0x14当窗口背景必须被擦除时(例在窗口改变大小时) #DeFine WM_SYSCOLORCHANGE 0x15当系统颜色改变时,发送此消息给所有顶级窗口 #DeFine WM_ENDSESSION 0x16当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束 #DeFine WM_SHOWWINDOW 0x18当隐藏或显示窗口是发送此消息给这个窗口 #DeFine WM_ACTIVATEAPP 0x1C发此消息给应用程序哪个窗口是激活的,哪个是非激活的 #DeFine WM_FONTCHANGE 0x1D当系统的字体资源库变化时发送此消息给所有顶级窗口 #DeFine WM_TIMECHANGE 0x1E当系统的时间变化时发送此消息给所有顶级窗口 #DeFine WM_CANCELMODE 0x1F发送此消息来取消某种正在进行的摸态(操作) #DeFine WM_SETCURSOR 0x20如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口#DeFine WM_MOUSEACTIVATE 0x21当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗

口#DeFine WM_CHILDACTIVATE 0x22发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小 #DeFine WM_QUEUESYNC 0x23此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息 #DeFine WM_GETMINMAXINFO 0x24此消息发送给窗口当它将要改变大小或位置 #DeFine WM_PAINTICON 0x26发送给最小化窗口当它图标将要被重画 #DeFine WM_ICONERASEBKGND 0x27此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画 #DeFine WM_NEXTDLGCTL 0x28发送此消息给一个对话框程序去更改焦点位置 #DeFine WM_SPOOLERSTATUS 0x2A每当打印管理列队增加或减少一条作业时发出此消息 #DeFine WM_DRAWITEM 0x2B当button,combobox,listbox,menu的可视外观改变时发送 #DeFine WM_MEASUREITEM 0x2C当button, combo box, list box, list view control, or menu item 被创建时#DeFine WM_VKEYTOITEM 0x2E此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息#DeFine WM_CHARTOITEM 0x2F此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息 #DeFine WM_SETFONT 0x30当绘制文本时程序发送此消息得到控件要用的颜色 #DeFine WM_GETFONT 0x31应用程序发送此消息得到当前控件绘制文本的字体 #DeFine WM_SETHOTKEY 0x32应用程序发送此消息让一个窗口与一个热键相关连 #DeFine WM_GETHOTKEY 0x33应用程序发送此消息来判断热键与某个窗口是否有关联 #DeFine WM_QUERYDRAGICON 0x37此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标 #DeFine WM_COMPAREITEM 0x39发送此消息来判定combobox或listbox新增加的项的相对位置 #DeFine WM_COMPACTING 0x41显示内存已经很少了 #DeFine WM_WINDOWPOSCHANGING 0x46发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数 #DeFine WM_WINDOWPOSCHANGED 0x47发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数 #DeFine WM_POWER 0x48当系统将要进入暂停状态时发送此消息 #DeFine WM_COPYDATA 0x4A当一个应用程序传递数据给另一个应用程序时发送此消息 #DeFine WM_CANCELJOURNA 0x4B当某个用户取消程序日志激活状态,提交此消息给程序 #DeFine WM_NOTIFY 0x4E当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口 #DeFine WM_INPUTLANGCHANGEREQUEST 0x50当用户选择某种输入语言,或输入语言的热键改变 #DeFine WM_INPUTLANGCHANGE 0x51当平台现场已经被改变后发送此消息给受影响的

最顶级窗口 #DeFine WM_TCARD 0x52当程序已经初始化windows帮助例程时发送此消息给应用程序 #DeFine WM_HELP 0x53此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口 #DeFine WM_USERCHANGED 0x54当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息 #DeFine WM_NOTIFYFORMAT 0x55公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构 #DeFine WM_CONTEXTMENU ??当用户某个窗口中点击了一下右键就发送此消息给这个窗口 #DeFine WM_STYLECHANGING 0x7C当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口#DeFine WM_STYLECHANGED 0x7D当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口 #DeFine WM_DISPLAYCHANGE 0x7E当显示器的分辨率改变后发送此消息给所有的窗口 #DeFine WM_GETICON 0x7F此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄 #DeFine WM_SETICON 0x80程序发送此消息让一个新的大图标或小图标与某个窗口关联 #DeFine WM_NCCREATE 0x81当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送 #DeFine WM_NCDESTROY 0x82此消息通知某个窗口,非客户区正在销毁 #DeFine WM_NCCALCSIZE 0x83当某个窗口的客户区域必须被核算时发送此消息 #DeFine WM_NCHITTEST 0x84移动鼠标,按住或释放鼠标时发生 #DeFine WM_NCPAINT 0x85程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时 #DeFine WM_NCACTIVATE 0x86此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态#DeFine WM_GETDLGCODE 0x87发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应 #DeFine WM_NCMOUSEMOVE 0xA0当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体 #DeFine WM_NCLBUTTONDOWN 0xA1当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息 #DeFine WM_NCLBUTTONUP 0xA2当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息 #DeFine WM_NCLBUTTONDBLCLK 0xA3当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息 #DeFine WM_NCRBUTTONDOWN 0xA4当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息 #DeFine WM_NCRBUTTONUP 0xA5当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息 #DeFine WM_NCRBUTTONDBLCLK 0xA6当用户

双击鼠标右键同时光标某个窗口在非客户区十发送此消息 #DeFine WM_NCMBUTTONDOWN 0xA7当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息 #DeFine WM_NCMBUTTONUP 0xA8当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息 #DeFine WM_NCMBUTTONDBLCLK 0xA9当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_KEYFIRST 0x100WM_KEYDOWN 按下一个键#DeFine WM_KEYUP 0x101释放一个键#DeFine WM_CHAR 0x102按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息#DeFine WM_DEADCHAR 0x103当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口#DeFine WM_SYSKEYDOWN 0x104当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口#DeFine WM_SYSKEYUP 0x105当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口#DeFine WM_SYSCHAR 0x106当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口#DeFine WM_SYSDEADCHAR 0x107当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口#DeFine WM_INITDIALOG 0x110在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务#DeFine WM_COMMAND 0x111当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译#DeFine WM_SYSCOMMAND 0x112当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息#DeFine WM_TIMER 0x113发生了定时器事件#DeFine WM_HSCROLL 0x114当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件#DeFine WM_VSCROLL 0x115当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件#DeFine WM_INITMENU 0x116当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单#DeFine WM_INITMENUPOPUP 0x117当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部#DeFine WM_MENUSELECT 0x11F当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)#DeFine WM_MENUCHAR 0x120当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者#DeFine WM_ENTERIDLE 0x121当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待#DeFine WM_CTLCOLORMSGBOX 0x132在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,

所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色#DeFine WM_CTLCOLOREDIT 0x133当一个编辑型控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色#DeFine WM_CTLCOLORLISTBOX 0x134当一个列表框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色#DeFine WM_CTLCOLORBTN 0x135当一个按钮控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色#DeFine WM_CTLCOLORDLG 0x136当一个对话框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色#DeFine WM_CTLCOLORSCROLLBAR 0x137当一个滚动条控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色#DeFine WM_CTLCOLORSTATIC 0x138当一个静态控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以 通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色#DeFine WM_MOUSEWHEEL 0x20A当鼠标轮子转动时发送此消息个当前有焦点的控件#DeFine WM_MBUTTONDBLCLK 0x209双击鼠标中键#DeFine WM_MBUTTONUP 0x208释放鼠标中键#DeFine WM_MOUSEFIRST 0x200移动鼠标时发生#DeFine WM_MOUSEMOVE 0x200移动鼠标时发生,同WM_MOUSEFIRST#DeFine WM_LBUTTONDOWN 0x201按下鼠标左键#DeFine WM_LBUTTONUP 0x202释放鼠标左键#DeFine WM_LBUTTONDBLCLK 0x203双击鼠标左键#DeFine WM_RBUTTONDOWN 0x204按下鼠标右键#DeFine WM_RBUTTONUP 0x205释放鼠标右键#DeFine WM_RBUTTONDBLCLK 0x206双击鼠标右键#DeFine WM_MBUTTONDOWN 0x207按下鼠标中键#DeFine WM_MBUTTONUP 0x208释放鼠标中键#DeFine WM_MBUTTONDBLCLK 0x209双击鼠标中键#DeFine WM_MOUSEWHEEL 0x20A当鼠标轮子转动时发送此消息个当前有焦点的控件

vfp setwindowpos篇三:sendmessage详解

Windows是一个消息驱动式系统,SendMessage是应用程序和应用程序之间进行消息传递的主要手段之一,这里我搜集整理了SendMessage函数的详细参数介绍,以备自用。VFP声明:DECLARE INTEGER SendMessage IN user32;INTEGER hWnd,;INTEGER wMsg,;INTEGER wParam,;INTEGER lParam参数1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。参数2:wMsg-用于区别其他消息的常量值.参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.参数4: lParam-通常是一个指向内存中数据的指针。wMsg参数常量值:#DeFine WM_CREATE 0x01 创建一个窗口#DeFine WM_DESTROY 0x02当一个窗口被破坏时发送#DeFine WM_MOVE 0x03移动一个窗口#DeFine WM_SIZE 0x05改变一个窗口的大小#DeFine WM_ACTIVATE 0x06一个窗口被激活或失去激活状态#DeFine WM_SETFOCUS 0x07一个窗口获得焦点#DeFine WM_KILLFOCUS 0x08一个窗口失去焦点#DeFine WM_ENABLE 0x0A一个窗口改变成Enable状态#DeFine WM_SETREDRAW 0x0B设置窗口是否能重画#DeFine WM_SETTEXT 0x0C应用程序发送此消息来设置一个窗口的文本#DeFine WM_GETTEXT 0x0D应用程序发送此消息来复制对应窗口的文本到缓冲区#DeFine WM_GETTEXTLENGTH 0x0E得到与一个窗口有关的文本的长度(不包含空字符)#DeFine WM_PAINT 0x0F要求一个窗口重画自己#DeFine WM_CLOSE 0x10当一个窗口或应用程序要关闭时发送一个信号#DeFine WM_QUERYENDSESSION 0x11当用户选择结束对话框或程序自己调用ExitWindows函数#DeFine WM_QUIT 0x12用来结束程序运行#DeFine WM_QUERYOPEN 0x13当用户窗口恢复以前的大小位置时,把此消息发送给某个图标#DeFine WM_ERASEBKGND 0x14当窗口背景必须被擦除时(例在窗口改变大小时)#DeFine WM_SYSCOLORCHANGE 0x15当系统颜色改变时,发送此消息给所有顶级窗口#DeFine WM_ENDSESSION 0x16当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束#DeFine WM_SHOWWINDOW 0x18当隐藏或显示窗口是发送此消息给这个窗口#DeFine WM_ACTIVATEAPP 0x1C发此消息给应用程序哪个窗口是激活的,哪个是非激活的#DeFine WM_FONTCHANGE 0x1D当系统的字体资源库变化时发送此消息给所有顶级窗口#DeFine WM_TIMECHANGE 0x1E当系统的时间变化时发送此消息给所有顶级窗口#DeFine WM_CANCELMODE 0x1F发送此消息来取消某种正在进行的摸态(操作)#DeFine WM_SETCURSOR 0x20如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口#DeFine WM_MOUSEACTIVATE 0x21当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口#DeFine WM_CHILDACTIVATE 0x22发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小#DeFine WM_QUEUESYNC 0x23此消

息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息#DeFine WM_GETMINMAXINFO 0x24此消息发送给窗口当它将要改变大小或位置#DeFine WM_PAINTICON 0x26发送给最小化窗口当它图标将要被重画#DeFine WM_ICONERASEBKGND 0x27此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画#DeFine WM_NEXTDLGCTL 0x28发送此消息给一个对话框程序去更改焦点位置#DeFine WM_SPOOLERSTATUS 0x2A每当打印管理列队增加或减少一条作业时发出此消息 #DeFine WM_DRAWITEM 0x2B当button,combobox,listbox,menu的可视外观改变时发送#DeFine WM_MEASUREITEM 0x2C当button, combo box, list box, list view control, or menu item 被创建时#DeFine WM_VKEYTOITEM 0x2E此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息 #DeFine WM_CHARTOITEM 0x2F此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息 #DeFine WM_SETFONT 0x30当绘制文本时程序发送此消息得到控件要用的颜色#DeFine WM_GETFONT 0x31应用程序发送此消息得到当前控件绘制文本的字体#DeFine WM_SETHOTKEY 0x32应用程序发送此消息让一个窗口与一个热键相关连 #DeFine WM_GETHOTKEY 0x33应用程序发送此消息来判断热键与某个窗口是否有关联#DeFine WM_QUERYDRAGICON 0x37此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标#DeFine WM_COMPAREITEM 0x39发送此消息来判定combobox或listbox新增加的项的相对位置#DeFine WM_COMPACTING 0x41显示内存已经很少了#DeFine WM_WINDOWPOSCHANGING 0x46发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数#DeFine WM_WINDOWPOSCHANGED 0x47发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数#DeFine WM_POWER 0x48当系统将要进入暂停状态时发送此消息#DeFine WM_COPYDATA 0x4A当一个应用程序传递数据给另一个应用程序时发送此消息#DeFine WM_CANCELJOURNA 0x4B当某个用户取消程序日志激活状态,提交此消息给程序#DeFine WM_NOTIFY 0x4E当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口 #DeFine WM_INPUTLANGCHANGEREQUEST 0x50当用户选择某种输入语言,或输入语言的热键改变#DeFine WM_INPUTLANGCHANGE 0x51当平台现场已经被改变后发送此消息给受影响的最顶级窗口#DeFine WM_TCARD 0x52当程序已经初始化windows帮助例程时发送此消息给应用程序#DeFine WM_HELP 0x53此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果

当前都没有焦点,就把此消息发送给当前激活的窗口#DeFine WM_USERCHANGED 0x54当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息#DeFine WM_NOTIFYFORMAT 0x55公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构#DeFine WM_CONTEXTMENU ??当用户某个窗口中点击了一下右键就发送此消息给这个窗口#DeFine WM_STYLECHANGING 0x7C当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口#DeFine WM_STYLECHANGED 0x7D当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口#DeFine WM_DISPLAYCHANGE 0x7E当显示器的分辨率改变后发送此消息给所有的窗口#DeFine WM_GETICON 0x7F此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄#DeFine WM_SETICON 0x80程序发送此消息让一个新的大图标或小图标与某个窗口关联#DeFine WM_NCCREATE 0x81当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送#DeFine WM_NCDESTROY 0x82此消息通知某个窗口,非客户区正在销毁 #DeFine WM_NCCALCSIZE 0x83当某个窗口的客户区域必须被核算时发送此消息#DeFine WM_NCHITTEST 0x84移动鼠标,按住或释放鼠标时发生#DeFine WM_NCPAINT 0x85程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时#DeFine WM_NCACTIVATE 0x86此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态#DeFine WM_GETDLGCODE 0x87发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应#DeFine WM_NCMOUSEMOVE 0xA0当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体#DeFine WM_NCLBUTTONDOWN 0xA1当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息#DeFine WM_NCLBUTTONUP 0xA2当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息 #DeFine WM_NCLBUTTONDBLCLK 0xA3当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息#DeFine WM_NCRBUTTONDOWN 0xA4当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCRBUTTONUP 0xA5当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCRBUTTONDBLCLK 0xA6当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息#DeFine WM_NCMBUTTONDOWN 0xA7当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCMBUTTONUP 0xA8当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCMBUTTONDBLCLK 0xA9当用户双击鼠标中键同时光标又在窗口的非客户区时发送

此消息#DeFine WM_KEYFIRST 0x100WM_KEYDOWN 按下一个键#DeFine WM_KEYUP 0x101释放一个键#DeFine WM_CHAR 0x102按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息#DeFine WM_DEADCHAR 0x103当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口#DeFine WM_SYSKEYDOWN 0x104当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口 #DeFine WM_SYSKEYUP 0x105当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口#DeFine WM_SYSCHAR 0x106当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口#DeFine WM_SYSDEADCHAR 0x107当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口#DeFine WM_INITDIALOG 0x110在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务#DeFine WM_COMMAND 0x111当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译 #DeFine WM_SYSCOMMAND 0x112当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息#DeFine WM_TIMER 0x113 发生了定时器事件#DeFine WM_HSCROLL 0x114 当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件#DeFine WM_VSCROLL 0x115 当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 #DeFine WM_INITMENU 0x116当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单#DeFine WM_INITMENUPOPUP 0x117当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部 #DeFine WM_MENUSELECT 0x11F当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)#DeFine WM_MENUCHAR 0x120当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者 #DeFine WM_ENTERIDLE 0x121当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待#DeFine WM_CTLCOLORMSGBOX 0x132在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色#DeFine WM_CTLCOLOREDIT 0x133当一个编辑型控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色#DeFine WM_CTLCOLORLISTBOX 0x134当一个列表框控件将要被绘制前发送此消息给它的父窗口 通过响应这条消息,所

有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色 #DeFine WM_CTLCOLORBTN 0x135当一个按钮控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色#DeFine WM_CTLCOLORDLG 0x136当一个对话框控件将要被绘制前发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色#DeFine WM_CTLCOLORSCROLLBAR 0x137当一个滚动条控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色#DeFine WM_CTLCOLORSTATIC 0x138当一个静态控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以 通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色#DeFine WM_MOUSEFIRST 0x200移动鼠标时发生#DeFine WM_MOUSEMOVE 0x200移动鼠标时发生,同WM_MOUSEFIRST#DeFine WM_LBUTTONDOWN 0x201按下鼠标左键#DeFine WM_LBUTTONUP 0x202释放鼠标左键#DeFine WM_LBUTTONDBLCLK 0x203双击鼠标左键#DeFine WM_RBUTTONDOWN 0x204按下鼠标右键#DeFine WM_RBUTTONUP 0x205释放鼠标右键#DeFine WM_RBUTTONDBLCLK 0x206双击鼠标右键#DeFine WM_MBUTTONDOWN 0x207按下鼠标中键 #DeFine WM_MBUTTONUP 0x208释放鼠标中键#DeFine WM_MBUTTONDBLCLK 0x209双击鼠标中键#DeFine WM_MOUSEWHEEL 0x20A当鼠标轮子转动时发送此消息个当前有焦点的控件Buttons BM_CLICK button被点击 消息 BM_GETCHECK 用于check boxes 或radio boxes 。查看 是否 checked 了。 BM_GETSTATE 发送此消息,可返回 button 的状态,如 是否被 checked;是否 可用(不可用就 变灰了) BM_SETCHECK 如果 已经 checked 了,发送此消息后,变为 unchecked,就是 那个钩钩 没被 选上。ok? BM_SETSTATE 设置 button被 点击 状态。 ==================== Combo Boxes CB_ADDSTRING 添加 字符串到 Combo Boxes 。 CB_DELETESTRING 删除 Combo Boxes 中的 条目,既 item CB_GETCOUNT 得到 Combo Boxes 条目 item 的 数目 CB_GETCURSEL 返回 Combo Boxes 中被选 条目 在 Combo Boxes 中 的位置,第一条为0 。 如果 没有 条目或出错,则返回 -1 CB_GETDROPPEDSTATE 发送此消息,可判断 Combo Boxes 的list box 是否被 放下,如果 是,返回 非零值,不是,则 返回 0 CB_GETLBTEXT 得到 combo box 的 条目 的text。 返回值 是 这个text 的长度。 CB_GETLBTEXTLEN 返回值 是 条目的 text

vfp setwindowpos篇四:PB中操作Excel的技巧集

PB中操作Excel的技巧集

eole=CREATEOBJECT("Excel.application")

2.添加新工作簿

eole.Workbooks.add

3.设置第3个工作表为激活工作表

eole.Worksheets("sheet3").Activate

4.打开指定工作簿

eole.Workbooks.Open("c:\temp\ll.xls")

5.显示Excel窗口

eole.visible=True

6.更改Excel标题栏

eole.Caption=″VFP应用程序调用Microsoft Excel″

7.给单元格赋值

eole.cells(1,4).value=XM(XM为数据库字段名)

8.设置指定列的宽度(单位:字符个数)

eole.ActiveSheet.Columns(1).ColumnWidth=5

9.设置指定行的高度(单位:磅)

eole.ActiveSheet.Rows(1).RowHeight=1/0.035 (设定行高为1厘米,1磅=0.035厘米)

10.在第18行之前插入分页符

eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1

11.在第4列之前删除分页符

eole.ActiveSheet.Columns(4).PageBreak=0

12.指定边框线宽度(Borders参数如下)

ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=3

13.设置四个边框线条的类型

eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1

(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)

14.设置页眉

eole.ActiveSheet.PageSetup.CenterHeader=″报表1″

15.设置页脚

eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″

16.设置页眉到顶端边距为2厘米

eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035

17.设置页脚到底边距为3厘米

eole.ActiveSheet.PageSetup.FooterMargin=3/0.035

18.设置顶边距为2厘米

eole.ActiveSheet.PageSetup.TopMargin=2/0.035

19.设置底边距为4厘米

eole.ActiveSheet.PageSetup.BottomMargin=4/0.035

20.设置左边距为2厘米

eole.ActiveSheet.PageSetup.LeftMargin=2/0.035

21.设置右边距为2厘米

eole.ActiveSheet.PageSetup.RightMargin=2/0.035

22.设置页面水平居中

eole.ActiveSheet.PageSetup.CenterHorizontally=True

23.设置页面垂直居中

eole.ActiveSheet.PageSetup.CenterVertically=True

24.设置页面纸张大小(1-窄行8 5 11 39-宽行14 11)

eole.ActiveSheet.PageSetup.PaperSize=1

25.打印单元格网线

eole.ActiveSheet.PageSetup.PrintGridlines=True

26.拷贝整个工作表

eole.ActiveSheet.UsedRange.Copy

27.拷贝指定区域

eole.ActiveSheet.Range(″A1:E2″).Copy

28.粘贴

eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial

29.在第2行之前插入一行

eole.ActiveSheet.Rows(2).Insert

30.在第2列之前插入一列

eole.ActiveSheet.Columns(2).Insert

31.设置字体

eole.ActiveSheet.Cells(2,1).Font.Name=″黑体″

32.设置字体大小

eole.ActiveSheet.Cells(1,1).Font.Size=25

33.设置字体为斜体

eole.ActiveSheet.Cells(1,1).Font.Italic=True

34.设置整列字体为粗体

eole.ActiveSheet.Columns(1).Font.Bold=True

35.清除单元格公式

eole.ActiveSheet.Cells(1,4).ClearContents

36.打印预览工作表

方法一:eole.ActiveSheet.PrintPreview

方法二:

eole.ExecuteExcel4Macro("PRINT(1,,,1,,TRUE,,,,,,1,,,TRUE,,FALSE)")

37.打印输出工作表

方法一:eole.ActiveSheet.PrintOut

方法二:

eole.ExecuteExcel4Macro("PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)")

38.工作表另为

eole.ActiveWorkbook.SaveAs(″c:\temp\22.xls″)

39.放弃存盘

eole.ActiveWorkbook.saved=True

40.关闭工作簿

eole.Workbooks.close

41.退出Excel

eole.quit

42. 合并

string worksheet, beginRowcol, EndRowCol

MyOLE.ActiveWorkBook.Sheets(worksheet).Range( BeginRowCol+":"+EndRowCol).Select

MyOLE.ActiveWorkBook.Sheets(worksheet).Range(BeginRowCol+":"+EndRowCol).Merge

43. sheet改名

MyOLE.ActiveWorkBook.Sheets(olename).select

MyOLE.ActiveWorkBook.Sheets(olename).name=newname

44. 举例

MyOLE=Create OLEObject

ConnectErr = MyOLE.ConnectToNewObject ("excel.Application") MyOLE.visible=false

//打开指定的XLS文件激活workbooks

MyOLE.application.workbooks.Open (FilePath)

//对XLS文件进行了改动以后,在关闭该文件时是否需要向用户提出警告。 MyOLE.Application.DisplayAlerts = False

if isnull(MyOLE) then return -1 ;

if ConnectErr <0 then

choose case ConnectErr

case -1

messagebox('错误提示','无效的调用')

case -2

messagebox('错误提示','类名没发现')

case -3

messagebox('错误提示','对象不能创建') case -4

messagebox('错误提示','文件不能连接') case -5

messagebox('错误提示','不能连接现在的对象') case -6

messagebox('错误提示','文件无效')

case -7

messagebox("错误提示","文件不存在或已经打开") case -8

messagebox("错误提示","服务器不能装载选择的文件")

case -9

messagebox("错误提示","其他错误")

end choose

return -1

end if

搜索更多相关主题的帖子: Excel 技巧

UID24441 阅读权限150 性别男 在线时间251 小时 注册时间2006-6-22 最后登录2009-4-10 查看详细资料

TOP

维护论坛纯净人人有责,灌水严惩!举报有奖

ribut9225

大区版主

帖子3731 精华1 无忧币7391 论坛积分4852

发短消息 加为好友 当前离线 个人博客 沙发 大 中 小 发表于 2008-12-8 11:09 只看该作者

信产部权威认证:弱电安防培训 | 培训光盘免费看 | 专家门诊百期 | 【51CTO技术沙龙】全方位解析虚拟化(视频、PPT)

PB中操作Excel的技巧集二 2007-09-

12 13:11ole_object.Columns(c).Select

//设置对齐方式

ole_object.Selection.HorizontalAlignment = -4131 //居左

ole_object.Selection.HorizontalAlignment = -4152 //居中

ole_object.Selection.HorizontalAlignment = -4108 //居右

//设置居中对齐

ole_object.Rows("1:1").HorizontalAlignment = 3

//设置字体

ole_object.Rows("1:1").Font.Name = "宋体"

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.FontStyle = "常规"

ole_object.Rows("1:1").Font.Size = 20

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.Bold = false //ole_object.Rows("1:" + string(ll_rowcnt)).Font.Strikethrough = False

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.Superscript = False

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.Subscript = False

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.OutlineFont = False

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.Shadow = False

//ole_object.Rows("1:" + string(ll_rowcnt)).Font.Underline = 1 //ole_object.Rows("1:" + string(ll_rowcnt)).Font.ColorIndex = 1 //ole_object.Rows("1:" + string(ll_rowcnt)).RowHeight = UnitsToPixels( dec ( dw_1.describe ( "DataWindow.Detail.Height" ) ) , yUnitsToPixels! )

//如何将数据导出到Excel并中合并单元格?

//这是我现在的代码,如何讲部门那一列内容一样的单元格合并?

Dim uExcel As Excel.Application

Dim uExcelBook As Excel.Workbook

Dim intI As Integer

Dim intFgRow As Integer

If fgEmployee.Rows > 1 Then

Set uExcel = New Excel.Application

uExcel.Visible = False

uExcel.SheetsInNewWorkbook = 1

Set uExcelBook = uExcel.Workbooks.Add

With uExcel.Rows(1).Font

.Name = "宋体"

.Size = 9

.ColorIndex = 3

End With

uExcel.ActiveSheet.Rows.HorizontalAlignment = xlVAlignCenter

uExcel.ActiveSheet.Rows.VerticalAlignment = xlVAlignCenter

uExcel.Columns(1).ColumnWidth = 9

uExcel.ActiveSheet.Cells(1, 1).Value = "序号"

For intFgRow = 1 To intColsCount

uExcel.Columns(intFgRow + 1).ColumnWidth = 11 uExcel.ActiveSheet.Cells(1, intFgRow + 1).Value = "部门"

Next

uExcel.Columns(intColsCount + 2).ColumnWidth = 40 uExcel.ActiveSheet.Cells(1, intColsCount + 2).Value = "员工"

uExcel.Columns(intColsCount + 3).ColumnWidth = 40 uExcel.ActiveSheet.Cells(1, intColsCount + 3).Value = "合计"

End If

For intI = 1 To fgEmployee.Rows - 1

vfp setwindowpos篇五:SendMessage

SendMessage->>Windows消息大全

2011-08-27 20:05

转载自 分享

最终编辑 努力飞的人

Windows是一个消息驱动式系统,SendMessage是应用程序和应用程序之间进行消息传递的主要手段之一,这里我搜集整理了SendMessage函数的详细参数介绍,以备自用。 VFP声明:

DECLARE INTEGER SendMessage IN user32;

INTEGER hWnd,;

INTEGER wMsg,;

INTEGER wParam,;

INTEGER lParam

参数1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。

参数2:wMsg-用于区别其他消息的常量值.

参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.

参数4: lParam-通常是一个指向内存中数据的指针。

--------------------------------------------------

wParam表示是何种Windows消息

lParam表示某条Windows消息的具体内容的指针,它实际指向存储那个内容的内存地址 wParam和lParam是Windows消息机制的两个最重要参数,整个Windows依靠这两个参数传递各种各样的消息,首先是wParam,它表示此次的消息类型是什么?是键盘?是鼠标?键盘里又分按下还是抬起,鼠标里又分是单击还是双击,等等。lParam是一个指针,它指向本条消息所存储的信息的内存区域的首地址,很显然,这个地址存放的东西是很灵活的,比如鼠标消息,那么这里可能存放的是各键的状态或者光标的X,Y座标。换成键盘消息,则是键码等等。总之,wParam区分了类别,lParam存放了该类别所存储的信息。因为VB没有指针,好在这里并不需要更多的指针操作,只是记录一个首地址,所以可以用Long来代替 --------------------------------------------------

==================================================================

wMsg参数常量值:

==================================================================

#DeFine WM_CREATE 0x01 创建一个窗口

#DeFine WM_DESTROY 0x02当一个窗口被破坏时发送

#DeFine WM_MOVE 0x03移动一个窗口

#DeFine WM_SIZE 0x05改变一个窗口的大小

#DeFine WM_ACTIVATE 0x06一个窗口被激活或失去激活状态

#DeFine WM_SETFOCUS 0x07一个窗口获得焦点

#DeFine WM_KILLFOCUS 0x08一个窗口失去焦点

#DeFine WM_ENABLE 0x0A一个窗口改变成Enable状态

#DeFine WM_SETREDRAW 0x0B设置窗口是否能重画

#DeFine WM_SETTEXT 0x0C应用程序发送此消息来设置一个窗口的文本

#DeFine WM_GETTEXT 0x0D应用程序发送此消息来复制对应窗口的文本到缓冲区

#DeFine WM_GETTEXTLENGTH 0x0E得到与一个窗口有关的文本的长度(不包含空字符) #DeFine WM_PAINT 0x0F要求一个窗口重画自己

#DeFine WM_CLOSE 0x10当一个窗口或应用程序要关闭时发送一个信号

#DeFine WM_QUERYENDSESSION 0x11当用户选择结束对话框或程序自己调用ExitWindows函数

#DeFine WM_QUIT 0x12用来结束程序运行#DeFine WM_QUERYOPEN 0x13当用户窗口恢复以前的大小位置时,把此消息发送给某个图标

#DeFine WM_ERASEBKGND 0x14当窗口背景必须被擦除时(例在窗口改变大小时) #DeFine WM_SYSCOLORCHANGE 0x15当系统颜色改变时,发送此消息给所有顶级窗口

#DeFine WM_ENDSESSION 0x16当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束

#DeFine WM_SHOWWINDOW 0x18当隐藏或显示窗口是发送此消息给这个窗口

#DeFine WM_ACTIVATEAPP 0x1C发此消息给应用程序哪个窗口是激活的,哪个是非激活的 #DeFine WM_FONTCHANGE 0x1D当系统的字体资源库变化时发送此消息给所有顶级窗口 #DeFine WM_TIMECHANGE 0x1E当系统的时间变化时发送此消息给所有顶级窗口

#DeFine WM_CANCELMODE 0x1F发送此消息来取消某种正在进行的摸态(操作)

#DeFine WM_SETCURSOR 0x20如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口

#DeFine WM_MOUSEACTIVATE 0x21当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

#DeFine WM_CHILDACTIVATE 0x22发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小

#DeFine WM_QUEUESYNC 0x23此消息由基于计算机的训练程序发送,通过

WH_JOURNALPALYBACK的hook程序分离出用户输入消息

#DeFine WM_GETMINMAXINFO 0x24此消息发送给窗口当它将要改变大小或位置

#DeFine WM_PAINTICON 0x26发送给最小化窗口当它图标将要被重画

#DeFine WM_ICONERASEBKGND 0x27此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画

#DeFine WM_NEXTDLGCTL 0x28发送此消息给一个对话框程序去更改焦点位置

#DeFine WM_SPOOLERSTATUS 0x2A每当打印管理列队增加或减少一条作业时发出此消息 #DeFine WM_DRAWITEM 0x2B当button,combobox,listbox,menu的可视外观改变时发送 #DeFine WM_MEASUREITEM 0x2C当button, combobox, listbox, listviewcontrol, or menuitem 被创建时

#DeFine WM_VKEYTOITEM 0x2E此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息

#DeFine WM_CHARTOITEM 0x2F此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息

#DeFine WM_SETFONT 0x30当绘制文本时程序发送此消息得到控件要用的颜色

#DeFine WM_GETFONT 0x31应用程序发送此消息得到当前控件绘制文本的字体

#DeFine WM_SETHOTKEY 0x32应用程序发送此消息让一个窗口与一个热键相关连 #DeFine WM_GETHOTKEY 0x33应用程序发送此消息来判断热键与某个窗口是否有关联

#DeFine WM_QUERYDRAGICON 0x37此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标

#DeFine WM_COMPAREITEM 0x39发送此消息来判定combobox或listbox新增加的项的相对位置

#DeFine WM_COMPACTING 0x41显示内存已经很少了

#DeFine WM_WINDOWPOSCHANGING 0x46发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数

#DeFine WM_WINDOWPOSCHANGED 0x47发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数

#DeFine WM_POWER 0x48当系统将要进入暂停状态时发送此消息

#DeFine WM_COPYDATA 0x4A当一个应用程序传递数据给另一个应用程序时发送此消息 #DeFine WM_CANCELJOURNA 0x4B当某个用户取消程序日志激活状态,提交此消息给程序 #DeFine WM_NOTIFY 0x4E当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口

#DeFine WM_INPUTLANGCHANGEREQUEST 0x50当用户选择某种输入语言,或输入语言的热键改变

#DeFine WM_INPUTLANGCHANGE 0x51当平台现场已经被改变后发送此消息给受影响的最顶级窗口

#DeFine WM_TCARD 0x52当程序已经初始化windows帮助例程时发送此消息给应用程序 #DeFine WM_HELP 0x53此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

#DeFine WM_USERCHANGED 0x54当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息 #DeFine WM_NOTIFYFORMAT 0x55公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构

#DeFine WM_CONTEXTMENU ??当用户某个窗口中点击了一下右键就发送此消息给这个窗口 #DeFine WM_STYLECHANGING 0x7C当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口

#DeFine WM_STYLECHANGED 0x7D当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口

#DeFine WM_DISPLAYCHANGE 0x7E当显示器的分辨率改变后发送此消息给所有的窗口

#DeFine WM_GETICON 0x7F此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄

#DeFine WM_SETICON 0x80程序发送此消息让一个新的大图标或小图标与某个窗口关联 #DeFine WM_NCCREATE 0x81当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送

#DeFine WM_NCDESTROY 0x82此消息通知某个窗口,非客户区正在销毁

#DeFine WM_NCCALCSIZE 0x83当某个窗口的客户区域必须被核算时发送此消息 #DeFine WM_NCHITTEST 0x84移动鼠标,按住或释放鼠标时发生

#DeFine WM_NCPAINT 0x85程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时 #DeFine WM_NCACTIVATE 0x86此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态

#DeFine WM_GETDLGCODE 0x87发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应

#DeFine WM_NCMOUSEMOVE 0xA0当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体

#DeFine WM_NCLBUTTONDOWN 0xA1当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息

#DeFine WM_NCLBUTTONUP 0xA2当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息

#DeFine WM_NCLBUTTONDBLCLK 0xA3当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息

#DeFine WM_NCRBUTTONDOWN 0xA4当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息

#DeFine WM_NCRBUTTONUP 0xA5当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息

#DeFine WM_NCRBUTTONDBLCLK 0xA6当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息

#DeFine WM_NCMBUTTONDOWN 0xA7当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息

#DeFine WM_NCMBUTTONUP 0xA8当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息

vfp setwindowpos篇六:MFC自定义消息

MFC自定义消息

第一步:定义消息。

推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

#define WM_MY_MESSAGE (WM_USER+100)

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)

{

// TODO: 处理用户自定义消息

...

return 0;

}

第三步:在类头文件的AFX_MSG块中说明消息处理函数:

class CMainFrame:public CMDIFrameWnd

{

...

// 一般消息映射函数

protected:

// {{AFX_MSG(CMainFrame)

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnTimer(UINT nIDEvent);

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

}

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

ON_WM_TIMER()

ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义

消息:

static UINT WM_MY_MESSAGE=RegisterWindowMessage("User");

并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。

当需要使用自定义消息时,可以在相应类中的函数中调用函数PostMessage或SendMessa ge发送消息PoseMessage(WM_MY_MESSAGE,O,O); 如果向其他进程发送消息可通过如下方法

发送消息:

DWORD result;

SendMessageTimeout(wnd->m_hWnd, // 目标窗口

WM_MY_MESSAGE, // 消息

0, // WPARAM

0, // LPARAM

SMTO_ABORTIFHUNG |

SMTO_NORMAL,

TIMEOUT_INTERVAL,

&result);

以避免其它进程如果被阻塞而造成系统死等状态。

可是如果需要向其它类(如主框架、子窗口、视类、对话框、状态条、工具条或其他控 件等)发送消息时,上述方法显得无能为力,而在编程过程中往往需要获取其它类中的某个 识别信号,MFC框架给我们造成了种种限制,但是可以通过获取某个类的指针而向这个类发送

消息,而自定义消息的各种动作则在这个类中定义,这样就可以自由自在的向其它类发送 消息了。

下面举的例子叙述了向视类和框架类发送消息的方法:

在主框架类中向视类发送消息:

视类中定义消息:

ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //定义消息映射 视类定义消息处理函数:

// 消息处理函数

LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam)

{

// TODO: 处理用户自定义消息

...

return 0;

}

//发送消息的测试函数

void CMainFrame::OnTest()

{

CView * active = GetActiveView();//获取当前视类指针

if(active != NULL)

active->PostMessage(WM_MY_MESSAGE,0,0);

}

在其它类中向视类发送消息:

//发送消息的测试函数

void CMainFrame::OnTest()

{

CMDIFrameWnd *pFrame;

CMDIChildWnd *pChild;

CView *pView;

//获取主窗口指针

pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

// 获取子窗口指针

pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

//获取视类指针

pView = pChild->GetActiveView();

if(pView != NULL)

pView->PostMessage(WM_MY_MESSAGE,0,0);//发送消息

}

其余步骤同上。

在视类中向主框架发送消息:

首先在主框架中定义相关的消息,方法同上,然后在发送消息的函数中添加代码如下

//发送消息的测试函数

void CMessageView::OnTest()

{

CFrameWnd * active = GetActiveFrame();//获取当前主窗口框架指针

if(active != this)

active->PostMessage(WM_MY_MESSAGE,0,0);

return 0;

}

在其它类中向不同的类发送消息可依次方法类推,这样我们的程序就可以的不受限制 向其它类和进程发送消息,而避免了种种意想不到的风险。

下面一个例子程序为多文档程序里在一对话框中向视类发送消息,详述了发送自定义消 息的具体过程。

实现步骤:

第一步:在VC++中新建工程Message,所有ClassWizard步骤选项均为缺省,完成。

第二步:在主菜单中添加测试菜单为调出对话框,在框架类中建立相应函数OnTest()

第三步:在资源中建立对话框,通过ClassWizard添加新类TestDialog,添加测试按钮,

在对话框类中建立相应函数OnDialogTest()

//通过对话框按钮发送消息的函数

void TestDialog::OnDialogTest()

{

CMDIFrameWnd *pFrame;

CMDIChildWnd *pChild;

CView *pView;

//获取主窗口指针

pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

// 获取子窗口指针

pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

//获取视类指针

pView = pChild->GetActiveView();

if(active != NULL)

active->PostMessage(WM_MY_MESSAGE,0,0);//发送消息

}

在Message.h头文件中添加如下语句:

static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");

第四步:在视类中添加自定义消息:

在头文件MessageView.h中添加消息映射

protected:

//{{AFX_MSG(CMessageView)

//}}AFX_MSG

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //此行为添加代码 DECLARE_MESSAGE_MAP()

在视类文件MessageView.cpp中的消息映射中添加自定义消息映射

BEGIN_MESSAGE_MAP(CMessageView, CView)

//{{AFX_MSG_MAP(CMessageView)

//}}AFX_MSG_MAP

// Standard printing commands

ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //此行添加代码定义唯一消息

END_MESSAGE_MAP()

添加相应的0消息处理函数

LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam)

{

CRect rect;

GetClientRect(&rect);

InvalidateRect(&rect);

test=!test;

return 0;

}

在MessageView.h中添加布尔变量 public:BOOL test;

在视类构造函数中初始化 test变量:test=FALSE;

修改CMessageView::OnDraw()函数

void CMessageView::OnDraw(CDC* pDC)

{

CMessageDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// 以下程序显示消息响应效果

if(test)

pDC->TextOut(0,0,"消息响应!");

}

第五步:显示测试对话框

在MainFrame类中包含对话框头文件:

vfp setwindowpos篇七:Authorware的外部消息接口

Authorware的外部消息接口

对于开发authorware的UCD来说,最困难的就是如何截取authorware在运行过程中对我们有用的消息,C++程序员可能会毫不犹豫的说:使用钩子函数吧,把消息一一 勾出;dephi程序员可能会说:使用dephi的消息触发器吧;VB程序员说:使用窗口回 调函数吧;C++bulider程序员会说:DEPHI兄弟怎么说我就怎么做;VFP程序员会说:?????????????(有没有搞错?)

其实对于接收处理消息,dephi是最得心应手的。但归结起来总共有三种方法: 1 使用dephi本身的消息触发器功能 但该功能只能被窗体和控件使用并不适合接收外部 程序的消息

2 使用窗口子类化的方法。 也即使用窗口回调函数,通过向指定窗口插入一个合法的窗口过程来接收并处理消息

3 使用系统钩子函数。系统钩子函数的好处是可以对当前所有的应用程序进行监视,可以获取你想得到的消息,据我所知,有个著名的系统工具“键盘幽灵”就使用了该技术。系统钩子主要用来监视键盘和鼠标消息。

在这里,我将通过第二种和第三种方法来举例说明如何接收处理authorware的消息。

一 窗口子类化技术

当一个windows应用程序运行后,该程序就建立了一个窗口过程,用于接收处理消息,当我们要在程序中处理一个在主窗口过程中未被处理的消息时,就可以再建立一个窗口过程使我们能够处理我们想要处理的消息。对于authorware这样一个二次开发平台来说,我们不可能在authorware程序中主动去编译我们的窗口过程,因为我们不是authorware的开发人员,而且authorware也不是一个可视化程序开发平台,它只是 一个多媒体快速开发工具,幸好它提供了支持动态连接库dll的接口,也即UCD,这就给我们这些所谓第三方开发人员借助第三方开发工具动手的好机会,下面我就本人作的一个例子来简单说明一下怎样利用窗口子类化技术截取authorware中的消息。 这个例子的作用是:运行后使authorware程序具有屏保的功能。 分析:一个屏保至少应具有这样一些特点:

1 它必须全屏幕运行,和当前分辨率无关,而且无标题栏,菜单栏 2 它必须隐藏鼠标,在退出后必须能恢复鼠标

3 它必须能够响应鼠标和键盘消息,且响应之后必须关闭本程序 4 它必须只能运行一次,不能同时运行两个程序

在这里,第三条是是体现窗口子类化技术的要点。

该函数实现代码如下:

function X_coolscrsav(awparam:AWPARAM_PTR):boolean;stdcall;//cool屏保 var

oldpoint:Tpoint;

screenheight,screenwidth:integer;

oldstyle:longint;

hmenu:Thandle;

begin

awhandle:=awparam.hwnd;

if awparam.authoring=true then

begin

messagebox(awhandle,'请打包后使用!','提示',MB_OK);//如果当前在设计期状态则不运行

exit;

result:=false;

end;

getcursorpos(oldpoint);

oldx:=oldpoint.x;

oldy:=oldpoint.y; //取得当前鼠标指针位置

screenheight:=screen.Height;

screenwidth:=screen.Width; //利用screen对象获取当前屏幕宽和高

showcursor(false); //隐藏鼠标

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,0,0) ; //向系统通知屏保已

//经运行,以防止运行多个实例

ShowWindow(FindWindow('Shell_TrayWnd', '', SW_HIDE); //隐藏任务栏

oldstyle:=getwindowlong(awhandle,GWL_EXSTYLE);

oldstyle:=oldstyle and not WS_SYSMENU and not WS_CAPTION;

setwindowlong(awhandle,GWL_STYLE,oldstyle); //去除标题栏和菜单栏(如果有的话)

setwindowpos(awhandle,HWND_TOPMOST,0,0,screenwidth,screenheight,SWP_SHOWWINDOW); //设置窗口为全屏

prewndproc:=pointer(getwindowlong(awhandle,GWL_WNDPROC));//获取原窗口过程指针

oldwndproc:=pointer(setwindowlong(awhandle,GWL_WNDPROC,longint(@newwinproc)));//设置新的窗口过程

result:=true;

end;

新建窗口过程:

function newwinproc(handle:Thandle;msg,wparam,lparam:longint):longint;stdcall;

var

ProcessID,cpid : Cardinal;

newx,newy:integer;

newpoint:Tpoint;

dx,dy:integer;

begin

getcursorpos(newpoint);

newx:=newpoint.x ;

newy:=newpoint.y ;

dx:=abs(newx-oldx);

dy:=abs(newy-oldy); //判断鼠标指针移动的距离

if ( (msg=WM_KEYUP) or (msg=WM_LBUTTONUP) or (msg=WM_RBUTTONUP) or (msg=WM_MBUTTONUP) or (dx>=5) or (dy>=5) ) then//这里就是响应消息的地方,如果有键盘消息或鼠标按下或指针移动距离超过5个像素点,则退出

begin

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,0,0) ;

ShowWindow(FindWindow('Shell_TrayWnd', '', SW_RESTORE);//还原任务栏 ProcessID := GetWindowThreadProcessID(awhandle ,@cpid);

TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,cpid),1);

//因为考虑到authorware退出后有logo 画面,所以这里采用关闭句柄的办法退出 //否则就用下面的两行代码退出

// setwindowlong(handle,GWL_WNDPROC,longint(prewndproc));//将窗口过程还原到 原窗口过程

//sendmessage(handle,WM_COMMAND,SW_CLOSE);//向程序发退出消息 end;

result:=callwindowproc(oldwndproc,handle,msg,wparam,lparam); //窗口回调 end;

二 HOOK 技术 (钩子函数)

利用安装一个系统钩子同样能够对消息监视,它不同于窗口子类化的技术的是: 它可以对系统中所有的窗口的消息进行监视,系统开销也较大一些,如果只是对 authorware的窗口消息监视,最好就用子类化方法,不推荐使用,但为了了解,在 这里还是举一个例子来说明一下。

这里以xjapi.u32中的X_closebyrbutton函数举例。该函数的作用是如果用户在authorware 程序中单击右键则退出,很显然我们要钩的消息就是鼠标右键按下(或抬起)的消息。 先简要介绍一下需要用到的几个重要的windows api 函数(使用pascal语言描述): SetWindowsHookEx(idHook:integer;HookProc:longint,HInstance:Hmode,

dwThreadId:wORD):HHOOK;

作用:安装钩子

详细说明请参加windows SDK 帮助

MouseProc( nCode:integer; wParam, lParam:longint):longint;

作用:处理钩来的消息函数过程,它是个回调函数

详细说明请参加windows SDK 帮助

CallNextHookEx( hhk: HHOOK; nCode:integer; wParam, lParam:longint):longint; 作用:传递钩子信息到下一个钩子链

详细说明请参加windows SDK 帮助

UnHookWindowsHookEx(hook:HHOOK):boolean;

作用:卸下钩子

详细说明请参加windows SDK 帮助

下面是实现过程

给用户直接调用的函数:

var

awhandle:Thandle;

HookedAlready:Boolean;

Ourhook:HOOK;

……

function X_closebyRbutton(awparam:AWPARAM_PTR):boolean;stdcall;

begin

try

awhandle:=awparam.hwnd;//awhandle 必须作为全局变量声明

if HookedAlready then exit; //hookedalready 必须作为全局变量声明,作用是保证只安装

//一次钩子

ourHook:=SetWindowsHookEx(WH_MOUSE,HookProc,HInstance,0);

//ourhook必须作为全局变量声明,这里开始安装一个鼠标消息钩子

HookedAlready:=True;//设置标志变量,标示钩子已安装

result:=true;

except

result:=false;

end;

end;

钩子回调函数过程:

function HookProc(Code:integer; wParam: longint; lParam: Longint):longint;stdcall; begin

if (wParam=WM_RBUTTONUP) then //假如消息是右键按下

begin

if getforegroundwindow=awhandle then //假如当前工作窗口是authorware窗口 begin

UnHookWindowsHookEx(ourHook); //卸下钩子

HookedAlready:=False;; //恢复标志位

sendmessage(getforegroundwindow,WM_SYSCOMMAND,SC_CLOSE,0);//向当前窗口发送关闭消息

end;

end;

result:=CallNextHookEx(ourHook,Code,wParam,lParam);//否则钩下条消息

end;

以上就是中国招生考试网http://www.chinazhaokao.com/带给大家不一样的精彩成考报名。想要了解更多《vfp setwindowpos》的朋友可以持续关注中国招生考试网,我们将会为你奉上最全最新鲜的成考报名内容哦! 中国招生考试网,因你而精彩。

相关热词搜索:setwindowpos setwindowpos用法 mfcsetwindowpos

最新推荐成考报名

更多
1、“vfp setwindowpos”由中国招生考试网网友提供,版权所有,转载请注明出处。
2、欢迎参与中国招生考试网投稿,获积分奖励,兑换精美礼品。
3、"vfp setwindowpos" 地址:http://www.chinazhaokao.com/yingyu/yingyuziyuan/127222.html,复制分享给你身边的朋友!
4、文章来源互联网,如有侵权,请及时联系我们,我们将在24小时内处理!