响应消息DM_GETDEFID 解决界面Enter结束程序问题

风来我也来 2013-01-09 02:24:19
环境:VS2008 C++
为了解决界面Enter结束程序问题 响应消息DM_GETDEFID。
运行的时候弹出
Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003).
XXX.exe 中的 0x7c812fd3 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012ef2c 处的 COleException。
怎么解决?
这是和什么冲突了?


声明:
BEGIN_MESSAGE_MAP(CWholeBundleSteelBarCounterDlg, CDialog)
ON_MESSAGE(DM_GETDEFID, OnGetDefID)

LRESULT CWholeBundleSteelBarCounterDlg::OnGetDefID(WPARAM wParam,LPARAM lParam)
{
DM_GETDEFID
return MAKELONG(0,DC_HASDEFID);
}

BEGIN_MESSAGE_MAP 内容


BEGIN_MESSAGE_MAP(CWholeBundleSteelBarCounterDlg, CDialog)
ON_MESSAGE(DM_GETDEFID, OnGetDefID)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_SteelCount, &XXXDlg::OnBnClickedSteelCount)
ON_BN_CLICKED(IDC_SetParameter, &XXXDlg::OnBnClickedSetparameter)
ON_BN_CLICKED(IDC_CloseSystem, &XXXDlg::OnBnClickedCloseSystem)
ON_BN_CLICKED(IDC_BUTTON_FRONT, &XXXDlgg::OnBnClickedButtonFront)
ON_BN_CLICKED(IDC_BUTTON_NEXT, &XXXDlg::OnBnClickedButtonNext)
ON_BN_CLICKED(IDC_FaultTest, &XXXDlg::OnBnClickedFaultTest)
ON_BN_CLICKED(IDC_ThresholdShow, &XXXDlg::OnBnClickedViewShow)
ON_BN_CLICKED(IDC_DiaCalibration, &XXXDlg::OnBnClickedDiacalibration)
ON_BN_CLICKED(IDC_UP, &XXXDlg::OnBnClickedUp)
ON_BN_CLICKED(IDC_DOWN, &XXXDlg::OnBnClickedDown)
ON_BN_CLICKED(IDC_LEFT, &XXXDlg::OnBnClickedLeft)
ON_BN_CLICKED(IDC_RIGHT, &XXXDlg::OnBnClickedRight)
ON_BN_CLICKED(IDC_MODE_RADIO1, &XXXDlg::OnBnClickedModeRadio1)
ON_BN_CLICKED(IDC_MODE_RADIO3, &XXXDlg::OnBnClickedModeRadio3)
ON_BN_CLICKED(IDC_MODE_RADIO4, &XXXDlgg::OnBnClickedModeRadio4)
ON_BN_CLICKED(IDC_MODE_RADIO5, &XXXDlg::OnBnClickedModeRadio5)
ON_BN_CLICKED(IDC_MODE_RADIO6, &XXXDlg::OnBnClickedModeRadio6)
ON_BN_CLICKED(IDC_MODE_RADIO7, &XXXDlg::OnBnClickedModeRadio7)
ON_BN_CLICKED(IDC_MODE_RADIO8, &XXXDlg::OnBnClickedModeRadio8)
ON_BN_CLICKED(IDC_MODE_RADIO9, &XXXDlg::OnBnClickedModeRadio9)
ON_BN_CLICKED(IDC_MODE_RADIO2, &XXXDlg::OnBnClickedModeRadio2)
ON_BN_CLICKED(IDC_MODE_RADIO10, &XXXDlg::OnBnClickedModeRadio10)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_CALIBRATIONSLIDER, &XXXDlg::OnNMCustomdrawCalibrationslider)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BUTTON3, &XXXDlg::OnBnClickedAutoCalcButton)
ON_BN_CLICKED(IDC_MODE_RADIO11, &XXXDlg::OnBnClickedModeRadio11)
ON_BN_CLICKED(IDC_MODE_RADIO12, &XXXDlg::OnBnClickedModeRadio12)
ON_BN_CLICKED(IDC_MODE_RADIO13, &XXXDlg::OnBnClickedModeRadio13)
ON_BN_CLICKED(IDC_MODE_RADIO14, &XXXDlg::OnBnClickedModeRadio14)
ON_BN_CLICKED(IDC_MODE_RADIO15, &CXXXDlg::OnBnClickedModeRadio15)
ON_BN_CLICKED(IDC_MODE_RADIO16, &XXXDlg::OnBnClickedModeRadio16)
ON_BN_CLICKED(IDC_MODE_RADIO17, &XXXDlg::OnBnClickedModeRadio17)
ON_BN_CLICKED(IDC_MODE_RADIO18, &XXXDlg::OnBnClickedModeRadio18)
ON_MESSAGE(IS_UEYE_MESSAGE, OnImageCatch)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_HISTORICAL_DATA, &XXXDlg::OnLvnItemchangedListHistoricalData)
ON_BN_CLICKED(IDC_BUTTON_HISTORICAL, &XXXDlg::OnBnClickedButtonHistorical)
END_MESSAGE_MAP()

