我在做一个东东,过程是这样的。
有个显示圆形按钮的图片贴在位图上,我希望当鼠标点击到这个圆形区域上时,圆形按钮图片的显示就是换成另一种背景的灰色图片。原来我用按钮类已经实现,现在要换成用贴图实现。之前查资料,说让我使用OnMouseMove消息响应,然后再这个函数里面 用CRect的PtInRect()写入判断处理。可是我这样子写入没有动静。现在我怀疑我的思路不对... 该怎么解决, 请大侠们高抬贵手,帮帮小弟.我现在的代码是这样的:
void CXXADlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPaintDC dc(this);
CRect rect(43,35,95,87); //按钮图片的位置 if(rect.PtInRect(point)) //如果在这个区域内,图片更换
{ COLORREF crMask = RGB(0xff,0xff,0xff);
BITMAP bm;
m_BitmapT.GetBitmap(&bm);
int nWidth = bm.bmWidth;
int nHeight = bm.bmHeight;
CDC ImageDC;
ImageDC.CreateCompatibleDC(&dc); CBitmap *pOldImageBMP1 = ImageDC.SelectObject(&m_BitmapS);
TransparentBlt2(dc.m_hDC,43,75,nWidth,nHeight,ImageDC.m_hDC,0,0,nWidth,nHeight,crMask);
ImageDC.SelectObject(pOldImageBMP1);
}
else //鼠标离开区域,换回原图
{
...
}
CDialog::OnMouseMove(nFlags, point);
}
有个显示圆形按钮的图片贴在位图上,我希望当鼠标点击到这个圆形区域上时,圆形按钮图片的显示就是换成另一种背景的灰色图片。原来我用按钮类已经实现,现在要换成用贴图实现。之前查资料,说让我使用OnMouseMove消息响应,然后再这个函数里面 用CRect的PtInRect()写入判断处理。可是我这样子写入没有动静。现在我怀疑我的思路不对... 该怎么解决, 请大侠们高抬贵手,帮帮小弟.我现在的代码是这样的:
void CXXADlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPaintDC dc(this);
CRect rect(43,35,95,87); //按钮图片的位置 if(rect.PtInRect(point)) //如果在这个区域内,图片更换
{ COLORREF crMask = RGB(0xff,0xff,0xff);
BITMAP bm;
m_BitmapT.GetBitmap(&bm);
int nWidth = bm.bmWidth;
int nHeight = bm.bmHeight;
CDC ImageDC;
ImageDC.CreateCompatibleDC(&dc); CBitmap *pOldImageBMP1 = ImageDC.SelectObject(&m_BitmapS);
TransparentBlt2(dc.m_hDC,43,75,nWidth,nHeight,ImageDC.m_hDC,0,0,nWidth,nHeight,crMask);
ImageDC.SelectObject(pOldImageBMP1);
}
else //鼠标离开区域,换回原图
{
...
}
CDialog::OnMouseMove(nFlags, point);
}
解决方案 »
- 读取ini文件的问题,请帮助一下
- 【求助】单击标题栏弹出系统菜单是触发的什么消息
- 急!!!在线等待!!!关于读优盘数据问题
- 请问我想在用VC编写的MDI窗体中去掉窗体凹下去的边框该怎么办?
- 这样把内存数据转换成原来界面上显示的数据啊!
- 小弟对串口编程一无所知,为了帮朋友,向大家请教PCI9054的问题。
- 急切寻找基于vc++的一种图像(DIB)切割算法的源代码
- 高手快来
- FreeLibrary中清理DLL自己创建线程的问题
- 诚心寻找编程高手定做一个DNF游戏辅助程序(薪酬面议)价格令你满意!!
- 当把treectrl的某个节点用TVIS_BOLD变成高亮后,以后如何判断某个节点是否处于加粗状态?
- VC6编写的程序在有些电脑上运行很慢
BOOL CCheckPage::HitTestCtrlItem(int nID, POINT pt)
{
HWND hWnd;
RECT rect; hWnd = ::GetDlgItem(m_hWnd, nID);
::GetWindowRect(hWnd, &rect);
::ClientToScreen(m_hWnd, &pt);
if(pt.x >= rect.left && pt.x <= rect.right && pt.y >= rect.top && pt.y <= rect.bottom)
return true; return false;
}