MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 关于从绘按钮的响应

关于从绘按钮的响应

www.myexceptions.net  网友分享于:2013-04-10  浏览:4次
关于自绘按钮的响应
一个对话框程序,有一个按钮,按钮执行一些事件,
新建一个按钮派生类:class CMyBut : public CButton
新建全局变量CMyBut m_Button1与按钮关联;
在按钮派生类重绘按钮
void CMyBut::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CString Text;
CRect RC;
CFont Font;
CFont *pOldFont;
CBrush Brush;
CBrush *pOldBrush;
Point PT(10,10); //圆角

dc.SetBkMode( TRANSPARENT );
Font.CreateFont( 12, 0, 0, 0, FW_HEAVY, 0, 0, 0, ANSI_CHARSET, \
OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, \
VARIABLE_PITCH | FF_SWISS, "MS Sans Serif" );

pOldFont = dc.SelectObject( &Font );

if( m_State == bsNormal)
{
Brush.CreateSolidBrush( RGB( 200, 200, 200 ) ); dc.RoundRect( &RC, PT );
dc.SetTextColor( RGB( 80, 80, 80) );
}
else if( m_State == bsDown )
{
Brush.CreateSolidBrush( RGB( 160, 160, 160 ) );
dc.SetTextColor( RGB( 50, 50, 250 ) );
}
else if( m_State == bsHot )
{
Brush.CreateSolidBrush( RGB( 100, 100, 180 ) );
dc.SetTextColor( RGB( 250, 250, 0 ) );
}

pOldBrush = dc.SelectObject( &Brush );
GetClientRect( &RC );
dc.RoundRect( &RC, PT );

HRGN hRgn = CreateRectRgn( RC.left, RC.top, RC.right, RC.bottom );
SetWindowRgn( hRgn, TRUE );
DeleteObject( hRgn );

GetWindowText(Text );
dc.DrawText( Text, &RC, DT_CENTER | DT_VCENTER | DT_SINGLELINE );

dc.SelectObject( pOldFont );
dc.SelectObject( pOldBrush );
}


重绘之后,按钮不能响应原来的事件了?
这是怎么回事呢?

------解决方案--------------------
查看DDX_Control和消息映射ON_BN_CLICKED
是否健全
------解决方案--------------------
重绘按钮难道不是应该改写的是DrawItem函数么?
按钮风格应该改成ModifyStyle(0,BS_OWNERDRAW,0);

------解决方案--------------------
不相干,别的地方代码有问题。
------解决方案--------------------
……我就说嘛,关键的地方总是忘了说,你不去处理鼠标消息怎么会不响应按钮。

在你的消息函数里去调用基类的消息函数即可。
------解决方案--------------------
引用:
引用:自绘的按钮都得手动的加点击事件,定义一个。
//定义按钮的单击事件
#define CM_POSCHANGA WM_USER+1
// Generated message map functions
//{{AFX_MSG(CLaminatorSZBDlg)
afx_msg void OnButton1();
/……

建议你还是去看一下这个东西。
http://blog.csdn.net/sadasasdasd/article/details/8556678
------解决方案--------------------
引用:
……我就说嘛,关键的地方总是忘了说,你不去处理鼠标消息怎么会不响应按钮。

在你的消息函数里去调用基类的消息函数即可。

帮我去看个贴子
http://bbs.csdn.net/topics/390411294

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有