关于自绘按钮的响应
一个对话框程序,有一个按钮,按钮执行一些事件,
新建一个按钮派生类: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);
------解决方案--------------------不相干,别的地方代码有问题。
------解决方案--------------------……

我就说嘛,关键的地方总是忘了说,你不去处理鼠标消息怎么会不响应按钮。
在你的消息函数里去调用基类的消息函数即可。
------解决方案--------------------
建议你还是去看一下这个东西。
http://blog.csdn.net/sadasasdasd/article/details/8556678
------解决方案--------------------
帮我去看个贴子
http://bbs.csdn.net/topics/390411294