我的自绘按钮为什么不响应单击时间,我已经加了映射了,ON_BN_CLICKED(200, OnNeosytle)
解决方案 »
- 求助:如何在对框框界面上实现按下不同的按键,在固定区域显示不同的内容
- 关于动态改变控件大小的一点不同的看法
- 关于服务器和客户端的问题
- 大家说说看,MFC和Windows编程哪个更贴近实际应用
- 如何弹出windows的各种系统设置窗口
- 在ATL中写对话框之类的界面太复杂了,请问有没有更好的办法?
- 如何激活自己的应用程序
- new是否是在进程的默认堆里分配空间的?
- “屯屯屯屯屯屯屯屯屯屯屯屯 .....!”我读取串口的数据的时候得到这些数据,是怎么回事?
- 一个不难的问题
- 类名中或其他名中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()有效的话,单击按钮时会直接崩溃,根据崩溃的现象看来,应该是使用了无效指针,因没有做过自绘的程序,一下子找不到原因在哪儿.
就可以了,有这么多大哥回答,这分怎么给呢?
发给我看看