pb+api实际应用(7)

2019-03-10 20:17

Function long GetExitCodeProcess(long hProcess, long lpexitcode) Library \定义实例变量:

Constant long STILL_ACTIVE = 259

Constant long PROCESS_QUERY_INFORMATION = 1024 定义窗口级函数

wf_ShellWait(string cCommandLine) long hShell ,hProc, lExit hShell = run(cCommandLine)

hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell) Do

GetExitCodeProcess(hProc, lExit ) Yield ()

Loop until lExit = STILL_ACTIVE

//调用 ShellWait,控制权将不会交给一个过程,直到调用该过程的程序结束

27、如何为你的应用程序设置热键? 实现步骤:

外部函数引用声明:

Function long SendMessage (long hwnd , long wMsg , long wParam, long lParam) Library \

Function long DefWindowProc (long hwnd,long wMsg, long wParam, long lParam) Library \定义实例变量:

Constant long WM_SETHOTKEY = 50 Constant long WM_SHOWWINDOW = 24

Constant long HK_SHIFTA = 321//注释:Shift + A Constant long HK_SHIFTB = 322//注释:Shift * B

Constant long HK_CONTROLA = 577//注释:Control + A Constant long HK_ALTZ = 1114

//请注意组合键的值必须以低/高位字节的格式进行声明。也就是说是一个十六进制的数字。后两位是低端字节,如

41=a;前两位是高端字节,如01=1=shift。 窗口w_example的open事件: long erg

this.WindowState = Minimized!//注释:让windows知道你想要的热键。 erg = SendMessage(handle(this), WM_SETHOTKEY,HK_ALTZ, 0) //注释:检查函数是否执行成功 If erg <> 1 Then

messagebox(\提示\你需要重新注册另一个热键\) End If

//注释:告诉windows热键按下后做什么--显示窗口

erg = DefWindowProc(handle(this), WM_SHOWWINDOW,0, 0)

28、如何设定屏幕颜色数

//原则上,只改这一次,下一次开机会还原,但如果需重开机,才会Update Registry中的设定,并重开机。 如果要永久设定其设定值,请将

b = ChangeDisplaySettings(DevM, 0) 改成

b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

//注:DevM.dmBitsPerPel 便是设定颜色数,其实应说每个Pixel要多少Bits来显示

//4 --> 16色 //8 --> 256色

//16 --> 65536色 以此类推 实现步骤: 定义结构:

type devmode from structure string dmdevicename integer dmspecversion integer dmdriverversion integer dmsize

integer dmdriverextra long dmfields

integer dmorientation integer dmpapersize integer dmpaperlength integer dmpaperwidth integer dmscale integer dmcopies

integer dmdefaultsource integer dmprintquantity integer dmcolor integer dmduplex

integer dmyresolution integer dmttoption integer dmcollate string dmformname

integer dmunusedpadding long dmbitsperpel long dmpelswidth long dmpelsheight long dmdisplayflags

long dmdisplayfrequency end type

定义外部函数引用声明:

Function long EnumDisplaySettings (long lpszDeviceName, long iModeNum , lpDevMode As DevMode) Library \\

Function long ChangeDisplaySettings (DevMode lpDevMode , long dwflags) Library \

Function long ExitWindowsEx (long uFlags , long dwReserved ) Library \定义实例变量:

Constant long EWX_REBOOT = 2// 注释: 重开机 Constant long CCDEVICENAME = 32 Constant long CCFORMNAME = 32

Constant long DM_BITSPERPEL = 262144

Constant long DISP_CHANGE_SUCCESSFUL = 0 Constant long DISP_CHANGE_RESTART = 1 Constant long CDS_UPDATEREGISTRY = 1

DevMode DevM 实现代码:

w_example窗口的命令按钮cb_1.clicked: boolean a long i long b long ans

a = EnumDisplaySettings(0, 0, DevM) //注释:Initial Setting DevM.dmBitsPerPel = 8 //注释:设定成256色 DevM.dmFields = DM_BITSPERPEL

b = ChangeDisplaySettings(DevM, 0) If b = DISP_CHANGE_RESTART Then

ans = messagebox(\提示\要重开机设定才能完成,重开?\question!,yesno!)

If ans = 1 Then

b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

ExitWindowsEx(EWX_REBOOT, 0)//这个api函数只能在win98上使用,win nt以上须采用别的方法 End If Else

If b <> DISP_CHANGE_SUCCESSFUL Then Messagebox(\提示\设定有误\ End If End If

29、彩色BMP档转成灰度

将RGB想成3D之X,Y,Z轴,则BMP的RGB为(r,g,b)与座标(Y,Y,Y)距离最小时的Y即为灰度值

Y = 0.29900 * R + 0.58700 * G + 0.11400 * B

整数化

Y = ( 9798*R + 19235*G + 3735*B) / 32768 RGB(Y, Y, Y)就可以了 实现步骤:

外部函数引用声明:

Funcation long GetPixel (long hdc , long x , long Y) Library \Funcation long SetPixelV (long hdc , long x , long Y , long crColor ) Library \

Funcation long GetDC(long handle) library \定义实例变量: picture tmpPic

窗口w_example的open事件:

P_1.setredraw(false)// 注释:设定所有Pixel的改变不立即在pictureBox上显示

tmpPic = Picture1.Picture

窗口w_example的cb_1.clicked: long width5, heigh5, rgb5 long hdc5, i , j

long bBlue, bRed, bGreen long y

width5 = unitstopixels(P_1.Width,xunitstopixels!) heigh5 =unitstopixels(P_1.height,yunitstopixels!) hdc5 = getdc(handle(this) For i = 1 To width5 For j = 1 To heigh5

rgb5 = GetPixel(hdc5, i, j) bBlue = Blue(rgb5) bRed = Red(rgb5)

bGreen = Green(rgb5)

Y = (9798 * bRed + 19235 * bGreen + 3735 * bBlue) \\ 32768 rgb5 = RGB(Y, Y, Y)

SetPixelV (hdc5, i, j, rgb5) Next Next

P_1.setredraw(true)// 注释:此时才真正显示Picture End Sub

w_example窗口级函数:

Function long Red(long mlColor )

return wf_and(mlColor,255)//对mlcolor进行位与计算 Function long Green(long mlColor ) return wf_and((mlColor/256) ,255) Function long Blue(long mlColor)

return wf_and ((mlColor /65536) ,255)

30、如何将的游标显示成动画游标

动画在 Windows 底下是 .ani 格式的档案, 要显示此类游标,首先要利用LoadCursorFromFile API 载入.ani 档案, 然或利用 SetSystemCursor API 加以显示。 实现步骤: 定义实例变量

Constant long OCR_NORMAL = 32512 Constant long IDC_ARROW = 32512 外部函数引用声明

Function long LoadCursorFromFile (string lpFileName ) Library \

Function long LoadCursor (ref long hInstance , long lpCursorName) Library \//注释: modified

Function long SetSystemCursor (long hcur , long id ) Library \实现代码: long hCursor

hCursor = LoadCursorFromFile(\欲显示的 .ani 或 .cur 档案名称\SetSystemCursor(hCursor, OCR_NORMAL)

//若要将鼠标游标还原原状, 则是执行以下叙述: long ll_temp ll_temp=0

hCursor = LoadCursor(0, IDC_ARROW) SetSystemCursor(hCursor, OCR_NORMAL)


pb+api实际应用(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011届高考政治复习阶段重点掌握的考点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: