下载的一个关于XP风格按钮示例
对话框启动时按钮没有边界,鼠标在上面的时候就有边界了
我想知道画边界是怎么实现的,找了半天没找到
对话框启动时按钮没有边界,鼠标在上面的时候就有边界了
我想知道画边界是怎么实现的,找了半天没找到
解决方案 »
- 这个是什么控件?
- 【MFC使用BCG edit控件如何多次打开并读写同一个文件】
- 急,各位高手帮帮忙,在线等
- 请求达人帮忙!MFC中不显示控制台程序窗口的方法
- 请教,如何在一个MFC Dialog的窗口的区域中加入一个CListCtrl窗口或者CListView?
- 这种功能起什么名字比较好?
- 初级问题,关于attach和detach的疑问
- 如何让DLL被调用时,DLL里的函数自行知道DLL文件的位置
- 我建的ATL控件为何没有窗体?
- 编译问题,在Debug模式出现该提示,但是在release模式就没有问题,请大侠帮忙
- 程序从网页获取的中文字符串在调试的时候显示乱码,网页是Unicode编码,怎么办?
- 如何在View上画一个BitMap
{
return BTNST_OK;
}
这个是为了不画边界,是吗?
应该有很多这种源码
关键问题是我不知道它在哪里绘制边界
MOUSEMOVE吗?没有找到
不过,我按照《windows程序设计》
上的一个例子(用Custom Control注册一个类),
稍加扩充来模拟XP风格按钮。
{
CPen penBorder;
penBorder.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));
CPen* pOldPen = pDC->SelectObject(&penBorder);
return BTNST_OK;
}
本来以为这样应该就可以了,但是却没有效果,依然没有边界
首先重载CButton类。
然后添加变量
UINT m_BitmapNow;//将要显示的位图ID好
BOOL m_bMouseCaptured;//标记鼠标是否移动到按钮上
同时将OnLbuttonUp()
{
return TRUE;//直接
}
然后是OnMouseMove()
{
CRect m_Rect;
GetClientRect(&m_Rect);
/*你的绘图代码*/
//鼠标在窗口外,释放鼠标捕获
if (!m_Rect.PtInRect(point))
{
if (!m_bMouseCaptured)
return;
ReleaseCapture();
}
else
{
//鼠标在窗口内,设置鼠标捕获
if (m_bMouseCaptured) return;
SetCapture();
}
CWnd::OnMouseMove(nFlags, point);
}
还有就是改
void CMyButton::OnCaptureChanged(CWnd *pWnd)
{
//当鼠标标记改变是,改变标记变量同时改变背景位图ID
if (m_bMouseCaptured)
{
m_bMouseCaptured=FALSE;//鼠标移出
m_BitmapNow=IDB_DOWN1;//此处是开始鼠标已移动到窗口上现在移出,还原为原来位图
}
else
{
m_bMouseCaptured=TRUE;//鼠标移入
m_BitmapNow=IDB_DOWN2;//鼠标进入,改变显示位图ID
}
CWnd::OnCaptureChanged(pWnd);
InvalidateRect(&m_Rect);/此处调用OnPaint();重绘按钮
}
这外函数看能行不