0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
|
||||||||||||||||
1 | ||||||||||||||||
Обработка нажатия на Button и программное нажатие правой кнопки мыши17.05.2014, 01:46. Показов 3736. Ответов 9
Метки нет Все метки)
(
Здравствуйте! Разбираюсь в винапи, есть окно с кнопкой, которая должна включать/выключать перемещение курсора и клик мышью в окне. Но возникли пара сложностей, не могу найти в сообщении WM_COMMAND hmenu кнопки. Без проверки на hmenu все срабатывает как надо, с ним - нет. Пробовал и LOWORD(), и HIWORD(), даже с lparam и вручную:
BTN - макрос, заменяется числом, наклацаным случайным образом
0
|
|
17.05.2014, 01:46 | |
Ответы с готовыми решениями:
9
Программное нажатие левой кнопки мыши Программное нажатие на левую и правую кнопку мыши Взаимосвязь правой кнопки мыши с функцией getch Действия при нажатии левой(правой) кнопки мыши в рабочей области окна |
Заблокирован
|
|
17.05.2014, 06:20 | 2 |
послушай, в дефолтной проекте из VS уже всё реализовано, в конкретно твой вопрос?
Давай сделаем так - ты соблаговолишь запустить стандартный проект из VS и если останутся вопросы - ты укажешь на конкретную строку и скажешь - "вот тут какой - то косяк с WinApi" :-)
0
|
2 / 2 / 3
Регистрация: 28.05.2013
Сообщений: 28
|
||||||
17.05.2014, 14:48 | 3 | |||||
Что касается кнопки:
теоретически все верно. Только обычно принято оформлять обработку WM_COMMAND не через if, а через switch.
Объясни точнее, как она определяется.
0
|
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
|
|
17.05.2014, 16:49 [ТС] | 4 |
newbie666, что это за дефолтный проект? Там вроде ничего такого нет
egorus99, значение макроса получено методом тыка по клавиатуре. Про свитч я понял, учту.
0
|
2 / 2 / 3
Регистрация: 28.05.2013
Сообщений: 28
|
|
18.05.2014, 13:56 | 5 |
Все равно мне кажется, что виноват макрос...
Скиньте весь код программы, или скиньте проект в архиве.
0
|
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
|
|
18.05.2014, 19:13 [ТС] | 6 |
egorus99,
Кликните здесь для просмотра всего текста
Код
#define BTN 239875 #define MAIN 13948534 #include <windows.h> #include <cstdlib> #include <ctime> HWND hwndFound, hwnd, btn; LRESULT CALLBACK MainProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); void Start(); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX wcx; int width, height; MSG msg; RECT srect; GetWindowRect(GetDesktopWindow(), &srect); width = srect.right; height = srect.bottom; wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc = MainProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hInst; wcx.hIcon = 0; wcx.hCursor = 0; wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszMenuName = 0; wcx.lpszClassName = L"classname"; wcx.hIconSm = 0; if (!RegisterClassEx(&wcx)){ MessageBox(0, L"!", L"RegisterClass failed", 0); return 1; } hwnd = CreateWindowEx( 0, L"classname", L"Off", WS_SYSMENU | WS_MINIMIZEBOX, width / 2 - 112, height / 2 - 40, 224, 80, 0, 0, hInst, 0 ); if (!hwnd){ MessageBox(0, L"!", L"CreateWindow failed", 0); return 1; } GetClientRect(hwnd, &srect); width = srect.right; height = srect.bottom; btn = CreateWindowEx( 0, L"button", L"Go", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 0, 0, width, height, hwnd, (HMENU)BTN, hInst, 0 ); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, 0, 0, 0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK MainProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp){ switch (msg){ case WM_COMMAND: switch (LOWORD(wp)){ case BTN: // ничего не выполняется hwndFound = FindWindow(0, L"Name"); if (!hwndFound){ MessageBox(0, L"Cannot find window by name", L"!", 0); break; } SetWindowText(hwnd, L"On"); SetWindowText(btn, L"In progress"); EnableWindow(btn, false); Start(); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wp, lp); } return 0; } void Start(){ int lp; Sleep(3500); srand(time(0)); lp = (rand() * 23 % 1080) << 16; lp = lp + (rand() * 17 % 1920); SetCursorPos(lp & 0xFFFF, lp >> 16); Sleep(255); SendMessage(hwndFound, WM_RBUTTONDOWN, MK_RBUTTON, lp); Sleep(200); SendMessage(hwndFound, WM_RBUTTONUP, MK_RBUTTON, lp); SetWindowText(hwnd, L"Off"); SetWindowText(btn, L"Go"); EnableWindow(btn, true); }
0
|
Brainsbreaker
897 / 373 / 53
Регистрация: 01.02.2011
Сообщений: 1,594
|
|
19.05.2014, 01:44 | 7 |
#define BTN (239875-174340) для начала.
0
|
2 / 2 / 3
Регистрация: 28.05.2013
Сообщений: 28
|
|
19.05.2014, 07:50 | 8 |
Видимо, какое-то ограничение в размере id.
Поставил значение 1000 - стал видеть. Правда, стало появляться окно "Cannot find window by name". Но это уже другая проблема.
0
|
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
|
|
19.05.2014, 11:04 [ТС] | 9 |
Да, все дело оказалось в размере числа. Странно что о содержимом структуры в интернете ничего нет.
0
|
22 / 4 / 0
Регистрация: 16.04.2007
Сообщений: 70
|
|
07.11.2016, 20:22 | 10 |
Ответ я вроде только что раскопал по схожей теме, на оверфлоуне его черканул: http://stackoverflow.com/quest... 5#40470665
0
|
07.11.2016, 20:22 | |
Помогаю со студенческими работами здесь
10
Нажатие левой кнопки мыши Как получить кординаты нажатия кнопки мыши?
Запрет нажатия правой кнопки мыши Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |