在一个全屏的界面(如对话框)中,如何将弹出的IME给最小化或者是禁用掉啊,因为它可以跑到界面前面去。请各位高手赐教,谢谢

解决方案 »

  1.   

     GetKeyboardLayout 和 SetKeyboardLayout,这2个函数可以看看
      

  2.   

    我把问题补充一下,IME就是任务栏里那个可以切换输入法的东东,它可以拖到屏幕中间去。当我程序主界面一打开,它会显示在主界面之上,而不是被主界面挡住,而且主界面中没有需要输入的任何控件。怎样把这个拖到屏幕中间的IME给隐藏起来呢?ImmDisableIME我试过了,可能对一单一控件如某个Edit控件有用,但要把IME隐藏起来不行。
      

  3.   

    调用位置不对,请看MSDN的Re:The application must call this function before the first top-level window in the thread receives the WM_CREATE message. This means the application must call this function in one of the following places: 

    1. Any time before calling CreateWindow to create the first top-level window 
    2. In the first top-level window's WM_NCCREATE handler 
      

  4.   

    回复wangk:
    一个基于对话框的程序,我为此程序添加了WM_NCCREATE事件,里面加了代码ImmDisableIME(Getcurrentthread())或者ImmDisableIME(0),但IME还是显示在对话框上面。谁还有其他方法吗?
      

  5.   

    我建议你在CxxApp::InitInstance里面调用Dialog对象实例之前,ImmDisableIME函数必须在线程的第一个窗体被产生前,调用才有效。否则没有用。
      

  6.   

    只把 C:\Documents and Settings\Administrator\桌面\2.bmp 禁用了,没有把C:\Documents and Settings\Administrator\桌面\1.bmp禁用
      

  7.   

    晕,ImmDisableIME只针对线程,有两个线程要禁用,就要在两个线程开始是各调用一次。
      

  8.   

    你要不用ImmDisableIME(-1);把所有线程的IME都禁用了试试?
    也有可能是输入法的问题,没有切换输入法的时候也能看见输入法的提示框。(我机器上出现过几次,但一直没找到是什么原因。要手工切两下Ctrl+Space才能回到正确状态)
      

  9.   

    有次用了-1把机子搞死机了,键盘都用不了。现在这个测试程序里面用-1和用Getcurrentthread()效果一样
      

  10.   

    多谢楼上的各位,不过用ImmDisableIME只是能将某个窗口的输入法设置屏蔽(即不管你怎么切换输入法,输入的依然是默认的字符,比如英文字符),但还是没有达到隐藏IME窗口的功能。哪位高手指教一下。
      

  11.   

    要不你试试ImmSimulateHotKey,模拟按键切换中英文。