Witam.
Program ma wyświetlać bitmapę i rysować kursor(inną bitmapę z tekstem) w zależności od ustawień struktury obsługującej pozycję.
Mam problem ponieważ naciśnięcie klawisza w górę po klikukrotnym naciskaniu w dół powoduje jedno więcej przejście klawisza w dół i dopiero potem w górę.
Tu jest kod:
struct pozycje {
int pos;
RECT posxy[30];
wchar_t tablica[30][30];
};
pozycje pozycja;
void LoadScreen(HWND hWnd) {//..} //rysuje tło całej aplikacji
void LoadScreen2(HWND hWnd, RECT rozmiar) {//.. }//rysuje tło kursora i wyświetla napis
void DrawPos(HWND hWnd) {//..} // wypisuje dane o aktualnej pozycji - dane techniczne
Incjalizowanie struktury:
//w winMain
hMain = hWnd;
pozycja.pos = 0;
int starty=155, stopy=180;
for (int i = 0; i < 20; i++) {
pozycja.posxy[i].left = 10;
pozycja.posxy[i].right = 100;
pozycja.posxy[i].top = starty;
pozycja.posxy[i].bottom = starty + 25;
starty += 30;
}
Problem jest w tym miejscu:
// Główna pętla komunikatów:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
if ((msg.wParam == VK_DOWN || msg.wParam == VK_UP) && msg.message==WM_KEYDOWN)
{
if (msg.wParam == VK_DOWN) {
for (int i = 0; i < 19; i++) {
if (i < 20) {
if (pozycja.pos == i) {
LoadScreen(hMain);
LoadScreen2(hMain, pozycja.posxy[i]);
pozycja.pos++;
DrawPos(hMain);
}
}
}
}
else {
for (int i = 0; i < 20; i++) {
if (pozycja.pos == i && i > 0) {
LoadScreen(hMain);
LoadScreen2(hMain, pozycja.posxy[i]);
pozycja.pos--;
DrawPos(hMain);
}
}
DispatchMessage(&msg); }
}else{ DispatchMessage(&msg); }
}
Po pierwszym naciśnięciu strzałki(pierwsza rzecz po uruchomieniu programu) w dół pojawiają się takie informacje o strukturze:
(ale kursor jest wyświetlany nie na miejscu 1 tylko zerowym nadal)