//================================================================================================= void GamePanel::UpdateBoxIndex(float dt, int index) { if(index != INDEX_INVALID) { if(index != last_index) { box_state = BOX_COUNTING; last_index = index; show_timer = 0.3f; } else show_timer -= dt; if(box_state == BOX_COUNTING) { if(show_timer <= 0.f) { box_state = BOX_VISIBLE; box_alpha = 0.f; FormatBox(); if(box_img) { D3DSURFACE_DESC desc; box_img->GetLevelDesc(0, &desc); box_img_size = INT2(desc.Width, desc.Height); } } } else { box_alpha += dt*5; if(box_alpha >= 1.f) box_alpha = 1.f; } } else { box_state = BOX_NOT_VISIBLE; last_index = INDEX_INVALID; } if(box_state == BOX_VISIBLE) { INT2 text_size = GUI.default_font->CalculateSize(box_text); box_big.left = 0; box_big.right = text_size.x; box_big.top = 0; box_big.bottom = text_size.y; INT2 size = text_size + INT2(24,24); INT2 pos2 = INT2(GUI.cursor_pos) + INT2(24,24); INT2 text_pos(12,12); // uwzglêdnij rozmiar obrazka if(box_img) { text_pos.x += box_img_size.x+8; size.x += box_img_size.x+8; if(size.y < box_img_size.y+24) size.y = box_img_size.y+24; } // minimalna szerokoœæ if(size.x < 256) size.x = 256; INT2 text_pos2(12, text_pos.y); text_pos2.y += size.y - 12; int size_y = 0; if(!box_text_small.empty()) { INT2 size_small = GUI.fSmall->CalculateSize(box_text_small, size.x-24); box_small.left = 0; box_small.right = size_small.x; box_small.top = 0; box_small.bottom = size_small.y; size_y = size_small.y; size.y += size_y + 12; } if(pos2.x + size.x >= GUI.wnd_size.x) pos2.x = GUI.wnd_size.x - size.x - 1; if(pos2.y + size.y >= GUI.wnd_size.y) pos2.y = GUI.wnd_size.y - size.y - 1; box_img_pos = INT2(pos2.x+12, pos2.y+12); box_big.left = text_pos.x + pos2.x; box_big.right = box_big.left + text_size.x; box_big.top = text_pos.y + pos2.y; box_big.bottom = box_big.top + text_size.y; box_small.left += pos2.x + text_pos2.x; box_small.right += pos2.x + text_pos2.x; box_small.top += pos2.y + text_pos2.y; box_small.bottom += pos2.y + text_pos2.y; box_small.right = box_small.left + box_size.x-24; box_size = size; box_pos = pos2; } }
LRESULT MainDialogProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { HKL hKl; switch (Msg) { case WM_INITDIALOG: { WCHAR Buf[255]; UpdateData(hDlg); hMainDlg = hDlg; SubclassWnd(GetDlgItem(hDlg, IDC_LIST), L"List"); SubclassWnd(GetDlgItem(hDlg, IDC_EDIT1), L"Edit1"); SubclassWnd(GetDlgItem(hDlg, IDC_KLID), L"Klid"); SubclassWnd(GetDlgItem(hDlg, ID_CANCEL), L"CancelB"); SubclassWnd(GetDlgItem(hDlg, IDC_ACTIVATE), L"ActivateB"); SubclassWnd(GetDlgItem(hDlg, IDC_REFRESH), L"RefreshB"); SubclassWnd(GetDlgItem(hDlg, IDC_UNLOAD), L"UnloadB"); SubclassWnd(GetDlgItem(hDlg, IDC_LOAD), L"LoadB"); CheckRadioButton(hDlg, IDC_FROMLIST, IDC_FROMEDIT, IDC_FROMLIST); SetWindowText(GetDlgItem(hDlg, IDC_KLID), L"00000419"); swprintf(Buf, L"Current thread id: %d", GetCurrentThreadId()); SetWindowText(GetDlgItem(hDlg, IDC_CURTHREAD), Buf); SetWindowText(GetDlgItem(hDlg, IDC_DELAY), L"0"); return 0; } /* WM_INITDIALOG */ case WM_COMMAND: { switch(LOWORD(wParam)) { case ID_CANCEL: { EndDialog(hDlg, ERROR_CANCELLED); break; } case IDC_ACTIVATE: { if((hKl = GetActivateHandle(hDlg)) != INVALID_HANDLE_VALUE) { Sleep(GetDelayMilliseconds(hDlg)); if(!(hKl = ActivateKeyboardLayout(hKl, GetActivateFlags(hDlg)))) FormatBox(hDlg, MB_ICONERROR, L"Error", L"ActivateKeyboardLayout() failed. %d", GetLastError()); else UpdateData(hDlg); //FormatBox(hDlg, 0, L"Activated", L"Prev - %x, err - %d.", hKl, // GetLastError()); } else MessageBox(hDlg, L"No item selected", L"Error", MB_ICONERROR); break; } case IDC_UNLOAD: { if((hKl = GetSelectedLayout(hDlg)) != INVALID_HANDLE_VALUE) { Sleep(GetDelayMilliseconds(hDlg)); if(!UnloadKeyboardLayout(hKl)) FormatBox(hDlg, MB_ICONERROR, L"Error", L"UnloadKeyboardLayout() failed. %d", GetLastError()); else UpdateData(hDlg); } else MessageBox(hDlg, L"No item selected", L"Error", MB_ICONERROR); break; } case IDC_LOAD: { WCHAR buf[255]; GetWindowText(GetDlgItem(hDlg, IDC_KLID), buf, sizeof(buf)); Sleep(GetDelayMilliseconds(hDlg)); if(!LoadKeyboardLayout(buf, GetLoadFlags(hDlg))) FormatBox(hDlg, MB_ICONERROR, L"Error", L"LoadKeyboardLayout() failed. %d", GetLastError()); else UpdateData(hDlg); break; } case IDC_REFRESH: { UpdateData(hDlg); break; } case IDC_NEWTHREAD: { if(!CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL)) { FormatBox(hDlg, MB_ICONERROR, L"Error!", L"Can not create thread (%d).", GetLastError()); } } case IDC_LIST: { if(HIWORD(wParam) == LBN_SELCHANGE) { WCHAR buf[25]; if((hKl = GetSelectedLayout(hDlg)) != NULL) { swprintf(buf, L"%x", hKl); SetWindowText(GetDlgItem(hDlg, IDC_HANDLE), buf); } } break; } } return TRUE; } /* WM_COMMAND */ case WM_INPUTLANGCHANGE: { FormatMsg(L"dlg WM_INPUTLANGCHANGE lParam=%x wParam=%x\n", lParam, wParam); return FALSE; } case WM_INPUTLANGCHANGEREQUEST: { FormatMsg(L"dlg WM_INPUTLANGCHANGEREQUEST lParam=%x wParam=%x\n", lParam, wParam); UpdateData(hDlg); return FALSE; } case WM_CLOSE: { EndDialog(hDlg, ERROR_CANCELLED); return TRUE; } /* WM_CLOSE */ default: return FALSE; } }