我在做一个东东,过程是这样的。
有个显示圆形按钮的图片贴在位图上,我希望当鼠标点击到这个圆形区域上时,圆形按钮图片的显示就是换成另一种背景的灰色图片。原来我用按钮类已经实现,现在要换成用贴图实现。之前查资料,说让我使用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);
}

解决方案 »

  1.   

    你TRACE一下看,进入if(rect.PtInRect(point))这个if没
      

  2.   

    CPaintDC只能用在WM_PAINT(OnPaint)消息中,你这里用CClientDC。
      

  3.   

    同意,就是这个意思,用CDC也可以。
      

  4.   

    下面这个函数是判断鼠标是不是在那个区域 LZ看用得着不。
    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;
    }