为何屏蔽了IDOK的OnOK()后在按钮上按回车没有反应,SOS?

vcmfc 2000-03-24 09:47:00
屏蔽了Dialog中按回车就退出,(即:改更IDOK为其它ID,并清空OnOK()后,在按钮上按回车没有反应,以前在按钮上按回车会执行Mouse的Click事件的过程,请问如何实现此功能?
...全文
437 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmfc 2000-04-02
  • 打赏
  • 举报
回复
我使用一个较土的办法:(用n次测试)把button的property中的default button选上即可。不知哪个高手还有更好的办法。
wangxian 2000-03-29
  • 打赏
  • 举报
回复
在IDOK按扭的ON_Click中将最后的xxx::OnOK();去掉,然后在想退出的按扭中写上xxx:OnOK()即可。
vcmfc 2000-03-29
  • 打赏
  • 举报
回复
虽说OnOK()函数屏蔽掉,如果我的Button的类为CButton来控件的话,在按钮上按回车照样会执行Mouse的Click事件的过程,但使用IconButton类后却不行,如果使用Message的话。该如果做?而重载虚函数OnOK(),对于较少的Button的话还可以,但多却麻烦,且不是永久解决办法,请请教?
vcmfc 2000-03-26
  • 打赏
  • 举报
回复
多怪我没把一点讲清楚:我的Button是由我的IconButton类控制,在我的测试中,Dialog中的Button会处理在上按回车会执行Mouse的Click事件的过程,但一用我的新类就不行,有什么办法可恢复这个功能(我试在PreMessageTrans拦到消息却不知如做),请大家在帮帮忙?
longx 2000-03-26
  • 打赏
  • 举报
回复
在 MFC中对话框类CDialog中,虚函数OnOK(),OnCancel()分别对应Enter,Cancel
的处理,处理这两个按键消息,只要重载这两个函数。上面原因bigsmall已说的
很清楚,当对话框焦点在你的button上按Enter才起作用。所以程序的结果是正确
的,你要想实现必须重载OnOK()
bigsmall 2000-03-26
  • 打赏
  • 举报
回复
这是因为:在对话框上按回车健的时候,它缺省的焦点落在对话框创建时的"Ok"按钮
上。因此,当你按回车键的时候,实际上你的程序调用的是OnOK()函数。如果你把OnOK()函数屏蔽掉,那么你再按回车键时肯定没有反应。
thur 2000-03-25
  • 打赏
  • 举报
回复
不妨这样干:
在你新设的id上加一个响应一些消息比如(BN_CLICK)函数(OnOK())
不就行了。
  • 打赏
  • 举报
回复
沒看明白你的用意。
一般情況按回車有2種可能:當前焦點(focus)的ID產生WM_COMMAND,或者產生IDOK的WM_COMMAND。比如focus在edit時回車就是後者,產生IDOK的WM_COMMAND。如果是這種情況就要在IDOK裏面判斷GetFocus是那個控件,比如在第一個edit回車就用SetFocus把焦點移到下一個edit,最後的edit回車執行某個按鈕的操作等。這些都並不一定需要有一個按鈕的ID是IDOK,祗是在IDOK裏面處理Focus控件
DragonCheng 2000-03-25
  • 打赏
  • 举报
回复
将控件的return(好象是,由于暂时没有VC,不能确定,但只要将控件属性打开,一看就明白)属性去掉即可
vcmfc 2000-03-25
  • 打赏
  • 举报
回复
我的意思是在按钮上按回车去执行Mouse的Click事件的代码,我的Dialog还有其它控件也就是说有没有简单的办法让原来的按回车去执行Mouse的Click事件的代码,但不退出Dialog.
littlegull 2000-03-25
  • 打赏
  • 举报
回复
在Dialog的PreTranslateMessage()判断一下,看看是否得到了
回车键,如果得到了,直接return FALSE;就可以了,按钮酒会得到
回车键的消息.
softdoctor 2000-03-24
  • 打赏
  • 举报
回复
关闭对话框的基本函数是EndDialog
xenogear 2000-03-24
  • 打赏
  • 举报
回复
要对OK按钮的新ID进行消息处理, 在新的处理函数中返回CDialog::OnOK就可以了
【前言】 工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。中间虽经波折,但是最终还是找到了解决问题的办法。 在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。 1、程序功能 1)打开一个excel文件; 2)显示到CListCtrl上; 3)新建一个Excel文件。 以上均在对话框中实现。 2、平台 VC++2010 3、实现方法 常用的Excel打开方式有两种 1)通过数据库打开; 2)OLE方式打开。 由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2). 4、准备步骤 首先新建一个Dialog窗体程序,添加list control和两个按钮 1)将ExcelLib文件夹拷贝到程序目录下; 2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目; 3)包含头文件,#include "ExcelLib/Export2Excel.h" 通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类; 5、打开excel文件 通过按钮点击打开 void CExcelTestDlg::OnBnClickedButtonOpenExcel() { //获取文件路径 CFileDialog* lpszOpenFile; CString szGetName; lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"Excel File(*.xlsx;*.xls)|*.xls;*.xlsx",NULL); if (lpszOpenFile->DoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //打开文件 //文件中包含多个sheet时,默认打开第一个sheet CExport2Excel Excel_example; Excel_example.OpenExcel(szGetName); //获取sheet个数 int iSheetNum = Excel_example.GetSheetsNumber(); //获取已使用表格行列数 int iRows = Excel_example.GetRowCount(); int iCols = Excel_example.GetColCount(); //获取单元格的内容 CString cs_temp = Excel_example.GetText(1,1); //AfxMessageBox(cs_temp); //List control上显示 //获取工作表列名(第一行) CStringArray m_HeadName; m_HeadName.Add(_T("ID")); for (int i=1;iGetItemCount()>0) { m_list.DeleteColumn(0); } //初始化ClistCtrl,加入列名 InitList(m_list,m_HeadName); //填入内容 //第一行是标题,所以从第2行开始 CString num; int pos; for (int row = 2;row<=iRows; row++) { pos = m_list.GetItemCount(); num.Format(_T("%d"),pos +1); m_list.InsertItem(pos,num); for (int colum=1;columDoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //文件全名称 CString csFileName = szGetName; //需要添加的两个sheet的名称 CString csSheetName = "newSheet"; CString csSheetName2 = "newSheet2"; // 新建一个excel文件,自己写入文字 CExport2Excel Excel_example; //新建excel文件 Excel_example.CreateExcel(csFileName); //添加sheet,新加的sheet在前,也就是序号为1 Excel_example.CreateSheet(csSheetName); Excel_example.CreateSheet(csSheetName2); //操作最开始添加的sheet:(newSheet) Excel_example.SetSheet(2); //添加表头 Excel_example.WriteHeader(1,"第一列"); Excel_example.WriteHeader(2,"第二列"); //添加核心数据 Excel_example.WriteData(1,1,"数据1"); Excel_example.WriteData(1,2,"数据2"); //保存文件 Excel_example.Save(); //关闭文件 Excel_example.Close(); } 7、注意事项 1)一般单个Excel文件包含多个sheet,程序默认打开第一个; 2)指定操作sheet,使用Excel_example.SetSheet(2)函数; 3)打开文件时最左侧的sheet序号为1,新建excel时最新添加的sheet序号为1. 【后记】 本程序主要基于网络CSDN中---“Excel封装库V2.0”---完成,下载地址是:http://download.csdn.net/detail/yeah2000/3576494,在此表示感谢!同时, 1)在其基础上作了小改动,改正了几个小错误,添加了几个小接口; 2)添加了如何使用的例子,原程序是没有的; 3)详细的注释 发现不足之处,还请大家多多指教!

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