我已经用两个按钮实现了这个功能。代码如下: //软键盘显示 
void CSoftDlg::OnButton1() 

// TODO: Add your control notification handler code here 
    CWnd * pWnd = GetDlgItem(IDC_EDIT1); //IDC_EDIT1是一个文本框 ,我要在这里用软键盘输入 
    if (pWnd) 
    { 
    pWnd->SetFocus(); 
    
    HIMC hIMC = ImmGetContext(pWnd->m_hWnd); 
    DWORD dwConv = 0, dwSent = 0; 
//    DWORD dwTemp;     ImmGetConversionStatus(hIMC,&dwConv,&dwSent); 
    if (dwConv & IME_CMODE_SOFTKBD) 
    dwConv &= ~IME_CMODE_SOFTKBD; 
    else 
    dwConv |= IME_CMODE_SOFTKBD; 
    
    ImmSetConversionStatus(hIMC,dwConv,dwSent); 
    
    ImmReleaseContext(pWnd->m_hWnd,hIMC); 
    } 
} //输入法显示 
void CSoftDlg::OnButton2() 

// TODO: Add your control notification handler code here 
    DWORD dwConv = 0, dwSent = 0; 
    CWnd * pWnd = GetDlgItem(IDC_EDIT1); 
    if (pWnd) 
    { 
        pWnd->SetFocus(); 
ImmSimulateHotKey(pWnd->m_hWnd, IME_CHOTKEY_IME_NONIME_TOGGLE); 
    
HIMC hIMC = ImmGetContext(pWnd->m_hWnd); 
  
//    DWORD dwTemp; 
    
ImmGetConversionStatus(hIMC,&dwConv,&dwSent); 
dwConv |= IME_CMODE_SOFTKBD; 
    ImmSetConversionStatus(hIMC,dwConv,dwSent); 
    
ImmReleaseContext(pWnd->m_hWnd,hIMC); 
    } 

我现在是先点击按钮2,再点击按钮1来实现调用软件盘的功能。 
我的第一个问题,当软键盘出现后,我可以通过软键盘在文本框里输入,但是我发现当我点击软件盘的ESC键的时候,整个窗口都关闭了,我想问下这个是为什么? 
我的第二个问题,这段代码我是网上找的,我不是很明白。我现在想当我点击文本框的时候,就可以弹出软键盘,我想问这个怎么实现。

解决方案 »

  1.   

    在不使用软键盘的情况下,按esc看看窗口关闭不?
      

  2.   

    ls的说的对,我真是,我不想说自己了。谢谢哦,第一个问题解决,我刚才在调第二个问题,将两个BUTTON的函数内容放在一个函数,就不能实现,不知道问什么,大家知道吗?
      

  3.   

    BOOL CXXXXXDlg::PreTranslateMessage(MSG* pMsg) 
    { if(pMsg -> message == WM_KEYDOWN){ 
    if(pMsg -> wParam == VK_ESCAPE){ 
            return TRUE;
    } }}
    不知道是不是你要的,按ESC 后,不关主窗口