其中 ON_MESSAGE(IS_UEYE_MESSAGE, OnImageCatch)是个相机类消息函数,#define IS_UEYE_MESSAGE (WM_USER + 0x0100)
...全文
235 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-01-10
  • 打赏
  • 举报
回复
引用 4 楼 yh880 的回复:
重载OnOk,界面的X和菜单栏右键弹出的关闭就不响应。
你说的OnCancel
Eleven 2013-01-10
  • 打赏
  • 举报
回复
引用 4 楼 yh880 的回复:
复查了,跟我重载的那个参数无关,界面按 Tab 键的时候会出这提示。然后在各个重载的函数里面 try catch都没捕捉到。 COleException是com组件异常?我程序里面有用到MSCOM32通信控件,不是拖控件而是直接在程序里面敲代码实现的,在OnInitation里面直接调 Init函数进行初始化。 IS_UEYE_MESSAGE消息是用来处理相机数据的,在界面上……
我问的是 DM_GETDEFID // 这个是干嘛? 加这句干嘛?
风来我也来 2013-01-10
  • 打赏
  • 举报
回复
复查了,跟我重载的那个参数无关,界面按 Tab 键的时候会出这提示。然后在各个重载的函数里面 try catch都没捕捉到。 COleException是com组件异常?我程序里面有用到MSCOM32通信控件,不是拖控件而是直接在程序里面敲代码实现的,在OnInitation里面直接调 Init函数进行初始化。 IS_UEYE_MESSAGE消息是用来处理相机数据的,在界面上没有控件,是通过SDK实现,没有注册控件等其它操作,并且在其它使用它的项目中也未发现该异常。 这个异常有时候按Tab键出现一条,有时候出现好几条,没有找到规律。
引用 1 楼 xianglitian 的回复:
我没理解错的话你的问题通过重载OnOK函数就可解决 怎么你搞的这么复杂
重载OnOk,界面的X和菜单栏右键弹出的关闭就不响应。
引用 2 楼 sha_jinhao 的回复:
没有断点么 堆栈跟踪不行么?
程序没崩溃,就是输出窗口有这提示,你的意思是用_CRT那条命令来跟踪?
引用 3 楼 VisualEleven 的回复:
LRESULT CWholeBundleSteelBarCounterDlg::OnGetDefID(WPARAM wParam,LPARAM lParam) { DM_GETDEFID // 这个是干嘛? return MAKELONG(0,DC_HASDEFID); }
这个是个消息,用来屏蔽Enter键作为界面结束符的响应。这样其它按钮的Enter就能正常使用。 比用Pre那个简单,不用再写针对哪些控件正常响应。
Eleven 2013-01-09
  • 打赏
  • 举报
回复
LRESULT CWholeBundleSteelBarCounterDlg::OnGetDefID(WPARAM wParam,LPARAM lParam) { DM_GETDEFID // 这个是干嘛? return MAKELONG(0,DC_HASDEFID); }
jimette 2013-01-09
  • 打赏
  • 举报
回复
没有断点么 堆栈跟踪不行么?
向立天 2013-01-09
  • 打赏
  • 举报
回复
我没理解错的话你的问题通过重载OnOK函数就可解决 怎么你搞的这么复杂

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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