在对话框中,按回车键实现TAB键的功能,即用回车键实现各控件之间焦点的切换?
大虾们请赐教,急用!!!
大虾们请赐教,急用!!!
解决方案 »
- 如何获取进程结束和结束返回值
- 求《Visual C++界面编程技术》的电子书 (收到后马上给分!)
- 向ListCtlr的第二列插入图标怎么搞呀!
- vc怎么调用 Activex控件(.ocx文件)??
- 关于POSITION的问题,送分!
- 高手,类型LPWSTR要显示的话,我用什么格式才能显示?我是这样做的:fprintf(out, "%s", wCompName);其中 LPWSTR wCompName。
- 有关逻辑电路
- 各位有谁在VC中开发过IE扩展的COM,怎么样调出Cookie
- 跪求《VISUAL C++ 6.0 高级编程范例》的书配源码
- 如何得到指定窗口句柄?
- 为什么加速建对应的按钮无效时,也运行对应的函数?
- 关于lib函数引用的问题
if( WM_KEYDOWN == pMsg->message )//按键消息
{ char t[ 100 ];
memset( t, 0, 100 );
HWND h = ::GetFocus();
::GetClassName( h, t, 100 );
if( !strcmp( t, "Edit" ) )//是edit控件
{
CWnd *pWnd = GetFocus();
switch(pMsg->wParam)
{
case VK_TAB://Tab只是跳到下一控件
case VK_RETURN://回车键
NextDlgCtrl();//先设置好你的控件的TAB顺序
return TRUE;
break;
//case VK_BACK_SPACE://退格,空格,删除键都对应清除
…
………
// 下面的代码你继续添加 }
}
BOOL CMyDialog::PreTranslateMessage(MSG *pMsg)
{
if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
DWORD def_id=GetDefID();
if (def_id!=0)
{
CWnd *wnd=FromHandle(pMsg->hwnd);
char class_name[16];
if (GetClassName(wnd->GetSafeHwnd(),
class_name,sizeof(class_name))!=0)
{
if (strnicmp(class_name,"edit",5)==0)
{
GetDlgItem(LOWORD(def_id))->SetFocus();
return TRUE;
}
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
switch(pMsg->wParam)
{
case VK_TAB://Tab只是跳到下一控件
case VK_RETURN://回车键
NextDlgCtrl();//先设置好你的控件的TAB顺序
return TRUE;
break;
………
// 下面的代码你继续添加
}
CWnd *pWnd= GetFocus(); //取目前焦点所在控件
if ( pWnd == NULL ) //如果目前没有焦点把焦点放在第一个控件上
{
CComboBox *pCombo=NULL;
pCombo = static_cast<CComboBox *>( GetDlgItem(IDC_COMBO1) );
pCombo->SetFocus();
pCombo->Clear();
}
else if ( pWnd == GetDlgItem( IDC_COMBO1 ) )//根据焦点目前所在的控件
//判断焦点应在的位置
{
CComboBox* pCombo=NULL;
pCombo = static_cast<CComboBox *>( GetDlgItem(IDC_COMBO2) );
pCombo->SetFocus();
pCombo->Clear();
}
else if ( pWnd == GetDlgItem( IDC_COMBO2) )
{
CEdit* pEdit=NULL;
pEdit = static_cast<CEdit *>( GetDlgItem(IDC_EDIT1) );
pEdit->SetFocus();
pEdit->SetSel(0,-1);
}
……
这样作麻是麻烦了点儿,但在控件数量不多的情况下,那种绝对控制的感觉也不错。
怎么都用的 MFC 啊!!!呵呵,没什么意思,只是感慨一下。
以上代码测试ing……