Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/86: Рейтинг темы: голосов - 86, средняя оценка - 4.55
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033

Нажатие левой кнопки мыши

20.08.2012, 17:56. Показов 16697. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
господа создаю основное окно , а затем с этим же классом создаю дочернее окно вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <windows.h>
#define BTN 0x0000012
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
 
 HWND child;
 
HINSTANCE hin;
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
hin= hThisInstance;
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
                     
        child = CreateWindowEx(0, szClassName,"wind",
                                WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                                75, 75, 75, 25, hwnd, (HMENU)BTN, 
                                0, 
                                NULL);
 
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {   
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 
    switch (message)                  /* handle the messages */
    {
           case WM_CHAR:
                
MoveWindow(child,0,0,100,100,true);
                
                break;
 
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
в силу обстоятельств , что окон в программе будет достаточно много привязал всё к основному и впринцепе всё нормально , но встал вопрос как отследить нажатие левой кнопки мыши в окне child по индефикатору BTN . В основном окне всё понятно case WM_LBUTTONDOWN , а как быть в данной ситуации , когда нет обработчика для окна child
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2012, 17:56
Ответы с готовыми решениями:

Программное нажатие левой кнопки мыши
Господа, кто нить подскажет как можно заставить программу нажимать левую кнопку мыши. Пробовал делать так: ...

Отловить нажатие левой кнопки мыши
Всем привет, я совсем новичок, пытаюсь отловить событие - нажатие кнопок мыши, но к сожалению не получается. Нашёл кучу косвенных...

Зажатие левой кнопки мыши консоль
Как узнать, что кнопка мыши отпущена? Но мне нужно по нажатию начать что-то делать и по отпусканию завершить. Я понимаю, что на отпускании...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.08.2012, 18:13
Цитата Сообщение от Игорь с++ Посмотреть сообщение
В основном окне всё понятно case WM_LBUTTONDOWN
Ничего не понятно. Если при заходе в оконную функцию hwnd == child, то будет пойман клик по дочернему окну, а не по родительскому:

C++
1
2
3
4
5
6
7
8
9
10
    case WM_LBUTTONDOWN:
        if(hwnd == child)
        {
            MessageBox(NULL, "Child click", "Left mouse button", MB_OK);
        }
        else
        {
            MessageBox(NULL, "Parent click", "Left mouse button", MB_OK);
        }
        break;
1
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
20.08.2012, 18:22  [ТС]
спасибо большое не знал , что можно так сравнивать,ещё раз огромное спасибо !!!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.08.2012, 18:24
P.S.
А чтобы при клике точно узнать, на каком из дочерних окон был клик -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    case WM_LBUTTONDOWN:
        if(hwnd == mainWnd) // Наоборот, запоминаешь HWND главного окна, оно у тебя одно
        {
            MessageBox(NULL, "Parent click", "Left mouse button", MB_OK);
        }
        else
        {
            // А если не главное - значит, дочернее. Для него
            LONG id = GetWindowLong(hwnd, GWL_ID); // получаешь то, что передавалось через hMenu
            char s[20] = {0};
            sprintf(s, "Child click (id = %ld)", id);
            MessageBox(NULL, s, "Left mouse button", MB_OK);
        }
        break;
1
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
20.08.2012, 19:34  [ТС]
Спасибо огромнейшее за помощь !!!
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
23.08.2012, 22:32  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
if(hwnd == mainWnd)
я дико извеняюсь , но не могли бы вы пояснить что такое у вас означает - mainWnd
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
23.08.2012, 22:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
HWND mainWnd; // глобально
 
// ...
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    mainWnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
// ...
, это просто хэндл родительского окна.
1
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
23.08.2012, 23:18  [ТС]
я просто для проверки
C++
1
if(hwnd==mainHwnd){}
сделал так
C++
1
mainHwnd=FindWindow(NULL,"MyName");
это не будет коряво смотреться ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.08.2012, 23:18
Помогаю со студенческими работами здесь

Симуляция нажатия левой кнопки мыши в другом окне
Есть программа (написана на C# - Windows form app) мне нужно послать нажатие лкм по координатам чтобы нажать, допустим, кнопку ...

Открытие/закрытие окна по нажатию/отжатию левой кнопки мыши
Нужно чтобы программа выполняла открытие дочернего окна при нажатии левой кнопки мыши, а при отжатии закрывала дочернее окно. У меня...

Увеличение размера строки при нажатии левой кнопки мыши
Хочу выведенную строку увеличивать (размер шрифта) при нажатии левой кнопки мыши. Но ничего не происходит, а понять не могу что: ...

При нажатии левой кнопки мыши в поле первого окна, открывать второе
Подскажите пожалуйста, как сделать, чтоб при нажатии левой кнопки мыши в поле первого окна, открывалось второе новое окно. При этом оно не...

Действия при нажатии левой(правой) кнопки мыши в рабочей области окна
Нужно Написать Win32API. Что бы правая и левая кнопка мыши выполняли действия написанные в варианте! Помогите пожалуйста.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru