получить странную позицию курсора

Хорошо, я работаю с векторами сегодня 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() вызывается и использует векторные элементы, которые содержат позиции курсора, чем рисует изображение в позициях курсора.
но, похоже, не рисует его в позициях курсора.
какие-либо идеи?


person Ramilol    schedule 19.08.2010    source источник
comment
Используйте двойные пробелы для разрыва строки вместо тега ‹br›. Также используйте кнопку кода вместо тега ‹pre›.   -  person the_drow    schedule 19.08.2010


Ответы (1)


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; 
person Alex F    schedule 19.08.2010
comment
Не получилось - что ты имеешь в виду? Что-то изменилось? Дайте больше информации. Например, щелкните в левом углу окна, x и y int WM_LBUTTONDOWN должны быть небольшими значениями. Какие значения у вас есть в fRegularShot? Где нарисовано изображение? Кроме того, чтобы прояснить логику программы, используйте вектор ‹POINT› вместо вектора ‹int›. У вас проблемы с векторными индексами. - person Alex F; 19.08.2010
comment
хорошо, он компилируется, но ничего не меняется, все равно дают неправильные координаты. то, что он должен делать, курсор x = 150 и y = 20., чем изображение будет нарисовано, и его позиция будет x = 150 и y = 20, но я получаю неправильные координаты - person Ramilol; 19.08.2010
comment
@Ramiz Toma: Вы имеете в виду, что координаты перевернуты (x = 20, y = 150) или полностью неверны? Если вы еще этого не сделали, я думаю, вам следует последовать совету Алекса по изменению вектора с vector<int> на vector<PointF> (PointF определен в GDI +). Если у вас есть IDE, которая может отлаживать, не могли бы вы поставить точку останова, когда вы ее рисуете и проверить значения в вашем векторе? - person Default; 19.08.2010
comment
хорошо, я не мог согласиться с твоей идеей или его боем ‹po› ........... но я согласился с твоей идеей с использованием точки останова ... первая левая кнопка мыши нажата, я получаю x = что-то и y = 0 совершенно неверно ..... - person Ramilol; 19.08.2010
comment
Я только что прочитал ваш разговор ("they didn't work") в этих комментариях и поинтересовался, не открыл ли я случайно вкладку браузера для нашей внутренней системы поддержки клиентов. :-) - person Frerich Raabe; 19.08.2010
comment
@Ramiz Toma: прямо сейчас отлаживайте свою программу и проверяйте (ставьте точку останова), когда вы добавляете значения в вектор. Вы добавляете к вектору значения corect? - person Default; 19.08.2010