получить странную позицию курсора - PullRequest
0 голосов
/ 19 августа 2010

Хорошо, сегодня я работаю с векторами, 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 голосов
/ 19 августа 2010

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; 
...