你有没有发现在你取色的时候DreamWeaver编辑器的光标没了?所以方法是这样的
取当前程序主窗口大小和位置,用这个大小和位置创建一个无标题栏的窗口,你可以让这个新窗口不做任何显示相关的事情,这样它的显示就是你原来程序主窗口的显示,你也可以用BitBlt的办法(就是烦一点)。然后对你的新窗口设鼠标光标,当发生LButtonDown是,把你的新窗口关掉,就这么简单。

解决方案 »

  1.   

    1:api getpixelcolor
    2:如果想任何时候都是你要求的那个光标(鼠标光标),则可以放置一个消息钩子,将OnSetCurSor过滤掉,而你程序启动是先改光标再说。
    或者用开个循环来设置光标,而不管光标是否在你的窗体上。
      

  2.   

    怎么不用SetCapture()?这样鼠标移出窗口就不会变回来。此外,在SetCapture后重载WM_MOUSEMOVE消息,用GetWindowFromPoint取得目标窗口句柄,再获取hDC后,可以用GetPixel获取该点下的颜色。就象spy做的那样。
      

  3.   

    SetCapture()不能移出自身窗口,一出去就不是自己的了。
      

  4.   

    SetCapture不能移出自身窗口吗?不可能,你是怎么做的?
      

  5.   

    当一个窗口调用SetCapture后,只要不调用ReleaseCapture,所有的Mouse消息都发送至此窗口,不管鼠标在窗口内还是窗口外。
      

  6.   

    在一个函数里根据条件
    if (m_bPick)
    {
        m_curNow = ::LoadCursor(NULL, IDC_CROSS);
        m_curOld = SetCursor (m_curNow);
        SetTimer (PICKTIME_ID, 50, NULL);
        SetCapture ();
    }
    ..
    鼠标在那个程序的范围是显示十字光标的,出了窗口,就随其他应用程序了,该怎么样就怎么样了,真是无法无天阿!
      

  7.   

    SetCapture函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。
    也就是说,你必须确定鼠标在你的窗口里,才能调用SetCapture.你试试在点击取色功能的按钮时调用SetCapture,或重载WM_LBUTTONDOWN消息,在收到下一次点击时ReleaseCapture().同时取得点击处颜色。
      

  8.   

    我是在点击取色按钮是调用的SetCapture()阿,我都糊涂了。