获得奇怪的光标位置

时间:2010-08-19 08:00:12

标签: c++ visual-c++ winapi gdi+

好的,所以今天我正在使用矢量yaya!
我也正在与getcursorpos()合作,我得到了奇怪的结果 这是代码:

VOID fRegularShot(HDC hdc, HWND hWnd)
{
    Graphics graphics(hdc);
    Image shot(L"RegularShots.png");
    long index=0;
    while(index<=(long)pRegularShots.size())
    {
        index+=2;
        int x=pRegularShots.at(index);
        int y1=index+1;
        int y=pRegularShots.at(y1);
        graphics.DrawImage(&shot, x, y);
    }
}
///////////////////////////////////////////////////
event
case WM_LBUTTONDOWN:
    iRegularShots=0;
    POINT pt;
    GetCursorPos(&pt);
    pRegularShots.insert(pRegularShots.begin()+1, pt.y);
    pRegularShots.insert(pRegularShots.begin()+1, pt.x);
    InvalidateRect(hWnd, rect, false);
    break;

基本上调用函数fregularshots()并使用包含光标位置的向量元素,而不是在光标位置上绘制图像。
但它似乎没有在光标位置上绘制它 任何想法?

1 个答案:

答案 0 :(得分:0)

GetCursorPos返回屏幕坐标中的光标位置。使用ScreenToClient(hWnd,...)将其转换为窗口客户端坐标。

GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);

您也可以在没有GetCursorPos功能的情况下工作。收到WM_LBUTTONDOWN通知时,lParam包含窗口客户端鼠标坐标:x为低位字,y为高位字:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 

编辑: 让我们使这段代码更简单。

vector<POINT> pRegularShots;

VOID fRegularShot(HDC hdc, HWND hWnd) 
{ 
    Graphics graphics(hdc); 
    Image shot(L"RegularShots.png"); 
    long index=0; 
    while(index < (long)pRegularShots.size()) 
    { 
        graphics.DrawImage(&shot, pRegularShots[index].x, pRegularShots[index].y); 
        ++index;
    } 
} 


case WM_LBUTTONDOWN: 
    POINT pt; 
    pt.x = GET_X_LPARAM(lParam); 
    pt.y = GET_Y_LPARAM(lParam); 
    pRegularShots.push_back(pt); 
    InvalidateRect(hWnd, rect, false); 
    break;