为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

在VC++中文本框控件如何通过回车键转移焦点

2017-12-05 6页 doc 19KB 48阅读

用户头像

is_737483

暂无简介

举报
在VC++中文本框控件如何通过回车键转移焦点在VC++中文本框控件如何通过回车键转移焦点 在VC,,中文本框控件如何通过回车键转 移焦点 计算机系统应用2004年第8期 在VC++中文本框控件如何通过回车键转移焦点 theShiftofFocusBetweenEditboxusingENTERinVC++ 蔡伟丰朱彦华郑少慧赵益建陈泽铭(广州铁路中心医院电脑室510080) 摘要:本文介绍了VisualC++6.O在对话框的多个文本框之问,通过回车键转移焦点 的几种方法,并提出了一个改进方法. 关冀词:VisualC4-4-6.0文本框回车键焦点 1引言 ...
在VC++中文本框控件如何通过回车键转移焦点
在VC++中文本框控件如何通过回车键转移焦点 在VC,,中文本框控件如何通过回车键转 移焦点 计算机系统应用2004年第8期 在VC++中文本框控件如何通过回车键转移焦点 theShiftofFocusBetweenEditboxusingENTERinVC++ 蔡伟丰朱彦华郑少慧赵益建陈泽铭(广州铁路中心医院电脑室510080) 摘要:本文介绍了VisualC++6.O在对话框的多个文本框之问,通过回车键转移焦点 的几种方法,并提出了一个改进方法. 关冀词:VisualC4-4-6.0文本框回车键焦点 1引言 在使用VC4-4-进行各种编程时,往往要在对话框中设 置多个文本框,用于用户输入各种信息,但是用户在输入数 据时,默认方式下必须用Tab键在文本框之间转移焦点,如 果用户输入回车键将可能使对话框退出,对于大多数用户是 非常不方便.本文介绍了输入回车键在各个文本框中转移 焦点的几种方法. 2技术难点 在对话框中,如果用户在一个单行文本框中按回车键, Windows将会自动寻找对话框的默认按钮,并执行默认按 钮的代码,或者未找到默认按钮时,则会自动执行OnOK()函 数,使对话框退出.对话框及文本框的WM—KEYDoWN或 WM-CHAR消息都无法捕捉到回车键.因此如果能捕捉到 回车键消息后向对话框发送转移焦点的WM—NE×TDL— GOTL消息,则可以解决此问题. 3几种常见的处理方法 3.1利用对话框的WM—COMMAND及映射消息 当对话框或它的某一个控件具有输入焦点时,如果按回 车键,Windows将会发送WM_COMMAND消息,并且将默 认的按钮ID值传递给该消息的参数wParam,如果没有默 认按钮,将传递IDOK值,因此通过截取WM—COMMAND的 消息并判断wParam的值转移焦点.转移焦点的方法如 下:首先获取当前焦点控件,并且判断是否为文本框控件,如 果是则发送WM_NEXTDLGCTL给对话框,使对话框将焦点 移至下一个控件.示例代码如下: caseWMJOMMAND://截取消息 if(wParam:=IDOFDEFAULTBUTTONllwParam ==IDoK)//IDOFDEFAULTBUTTON为默认按钮的ID 值,若无默认按钮,则wParam值为IDOK { CWnd*pWnd=GetFocus();/供得当前焦点控 58实践经验PracticalExperience 件 BOOLbRetVal=TestlsEdItWnd(pWnd一>m— hWnd)://'#JJ断是否为文本控件 if(bRetVa1){ PostMessage(hDI8,WM—NEXTDL-GCTL,0,0L) ://发送消息将焦点转移至下一控件 retUmTRUE: } eIse{ EndDialo8(hDI8,TRUE);/借束对话框 returnFALSE: } } break; 3.2子类化或超类化文本控件 当一个文本控件被子类化或超类化后,所有的键盘输入 将被发送至自定义子类或超类函数中,而不管该对话框是否 有默认按钮,通过在该函数中捕捉WM—KEYDOWN(或WM— CHAR)消息,加入相应代码即可.示例如下: Ion8FARPASCALMySubCIassProo(HWNDhWnd, WORDwMessase,WORDwParam,L0NGIParam){ switch(wMessase) { caseWM— HAR:/ if((wParam==VK—RETURN)ll(wParam==VK_ TAB))/当获得回车键时,直接返回0 retum0: eIse return(CalIWindowPPoc(IpOIdPPoc,hWnd, wMessase,wParam,IParam));/r~4用默认处理过程 caseWM—KEYDoWN: if((wParam==VK—RETURN)II(wParam== VK__TAB)){/椭捉到按回车键或TAB键时 2004年第8期计算机系统应用 PostMessage(ghDIg,WM—NEXTDLGCTL,0, 0L);//发送消息给对话框,使焦点转移至下一控件 retumFALSE://返回 } retum(CalIWindowProo(IpOIdProc,hWnd,wMes— sage,wParem,IParam));/僦行默认的消息 break; } 3.3创建新的对话框成员函数 这种方法允许按回车键在各个文本框中来回转移焦点, 即当前焦点为最后一个文本框时,当按回车键时将使焦点转 移至第一个文本框控件. 实现步骤如下: (1)将对话框的默认ID值IDOK改为另一值,如lD— MYOK并将该默认按钮改为非默认按钮; (2)为对话框的该按钮创建一个新的对话框成员函数, 这个成员函数是ID_MYOK控件的BN__cUCKED消息: (3)在第二步创建的新成员函数中加入正常的处理代 码; (4)在对话框中加入如下函数原型: protected: virtualvoidOn0K(1 (5)为OnOK函数加入转移焦点的代码,例如: voidCMyDialoe::OnOKI) { CWnd*pWndOtrl=GetFocus();/供得当前焦点控件 CWnd*pWndCtrlNextpWndCtrl! UINTcontrolID=pWndCtrl一>eetOlgOtrlID();/饭 得焦点控件的ID值 swltoh(oontroIID){ caseIDQEDIT1: pwndOtrlNext=GetOlgltem(IDC—EDIT2):/厂通 过ID值的判断获得下一焦点控件 break; caseIDQEDIT2: pwndOtrlNext=GetOlgltem(IOQEOIT3): break; caseIDCEDIT3: pwndOtrlNext=GetOlgltem(IDC_EDIT4): break; caseIDOK://当焦点为默认按钮时执行对话框的On— OK函数 CDIaloe::CriCK(): break. defauIt: break; } pwndOtrlNext一>SetFoous();/伪下一焦点控件设置焦 点 } 4改进方法 当按回车键时,将执行默认按钮的函数,因此通过在默 认按钮的函数加入相应的代码便可达到通过回车键转移焦 点,另外还可以对某一文本框输入完成后,使按回车时执行 特定功能,如查找,列表更新等.示例如下: 首先为每一个文本框控件增加文本框类型的数据成员, 下一步是编辑默认按钮处理函数 VOidCmyOIaloe::OnMyOK{)/愀认按钮的处理函数 { CWnd*pWnd=GetFoous();/供取当前焦点控件 If(pWnd一>IsKIndOf(RUNTIME—CLASS (CEdIt)))/r#J断是否为文本框控件 { ff(pWnd一>m—hWnd:=m—oEdItRequery.m— hWnd) { DoRequery();//当在查询文本框按加车键时将执行 查询功能,而不执行转移焦点 } eIse ::PostMessage(this一>m_hWnd,WM_NEXTDL- OCTL,0,0L);//丰苷焦点转移至下一控件 } eIse COialoe::OnOK(); 5 本文通过介绍三种常规方法及一种改进方法,说明了如 何在各个文本框之间的焦点转移通过回车键实现,最后对于 文本框输入完成后按回车执行某种特定功能的方法.本示 例在Wlndows2000VisualC++6.0上运行通过. 参考文献 1微软,MSDN 2雷神,[Vc++技术内幕]学习笔记(10),易会网. PracticalExperlenCe宴?量t59
/
本文档为【在VC++中文本框控件如何通过回车键转移焦点】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索