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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Куда-то мышку потерял... и меняем цвета кнопок 
:(
    Опции темы
neosapient
Дата 11.10.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Имею Windows, VC7.
Код программы.
Код

#include <windows.h>
#include <stdio.h>
#include "resource.h"

HINSTANCE hInst;                                // current instance

LRESULT CALLBACK PlayBox(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

#define MY_ID_BUTTON 10000

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    hInst = hInstance;
    return    (int)DialogBox(hInst, (LPCTSTR)IDD_PLAYBOX, NULL, (DLGPROC)PlayBox);
}

LRESULT CALLBACK PlayBox(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    int i,j;
    HWND hButton;
    switch (message)
    {
    case WM_INITDIALOG:
        for(j=0;j<10;j++)
            for(i=0;i<10;i++)
                hButton = CreateWindow("button", "", WS_VISIBLE | WS_CHILD, 10+20*i, 10+20*j, 20, 20, hDlg, (HMENU)(MY_ID_BUTTON+j*10+i), hInst, NULL);
        ShowWindow(hButton,SW_SHOW);
        break;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDCANCEL:
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;
        case MY_ID_BUTTON:
            MessageBox(hDlg, "кнопка нажата", "title", MB_OK);
            break;
        }
        break;
    case WM_NOTIFY:

        break;
    case WM_MOUSEMOVE: 
        char buf[40];
        int xPos, yPos;
        xPos = LOWORD(lParam); 
        yPos = HIWORD(lParam); 
        sprintf(buf,"x=%i, y=%i",xPos,yPos);
        SetDlgItemText(hDlg,IDC_STATIC1,buf);

        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return FALSE;
}


resource.rc
Код

IDD_PLAYBOX DIALOGEX 0, 0, 186, 157
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | 
    WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    PUSHBUTTON      "Cancel",IDCANCEL,148,24,31,14
    LTEXT           "Static",IDC_STATIC1,33,134,108,16
END

resource.h
Код

#define IDD_DIALOG1                     101
#define IDD_PLAYBOX                     101
#define IDC_STATIC1                     1001


Здесь появляется диалоговое окно, в котором при инициализации создается сто кнопок. Ниже статик-окно, в котором отображаются координаты мышки. Но при наводе на дочерний контрол, сообшения главному диалогу не посылаются. 
Вопрос: как определить над какой кнопкой висит указатель мыши? 
Можно ли заставить дочернее окно (кнопку) отправлять сообщение к родительскому окну, что на кнопку навели мышь, по кнопке щелкни ли? Наверно, родительскому окну посылается WM_NOTIFY? Но по конкретнее можно?
И как зная ID кнопки, заставить ее сменить цвет с умолчательного на желты и обратно?

Добавлено @ 20:33 
 smile 
PM MAIL   Вверх
neosapient
Дата 11.10.2006, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как пользоваться TrackMouseEvent()
PM MAIL   Вверх
neosapient
Дата 12.10.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какой-то баг в приложении...
Код

'TRACKMOUSEEVENT' : undeclared identifier
'TME_LEAVE' : undeclared identifier
'TrackMouseEvent': identifier not found, even with argument-dependent looku


Почему структура TRACKMOUSEEVENT и функция TrackMouseEvent() не компилятся.
Ведь инклужу #include <windows.h>

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Mouse.rar 5,94 Kb
PM MAIL   Вверх
neosapient
Дата 12.10.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По поводу примера, что только что давал.
Надо было вставить
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")

(только что то мой MSDN поэтому поводу молчал).

И еще ошибка, два раза в switch`e вызывал WM_MOUSEMOVE.
Во втором случае надо WM_MOUSELEAVE

Исправленый пример в приложении.
------------
[off topic]
Ау-у-у-у-у, повымирали все что ль  smile 
[/off topic] 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Mouse.rar 36,43 Kb
PM MAIL   Вверх
neosapient
Дата 12.10.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Как пользоваться TrackMouseEvent() ?

Как узнать, что мышь вышла за пределы окна?


------------
[off topic]
Да, повымирали  smile     smile 
[/off topic]

Добавлено @ 11:26 
Нет, всё не то.

Как заставить дочерние кнопки отсылать сообщения родительскому окну, от том что на нее - кнопку - навели мышь, увели мышь, левой (правой) кнопкой мыши щелкнули по кнопке

 smile  smile 
PM MAIL   Вверх
neosapient
Дата 12.10.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Открыл другую ветку форума на другом форуме:ссылка
Там пока посоветовали subclassing; пошел искать;
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.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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