怎样实现单击edit box这个控件时,弹出一个对话框。

bobshi 2003-11-10 11:55:51
我重载了CEdit,写了一个类,CMyEditBox,
在这个类里面响应这个WM_LBUTTONDOWN消息。
但是当我单击edit box已外的地方也出现对话框。不知如何解决。
...全文
151 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
keiven 2003-11-18
  • 打赏
  • 举报
回复
TO: dunta82(敦韬)
就是先写好CMyEditBox这个类,然后用classwizard为IDC_EDIT_PRODNAME添加一个控件类型的变量,即控件类型选为 CMyEditBox类型就可以了。
dunta82 2003-11-17
  • 打赏
  • 举报
回复
楼上这位兄台能把这句话说再详细一点吗?我不知道怎么改:
IDC_EDIT_PRODNAME 接着再把对话框架1所在的文件把这个edit box控件的CEdit 改为CMyEditBox
Zark 2003-11-17
  • 打赏
  • 举报
回复
清楚!

那就应该是:
void CMyEditBox::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetWindowRect(&rect);

ScreenToClient(&rect);
//在下面来判断
if (PtInRect(rect, point))
{
CSELECTPROD selectproddlg;
selectproddlg.DoModal();
}

CEdit::OnLButtonDown(nFlags, point);
}

ahfeng1980 2003-11-16
  • 打赏
  • 举报
回复
gz
bobshi 2003-11-16
  • 打赏
  • 举报
回复
to : Zark(金陵五月) ( )
可能我没有把问题说的清楚.

问题:怎样实现单击edit box这个控件时,弹出一个对话框。(假设对话框1上有一个edit box这个控件,当我单击它时弹出对话框架2)

我的做法是,自己先写CMyEditBox这个类,使它继承CEdit,然后通过类向导加入这个方法void CMyEditBox::OnLButtonDown(UINT nFlags, CPoint point) 使它响应左键的事件,也就是单击左键时弹出一个对话框,最后在对话框1上面放上一个edit box 控件,ID为IDC_EDIT_PRODNAME 接着再把对话框架1所在的文件把这个edit box控件的CEdit 改为CMyEditBox

不知我说清楚没?
Zark 2003-11-14
  • 打赏
  • 举报
回复
这个edit box的id是别外一个界面上的id 这里在我自己写的CMyEditBox这个类中是得不到这个id的,怎样改呢.
答: 我无法理解这个问题.你要明确CMyEditBox是个类,你用它构成了一个什么对象?这个对象相应的ID是什么,而IDC_EDIT_PRODNAME这个ID对应的对象是什么?它与你的CMyEditBox类的那个对象的关系是什么?
Zark 2003-11-13
  • 打赏
  • 举报
回复
修改如下:
void CMyEditBox::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
CWnd* pEdit=GetDlgItem(IDC_EDIT_PRODNAME);
pEdit->GetWindowRect(&rect);

ScreenToClient(&rect);
//在下面来判断
if (PtInRect(rect, point))
{
CSELECTPROD selectproddlg;
selectproddlg.DoModal();
}

CEdit::OnLButtonDown(nFlags, point);
}
zhucde 2003-11-13
  • 打赏
  • 举报
回复
给你一个代码,可以实现:
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
CWnd * pWnd1 = GetDlgItem(IDC_EDIT1);//IDC_EDIT1为你的文本框,只要输入网
//址单击一下就可以打开其中的网页
if(GetFocus()==pWnd1)//
if(pMsg->message == WM_LBUTTONDOWN)
{
CSELECTPROD selectproddlg;
selectproddlg.DoModal();


}

return CDialog::PreTranslateMessage(pMsg);
}
用区域判定是行不通的,此方法可行.
捕获鼠标的单击事件,if(GetFocus()==pWnd1)//此句用来判定是否定在文本框里,
是则触发.
yes2 2003-11-13
  • 打赏
  • 举报
回复
同意楼上的.另外问个问题,不重载可以吗?可以在对话框里接收消息再判断是否在目标控件之内吗?
yes2 2003-11-13
  • 打赏
  • 举报
回复
在弹出对话框之前改变他的焦点啊,比如SetFocus,或者SendMessgae一个VK_TAB.
我觉得是这样的,错了大家不要笑-_-~~
bobshi 2003-11-13
  • 打赏
  • 举报
回复
to:Zark(金陵五月)

void CMyEditBox::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
CWnd* pEdit=GetDlgItem(IDC_EDIT_PRODNAME);//这个edit box的id是别外一个界面上的id 这里在我自己写的CMyEditBox这个类中是得不到这个id的,怎样改呢.
pEdit->GetWindowRect(&rect);

ScreenToClient(&rect);
//在下面来判断
if (PtInRect(rect, point))
{
CSELECTPROD selectproddlg;
selectproddlg.DoModal();
}

CEdit::OnLButtonDown(nFlags, point);
}



to:zhucde(【风间苍月】)
当单击这个edit box时是会出现一个对话框,不过这个对话框关闭时.这时这个焦点还在这个文本框里,当单击其它文本框时也同样会出现这个文本框.所以也行的.再怎样改进呢,大家再帮我看看.谢谢!
bobshi 2003-11-12
  • 打赏
  • 举报
回复
void CMyEditBox::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
::GetWindowRect(GetDlgItem(IDC_EDIT_PRODNAME),rect);//这句有问题
ScreenToClient(&rect);
//在下面来判断
if (PtInRect(rect, point))
{
CSELECTPROD selectproddlg;
selectproddlg.DoModal();
}

CEdit::OnLButtonDown(nFlags, point);
}
用了carbon107(<软件开发思想.h>) 方法,还是不行,用GetDlgItem();返回一个CWnd*
而GetWindowRect()第一个参数是HWND所以会出错,

但carbon107(<软件开发思想.h>)它的办法,是GetWindowRect(你的CMyEditBox的句柄, rect); 不知怎样写?
Zark 2003-11-11
  • 打赏
  • 举报
回复
当收到WM_LBUTTONDOWN时,检查鼠标位置,如果这个座标是落在Edit内的,再弹出对话框.
lsl7909 2003-11-11
  • 打赏
  • 举报
回复
用不着重载CEdit类吧,这个功能只须WM_CLICKED单击消息即可
Edelweissobject 2003-11-11
  • 打赏
  • 举报
回复
楼上说的对,先判断座标是否落在Edit内,再弹出对话框.
carbon107 2003-11-11
  • 打赏
  • 举报
回复
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
是这个吧
那么有一个CPoint point参数,
首先你要得到EDIT的矩形范围
CRect rect;
GetWindowRect(你的CMyEditBox的句柄, rect);
ScreenToClient(&rect);
//在下面来判断
if (PtInRect(rect, point))
在这里打开你定义的对话框
cx0928 2003-11-11
  • 打赏
  • 举报
回复
当收到WM_LBUTTONDOWN时,检查鼠标位置,如果这个座标是落在Edit内的,再弹出对话框.
bobshi 2003-11-11
  • 打赏
  • 举报
回复
to:lsl7909(笑一凡)
但是类向导里面没有这个WM_CLICKED消息呀.

问一下大家有没有其它的办法吗?

16,548

社区成员

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

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

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