想做个独立的软键盘,具体是单独的一个对话框,上面0-9,退格,确定,取消一共12个按钮然后其他的对话框里面很多列表(还有GridCtrl控件),我点击列表某行,就弹出上面的软键盘对话框,可具体怎么实现我按软键盘数字键,列表输入数据也就是一个对话框是键盘,其他对话框里面的列表数据怎么通过键盘输入数据

解决方案 »

  1.   

    虚拟键盘消息,用SetWindowsHookEx,然后模拟键盘的按键发送消息
      

  2.   

    各位大侠能否说详细些?刚学vc不久,很多不太清楚键盘已经做了,按钮都画了,至于响应函数不知道应该写啥
    键盘和设置数据的列表(gridctrl)是在2个对话框里,2个类,上面说的用SetWindowText?如何通过键盘按钮响应使另外一个对话框SetWindowText显示数据
      

  3.   

    恩,先谢谢楼上,我看了其实我主要的问题是有个地方比较模糊一般网上做的软键盘都是一个一个得编辑框输入,一个编辑框一个ID一个变量而已,就像你程序里调用的
    m_edtMyInput.SubclassDlgItem( IDC_EDIT_MY_INPUT, this );  可我弄得是GridCtrl列表,整个列表控件时一个ID,可每行都要分别输出,相当于很多编辑框组成的样,当然就要每行都要调出键盘输入,可每行又不分别对应一个ID,这怎么用呢?也不知道我表达清楚没
      

  4.   

    首先:
    1、你的软件盘是和GridCtrl所在的是同一个程序么?假如是这样就简单多了。你可以在GridCtrl里加一个函数,去捕捉当前列表框的HWND,然后SendMessage一个消息给你的软键盘,可以把HWND的发给他,然后让你的软键盘来处理消息。你可以利用这个HWND,去getwindowtext,setwindowtext,setsel,来回改变GridCtrl的文字内容及光标位置。这个道理比较简单。
    2、假如软键盘和GridCtrl不在同一窗口,那必须利用hook去捕捉WM_LBUTTONDOWN消息,我记得DBGRid点下后是动态生成编辑窗口,就是当前只有一个窗口,是编辑状态,而这个窗口的父窗口就应该是GridCtrl,他有个类名,你可以用spy++看下是什么名字,然后利用hook的wm_lbuttondown消息去分析,假如是这个窗口,你就让你的软键盘弹出来。
    假如上面说的你还是觉得模糊,你直接用setwindowlong给窗口添加一些属性,然后捕捉wm_lbuttondown消息去分析这些属性,是否弹出软键盘。这样的话,setwindowlong应该写在gridctrl里更合适一些。
    你要不急,而且还不明白,晚上可以聊,留QQ