我的自绘按钮为什么不响应单击时间,我已经加了映射了,ON_BN_CLICKED(200, OnNeosytle) 我的自绘按钮为什么不响应单击时间,我已经加了映射了,ON_BN_CLICKED(200, OnNeosytle) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [email protected]方便的话发给我看看 [email protected]发这个信箱,msn太小了 你的自类化的按钮中使用了onlbuttondown和对话框中ON_BN_CLICKED(200, OnNeosytle)重定义了.执行了onlbuttondown. 也给我发一个吧我帮你看看[email protected] 从fanqing(火影忍者+26%)那里得到代码,看了一下,我认为问题在于,你的那个Cbt类的OnLButtonDown()函数中,屏蔽了调用其父类的该处理函数:CButton::OnLButtonDown(nFlags, point);,这样的效果就只能实现你自绘的效果,不能触发“单击”消息,也就当然不会起作用了但是当我去掉那个屏蔽时,程序出错,我还没有找到原因,而恰好中午要出去办点事,估计得到傍晚时分或者晚上了,希望能帮你解决。 1.代码是楼主给的.2. fengqinggao(风清高) 你的想 法和我开始的一样,看上面我的贴.还有他屏蔽的ON_BN_CLICKED消息.但是我想想OnLButtonDown和ON_BN_CLICKED应该是两个不同的消息怎么会相互干扰呢? 但是我想想OnLButtonDown和ON_BN_CLICKED映射的消息应该是两个不同的消息怎么会相互干扰呢? 他们俩的确是不同的消息,但是也是有些关联的,LButtonDown是Click的基础,如果没有LButtonDown,系统则不认为有Click的消息,具体我再看看 不会相互干扰的.我实验过了.但是函数中提供的CEdit::xxx 不要删除这个会影响消息映射的一些默认操作而且这些操作与Click有关,删除了反而会影响的.关键还是他自绘函数问题.他使用ModifyStyle(0, BS_OWNERDRAW);而对应自会函数却没有,使用了自己.所以产生了错误. to:楼主和fanqing(火影忍者+26%),我们进行如下测试:1、将自绘按钮改成非自绘按钮。方法:将ModifyStyle(0, BS_OWNERDRAW);语句屏蔽,然后删除Cbt类的OnPaint()函数;现象:按钮外貌是普通按钮,能够随鼠标改变状态,但是不能响应Click()消息;原因:屏蔽了CButton::OnLButtonDown()和CButton::OnLButtonUp()函数。2、续上操作:使CButton::OnLButtonDown()和CButton::OnLButtonUp()语句有效;现象:按钮外貌是普通按钮,能够随鼠标改变状态,不能响应单击消息,但是当双击时,大部分时间会触发OnClick()函数,即双击时有可能触发单击消息,弹出那个MessageBox对话框;原因:OnLButtonDown()和CButton::OnLButtonUp()函数中,那些改变按钮状态的语句耗时间太多,系统接收了第一下的ButtonDown和第二下的ButtonUp,组成了Click,也就触发了OnClick()消息;3、续上操作:将OnLButtonDown()和CButton::OnLButtonUp()函数中其他语句删除,只分别留下CButton::OnLButtonDown()和CButton::OnLButtonUp()语句;现象:能够很顺利的响应Click,即每单击一下都响应了OnClick消息,弹出那个对话框;原因:不自绘时,代码正确由上的测试,可以看出1、ButtonDown和ButtonUp和Click是有关系的,见测试(1);2、当OnLButtonDown()和CButton::OnLButtonUp()中语句过多,特别是对窗口更新耗时过多时,会影响窗口的单击消息的发送,见测试(2);3、Dlg类中的消息响应函数没有问题,见测试(3)。我的机器是CY1.7G、256DDR的,系统是2000,VC6,算常见配置,测试应该有效。当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿,继续努力 另:重载了OnPaint()函数,就是进行自绘了,所以 BS_OWNERDRAW 的对应自绘函数是有的 还进行了一个测试就是OnPaint()函数也没有错误,将该函数内的所有代码删除,自是没有按钮的外形,单击时得到和上面一样的结果 楼上的方法和我测试一样啊.结果也一样啊!哈哈!当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿,继续努力 真热闹!!各位给我发一份好吗?我也凑凑热闹[email protected] 查MSDN,自绘真正触发的是DrawItem函数,虽然OnPaint()也能达到自绘效果,但是不知道为啥会出现无效指针的情况,于是将OnPaint()函数删除,改为DrawItem函数,并且将OnPaint()函数内的语句进行修改,如下: BITMAP bitMap; CRect rc; CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); int iSaveDC=pDC->SaveDC(); rc.CopyRect(&lpDrawItemStruct->rcItem); Bt_back.GetBitmap(&bitMap); CDC memDC; CBitmap* pOld=NULL; memDC.CreateCompatibleDC(pDC); BITMAP bmpInfo; int Width; int Height; ASSERT(Bt_back.m_hObject!=NULL); Bt_back.GetBitmap(&bmpInfo); pOld=memDC.SelectObject((CBitmap*) &Bt_back); if (pOld==NULL) return; //Destructors will clean up Width=(bmpInfo.bmWidth-rc.Width())/2; Height=(bmpInfo.bmHeight-rc.Height())/2; pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY); memDC.SelectObject(pOld); pDC->RestoreDC(iSaveDC); CPaintDC dc(this); DrawText(&dc);如此修改后还有两个问题,就是LButtonDown和LButtonUp函数中不能有其他代码,而且不能显示文字,去掉LButtonDown和LButtonUp函数中的代码后,能很顺利响应单击消息了。还需要修改,没时间了,只能放一下了,希望后来人努力!建议楼主下一个自绘按钮的例程,直接用或者仿做一个也行,很多的,这样从头到尾调试,太费脑筋,呵呵 注:以上修改后的语句是放在DrawItem()函数中 我说的吧他触发的自绘函数有问题哈哈!应该在构造函数中接受赋值,初始化一些对象和变量,然后在drawitem中调用自己的画图函数. to:plazuopeng,我已经代楼主将源码发送给你了,请查收,:)to:fanqing,pfpf,希望能善始善终,彻底帮楼主解决问题 我就是搞不明白当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿. 我试过了,在Cbt::OnLButtonDown(UINT nFlags, CPoint point)中去掉Invalidate()函数就可以响应ON_BN_CLICKED了。不过那样的话,BUTTON就不能达到楼主所期望的效果了。楼主重载Cbi::DrawItem函数,把所有的绘制和鼠标操作的代码都放进去。这样的话,就可以达到你所期望的效果了。也可以到网上去找找类似于CButtonST等自画BUTTON是怎么自画的。 小弟真的谢谢各位大哥了,问题解决了,我在Cbt::OnLButtonUp(UINT nFlags, CPoint point) 中加了GetParent()->SendMessage( WM_COMMAND, GetDlgCtrlID(), (LPARAM)m_hWnd );就可以了,有这么多大哥回答,这分怎么给呢? [email protected]发给我看看 RGB24转灰度图怎么创建调色板 怎样在Static控件上只显示bmp文件的一部分? 高难度问题,大侠请进? 能不能把DLL一起编译进EXE文件? 串口采集数据,中文2000运行正常,英文2000某时停止,重新运行,仍然不定时停止采集,问题在那里 求救!!!!!! 还是对话框的背景颜色问题? spy++怎么用?是VC自带的吗?若不是在哪里能下到? 关于使用注册表。。。 MFC如何向excel中插入图片? 类名中或其他名中IF是什么意思?如VM_IF. 谁有潘爱民的《COM原理与运用》,那里可以下载?或发给我([email protected]),谢谢!
方便的话发给我看看
发这个信箱,msn太小了
执行了onlbuttondown.
我帮你看看
[email protected]
2. fengqinggao(风清高) 你的想 法和我开始的一样,看上面我的贴.还有他屏蔽的ON_BN_CLICKED消息.
但是我想想OnLButtonDown和ON_BN_CLICKED应该是两个不同的消息怎么会相互干扰呢?
关键还是他自绘函数问题.他使用ModifyStyle(0, BS_OWNERDRAW);而对应自会函数却没有,使用了自己.所以产生了错误.
方法:将ModifyStyle(0, BS_OWNERDRAW);语句屏蔽,然后删除Cbt类的OnPaint()函数;
现象:按钮外貌是普通按钮,能够随鼠标改变状态,但是不能响应Click()消息;
原因:屏蔽了CButton::OnLButtonDown()和CButton::OnLButtonUp()函数。2、续上
操作:使CButton::OnLButtonDown()和CButton::OnLButtonUp()语句有效;
现象:按钮外貌是普通按钮,能够随鼠标改变状态,不能响应单击消息,但是当双击时,大部分时间会触发OnClick()函数,即双击时有可能触发单击消息,弹出那个MessageBox对话框;
原因:OnLButtonDown()和CButton::OnLButtonUp()函数中,那些改变按钮状态的语句耗时间太多,系统接收了第一下的ButtonDown和第二下的ButtonUp,组成了Click,也就触发了OnClick()消息;3、续上
操作:将OnLButtonDown()和CButton::OnLButtonUp()函数中其他语句删除,只分别留下CButton::OnLButtonDown()和CButton::OnLButtonUp()语句;
现象:能够很顺利的响应Click,即每单击一下都响应了OnClick消息,弹出那个对话框;
原因:不自绘时,代码正确由上的测试,可以看出
1、ButtonDown和ButtonUp和Click是有关系的,见测试(1);
2、当OnLButtonDown()和CButton::OnLButtonUp()中语句过多,特别是对窗口更新耗时过多时,会影响窗口的单击消息的发送,见测试(2);
3、Dlg类中的消息响应函数没有问题,见测试(3)。我的机器是CY1.7G、256DDR的,系统是2000,VC6,算常见配置,测试应该有效。当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿,继续努力
当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿,继续努力
BITMAP bitMap;
CRect rc;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int iSaveDC=pDC->SaveDC();
rc.CopyRect(&lpDrawItemStruct->rcItem);
Bt_back.GetBitmap(&bitMap); CDC memDC;
CBitmap* pOld=NULL;
memDC.CreateCompatibleDC(pDC);
BITMAP bmpInfo;
int Width;
int Height; ASSERT(Bt_back.m_hObject!=NULL);
Bt_back.GetBitmap(&bmpInfo);
pOld=memDC.SelectObject((CBitmap*) &Bt_back);
if (pOld==NULL) return; //Destructors will clean up
Width=(bmpInfo.bmWidth-rc.Width())/2;
Height=(bmpInfo.bmHeight-rc.Height())/2;
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOld);
pDC->RestoreDC(iSaveDC); CPaintDC dc(this);
DrawText(&dc);
如此修改后还有两个问题,就是LButtonDown和LButtonUp函数中不能有其他代码,而且不能显示文字,去掉LButtonDown和LButtonUp函数中的代码后,能很顺利响应单击消息了。还需要修改,没时间了,只能放一下了,希望后来人努力!建议楼主下一个自绘按钮的例程,直接用或者仿做一个也行,很多的,这样从头到尾调试,太费脑筋,呵呵
当进行按钮自绘时,如果使OnLButtonDown()函数中的CButton::OnLButtonDown()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿.
就可以了,有这么多大哥回答,这分怎么给呢?
发给我看看