WM_COPYDATA进程通信的使用(自制小键盘)
By
admin
at 2017-12-10 • 1人收藏 • 1553人看过
carl有一个进程通信库
process.command
win.sendCopyData
winform.onCopyData
用这个通信 _WM_COPYDATA,,,我分析一个棋牌游戏找发包CALL,找了好久,原来是用_WM_COPYDATA进行通讯的
win.sendCopyData
winform.onCopyData
这个用法还真简单
4 个回复 | 最后更新于 2017-12-10
接着小键盘更新:
增加一个判断键盘是否超出屏幕范围,当超出屏幕范围不能显示完全的话,则将键盘显示在输入框的上部.
function showkey(谁的){ /*var语句声明的变量作用域限于函数内部*/ var x,y,cx,cy = 谁的.getPos(); //主窗口大小 var mainx,mainy,maincx,maincy = mainForm.getPos(); //小键盘大小 var calcx,calcy,calccx,calccy = frmChild.getPos(); //判断有没有在屏幕外 if( (maincy - calccy) >= (y+cy) ){ //下部分没有超出屏幕 frmChild.setPos(x,y+cy); }else { //下部分超出屏幕,则显示在输入框上部 frmChild.setPos(x,y-calccy); } frmChild.show(); win.setTopmost(frmChild.hwnd) }
下面是关于一个输入框的调用:
如果输入框里面的东西发生变化,那么就获取这个消息进行处理,这里是进行比较,如果里面的值大于一个阀值则相对的动作触发.
mainForm.axis3_step.oncommand = function(id,event){ //mainForm.msgbox( mainForm.axis3_step.text ); if( event == 0x100/*_EN_SETFOCUS*/ ){ Selectedit = 3; showkey(owner); }elseif(event == 0x300/*_EN_CHANGE*/){ if(tonumber(mainForm.axis3_step.text) > 65535){ mainForm.axis3_step.text = 65535; mainForm.axis3_step.bgcolor = 255; }else { mainForm.axis3_step.bgcolor = 15793151; } }
数字键盘更新:
修改键盘主窗口显示位置函数
自动判断应该显示的位置,不再局限在全屏模式,窗口模式同样可以进行键盘位置显示判定
function showkey(谁的){ //主窗口再屏幕中的位置xy和主窗口的长宽 var x,y,cx,cy = win.getPos(mainForm.hwnd,true); //输入框在屏幕中的位置xy和自身的长宽 var mainx,mainy,maincx,maincy = win.getPos(谁的.hwnd,true); //小键盘大小长宽 var calcx,calcy,calccx,calccy = frmChild.getPos(); //判断有没有在屏幕外 //主窗口位置y+高度cy 小于 输入框位置mainy+输入框高度maincy+键盘 //高度calccy if((cy+y) < (mainy+maincy+calccy) ){ frmChild.setPos(mainx,mainy-calccy); }else { frmChild.setPos(mainx,mainy+maincy); } frmChild.show(); win.setTopmost(frmChild.hwnd) }
登录后方可回帖
自制数字键盘:
某些时候我们需要点击输入框然后弹出一个特定样式键盘.
现在我遇到的问题是:需要在win平板上面运行程序,程序里有几个输入框,里面限定了必须是数字.也就是说,必须弹出纯数字键盘,而且键盘要足够大,因为用到的是触摸,不能利用鼠标和键盘.
我画了一个数字键盘
键盘只负责发送所对应的数字到主程序窗口,而获取到这个指令之后,由主窗口自己分辨处理.
主窗口处理的思路:
当用户点击任意一个输入框,则将输入框选中标志置为相对应的数字,当用户点击了数字键盘里面的数字,主窗口接收到发送回来的数据,通过这个选中标志进行分别处理.
当然,如果用户点击数字键盘之外的任意地方,数字键盘就自动销毁.
主程序示例如下:
上面点击输入框,用的是 输入框获得焦点 事件.