大家好,最近在研究C#软键盘,参看了这个博客
http://www.cnblogs.com/youzai/archive/2008/05/19/1202732.html其中通过
4private void HookOnMouseActivity(object sener, HookEx.MouseExEventArgs e) {
 5    Point location = e.Location;
 6
 7    if (e.Button == MouseButtons.Left) {
 8        Rectangle captionRect = new Rectangle(this.Location, new Size(this.Width, 
 9            SystemInformation.CaptionHeight));
10        if (captionRect.Contains(location)) {
11            NativeMethods.SetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE,
12                (int)NativeMethods.GetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE)
13                 & (~KeyboardConstaint.WS_DISABLED));
14            NativeMethods.SendMessage(this.Handle, KeyboardConstaint.WM_SETFOCUS, IntPtr.Zero, IntPtr.Zero);
15        } else {
16            NativeMethods.SetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE,
17                (int)NativeMethods.GetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE) | 
18                 KeyboardConstaint.WS_DISABLED);
19        }
20    }
21}让窗体不能获得焦点。现在我希望在父窗体FormA中,Show出一个类似于软键盘功能的子窗体,但是正常情况下,Show出子窗体的同时,父窗体就失去了焦点,同理,父窗体得到焦点的时候,子窗体又失去焦点了。这会导致程序的使用效果完全不是我想要的样子。
于是我完全照搬上面链接的实现方法,在FormA中Show出这个实现好的软键盘,但是发现这个软键盘是对FormA不起作用的,例如FormA中有个TextBox,然后点击软键盘中的按钮,软键盘竟然获得了焦点,同时FormA失去了焦点。但是这个软键盘可以给其他程序使用,例如QQ。
所以,我在想这是不是C#的机制的问题?
是否有其他方法来实现我想要的效果呢?
谢谢大家!

解决方案 »

  1.   

    额,1)你是想在自己的程序中实现软键盘?感觉是你自己设计的问题,弄成悬浮框,toolbar,或窗体传递信息就是了,用不到全局钩子hook2)还是这个软键盘给别人的程序用?《=这个你不是实现了吗?也比较简单,放在单独的程序里面跑就是了,用的时候叫出来,不用的时候杀掉
      

  2.   


    1)对,我在自己程序中实现软键盘,就像你说的“悬浮框”。我现在自己的悬浮框,点击的时候总会获得焦点,同时会让父窗体失去焦点。
    2)这个软键盘不是别的程序用的。其实我的疑惑就在于,是不是因为两个Form在一个App中跑,所以导致软键盘失效。放在单独的App中也许能解决这个问题。但是最好还是不要这么做。