小生最近用VC做一项目,在视图上有一些按钮模拟键盘,当用鼠标点击这些按钮时,向视图中弹出的一对话框进行键盘模拟操作,现在问题有两个:
第一:我向窗口发TAB键消息时,对话框上的焦点没有移动。但是一般的可显字符的输入都可以实现。
第二:我想通过按下视图中的字母按钮完成汉字全拼输入法,在对话框的输入框中键入汉字。不依赖键盘,能否实现,如果能实现,如何实现?我对按键消息的处理代码如下:
BOOL CInfoProcessorSimView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (((CMainFrame*)GetParentFrame())->pGCSPSDlg!=NULL)
{
if (pMsg->message==WM_LBUTTONDOWN)
{ switch (m_ButtonID)//确定按下哪个按钮
{
case 1:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();//让对话框中输入控件得到焦点
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();//将消息发送到该控件上
pMsg->message=WM_CHAR;
pMsg->wParam=VK_TAB;
pMsg->lParam=0;
break;
case 2:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x62;
pMsg->lParam=0;
break; case 3:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x63;
pMsg->lParam=0;
break; case 4:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x64;
pMsg->lParam=0;
break; case 5:
break;
}
}
}
return CFormView::PreTranslateMessage(pMsg);
}
其中m_ButtonID是一全局变量用来确定按下哪个按钮,我好像发给窗体的TAB键消息对方没有响应,我的整个程序框架是基于MFC的单文档方式。求教各位大虾,指点迷津。关注中。
第一:我向窗口发TAB键消息时,对话框上的焦点没有移动。但是一般的可显字符的输入都可以实现。
第二:我想通过按下视图中的字母按钮完成汉字全拼输入法,在对话框的输入框中键入汉字。不依赖键盘,能否实现,如果能实现,如何实现?我对按键消息的处理代码如下:
BOOL CInfoProcessorSimView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (((CMainFrame*)GetParentFrame())->pGCSPSDlg!=NULL)
{
if (pMsg->message==WM_LBUTTONDOWN)
{ switch (m_ButtonID)//确定按下哪个按钮
{
case 1:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();//让对话框中输入控件得到焦点
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();//将消息发送到该控件上
pMsg->message=WM_CHAR;
pMsg->wParam=VK_TAB;
pMsg->lParam=0;
break;
case 2:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x62;
pMsg->lParam=0;
break; case 3:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x63;
pMsg->lParam=0;
break; case 4:
((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->SetFocus();
pMsg->hwnd=((CMainFrame*)GetParentFrame())->pGCSPSDlg->GetDlgItem(IDC_GCSPS_EDIT1)->GetSafeHwnd();
pMsg->message=WM_CHAR;
pMsg->wParam=0x64;
pMsg->lParam=0;
break; case 5:
break;
}
}
}
return CFormView::PreTranslateMessage(pMsg);
}
其中m_ButtonID是一全局变量用来确定按下哪个按钮,我好像发给窗体的TAB键消息对方没有响应,我的整个程序框架是基于MFC的单文档方式。求教各位大虾,指点迷津。关注中。
刚才对我的帮助.我是刚来csdn不久的,对这里不熟悉.来了几次都没能提出问题很郁闷.
其实我就是不知道应该怎么进入提问区.