Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопки, обработка нажатия 
V
    Опции темы
cupper
Дата 25.9.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



я уверен на 100% что вопрос глупый, но убейте некак немогу разобраться. 
Вот предположим мы создали окно c хенделом h1, и создали в нем кнопку с хенделом h2.
теперь я хочу чтоб когда я нажал на ету кнопку посреди (неважно где) окна вывелось например "hello wold". Я замучался ужи читать про все ето но все где я читаю нету явно написаного когда какже всетаки обработать ето гребаное нажиние кнопки.
Немоглибы вы написать прям мааненький кусочек кода именно уже пря в виде 
Код

case нажили кнопку:
     и вот мы ее обрабатваем
     и вызываем при нажитии етой кнопки какуюто функцию
braek;


и еще я хз как етот код бует выглядить, поетому сразу доспраша, если есть 2, 3, ... кнопок
с хенделами h2, h3, ...  как из полученного сообщения определить какую конпку мы нажали.
Ето бует по типу 
Код

case нажили кнопку:
     swith (msg.поле_передающее_значение_хендела)
          case h1: делаем тото; break;
          case h2: делаем чета другое; braek;
          ....
          default: а ета конпка пока необрабатываеться;
        
braek;


PS. сори за очепятки


Это сообщение отредактировал(а) cupper - 25.9.2008, 12:07
PM MAIL   Вверх
586
Дата 25.9.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
#include <windows.h>
#include <tchar.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    LPCTSTR text;

    switch(uMsg)
    {
    // ....
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case ID_BUTTON1:
            text = _T("Hello world");

            hdc = GetDC(hWnd);
            TextOut(hdc, 5, 5, text, _tcslen(text));
            ReleaseDC(hWnd, hdc);
            break;
        }
        break;

    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

PM   Вверх
mekhanikus
Дата 25.9.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



При создании кнопки присваиваешь ей идентификатор
(параметр окна - HMENU hMenu, // handle to menu or child-window identifier).

В WinProc родителя отлавливаешь WM_COMMAND, а в ней свой идентификатор.
Соответственно для разных кнопок будут разные иденты.
PM MAIL   Вверх
cupper
Дата 25.9.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



кланюсь вам в ноги ))

Это сообщение отредактировал(а) cupper - 25.9.2008, 15:35
PM MAIL   Вверх
cupper
Дата 25.9.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



неработает !
а именно:
создаю конпку
Код

HMENU ID_Button1;
hButton = CreateWindow(
"button", 
"тыкни на меня", 
 WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
10, 10, 100, 30, // Ширина и высота окна
hWnd, // Хендл родительского окна
ID_Button1, 
hInst, 
NULL);

питыюсь обработать
Код

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ //wParam
        switch(msg){
                    case WM_COMMAND:
                         switch(LOWORD(wParam)){
                                                case ID_Button1:
                                                     /*text = _T("Hello world");
                                                     hdc = GetDC(hWnd);
                                                     TextOut(hdc, 5, 5, text, _tcslen(text));
                                                     ReleaseDC(hWnd, hdc);*/
                                                     //break;
                                                }
                         break;

и на виделенную строчку он мне жалуеться и пишет
Код

102 C:\Documents and Settings\Cupper\Мои документы\DEV-C++\WinAPI\Окно\main.cpp `ID_Button1' undeclared (first use this function) 

немоглибы пояснить почему ?
PM MAIL   Вверх
586
Дата 25.9.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
#include <windows.h>
#include <tchar.h>

#define ID_Button1   100     // идентификатор контрола - любое число, меньшее 65536

// ..............

hButton = CreateWindow(_T("button"),  _T("тыкни на меня"), 
        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
       10, 10, 100, 30, // Ширина и высота окна
       hWnd, // Хендл родительского окна
       (HMENU)ID_Button1, 
       hInst, 
       NULL);

// ...............

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ //wParam
        switch(msg){
                    case WM_COMMAND:
                         switch(LOWORD(wParam)){
                                                case ID_Button1:
                                                     /*text = _T("Hello world");
                                                     hdc = GetDC(hWnd);
                                                     TextOut(hdc, 5, 5, text, _tcslen(text));
                                                     ReleaseDC(hWnd, hdc);*/
                                                     break;
                                                }
                         break;


Это сообщение отредактировал(а) 586 - 26.9.2008, 02:49
PM   Вверх
cupper
Дата 26.9.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



аа, вон оно че, а я то идентификатор создавал типа передаваемого аргумента (( СПС
PM MAIL   Вверх
ProgramerKo
Дата 23.12.2008, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.10.2008

Репутация: нет
Всего: нет



а как обработать нажатие кнопки в чужом приложении? smile 
Модератор: Пожалуйста, один топик - один вопрос.

Это сообщение отредактировал(а) GremlinProg - 23.12.2008, 13:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.2033 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.