Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 15 MESSAGE_MAP???? Кому я еще не надоел... 
:(
    Опции темы
Coocky
Дата 23.2.2004, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Привет,профи!!!Вот продолжаю двигаться по дебрям MFC...Благодоря вам нашел ответы та многие вопросы,которых нет и в MSDN.Спасибо wink.gif
Буду и дальше задавать в том же духе biggrin.gif
Решил написать игру "Пятнашки" hehe.gif И столкнулся с проблемой-неужели нужно создавать 15 MESSAGE_MAP,для каждой кнопкиconfused.gif?Или есть другие пути?(Я создаю проги с помощью AppWizard,хотя какая разница...)Нельзя ли как-то создать одну функцию,а потом вызывать ее для каждой кнопки?А как же тогда прописать afx..,ведь для каждой кнопки сообщение со своим ID_???
Короче я расстерян rolleyes.gif
Желающие и не гордые-подскажите biggrin.gif



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
mr.DUDA
Дата 24.2.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Вот тебе готовый пример, как динамически сделать 15 кнопок и обрабатывать нажатие на них всего одним обработчиком. Предположим, ты используешь окно диалога (у меня оно называется CFifteensDlg). Тогда добавь в хедер и .CPP-файл следующее (добавляемые строки выделены жирным шрифтом):
Цитата
FifteensDlg.h

class CFifteensDlg : public CDialog
{
    // массив из 15-ти кнопок
    CButton m_Buttons[15];
    // единый обработчик нажатия на любую кнопку
    void OnMyButtons(UINT id);

    //   ....
 
};


FifteensDlg.cpp

// определяем диапазон ID-ов кнопок
#define ID_FIRST_15BUTTON      WM_USER
#define ID_LAST_15BUTTON       ID_FIRST_15BUTTON+14

BEGIN_MESSAGE_MAP(CFifteensDlg, CDialog)
    //{{AFX_MSG_MAP(CFifteensDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    // навешиваем свой обработчик в MESSAGE_MAP
    ON_COMMAND_RANGE(ID_FIRST_15BUTTON, ID_LAST_15BUTTON, OnMyButtons)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()


// это наш обработчик, принимает ID нажатой кнопки
void CFifteensDlg::OnMyButtons(UINT id)
{
    int iButton = id - ID_FIRST_15BUTTON;
    CString str; str.Format("%d", iButton+1);
    MessageBox(str, "Pressed Button:", MB_OK|MB_ICONINFORMATION);
}



// при создании окна диалога, создаём 15 кнопок с ID из выбранного диапазона
BOOL CFifteensDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    CRect rect; GetClientRect(&rect);
    int W = rect.Width()/4, H = rect.Height()/4;
    int iButton=0;
    for(int y=0; y<4; y++)
    {
        for(int x=0; x<4; x++)
        {
            if(x==2 && y==2) continue;
            CString csCaption; csCaption.Format("%d", iButton+1);
            CRect rectBut(x*W, y*H, (x+1)*(W-5), (y+1)*(H-5));
            m_Buttons[iButton].Create(csCaption, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rectBut, this, ID_FIRST_15BUTTON+iButton);
            iButton++;
        }
    }


    // ....
}



--------------------
user posted image
PM MAIL WWW   Вверх
Coocky
Дата 24.2.2004, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Спасибо,mr.DUDA(Есть на кого равнятся biggrin.gif )Код еще не разбирал,но дома гляну.Как хоть рейтинг тебе повыситьconfused.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 24.2.2004, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Да,вот код мельком глянул(конкретно не вникал еще),но уже понял,что не знаю WM_USER(What it this??),не знал про ON_COMMAND_RANGE,буду искать и разбираться.Кстати ,не посоветуешь какую-нибудь литературу по MFC и вообще прог.под Винду(я хоть и на Украине живу,но постараюсь достать)


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
chipset
Дата 25.2.2004, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



"Программирование на Microsoft Visual C++ 6.0" пятое издание.Дэвид Круглински,Скот Уингоу и
Джордж Шефферд


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
mr.DUDA
Дата 25.2.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



WinAPI: Джеффри Рихтер, всё что найдёшь - всё рулез.
MFC: Мешков, Тихомиров - классные ребята, ничего не скажешь. Уже много раз переиздавались, изд-во "Питер", серия "Visual C++ и MFC".

Цитата
Спасибо,mr.DUDA(Есть на кого равнятся  )Код еще не разбирал,но дома гляну.Как хоть рейтинг тебе повысить

Код рабочий, я быстро слабал пример (даже хотел полностью пятнашки сделать, но что-то совесть замучала smile.gif, думаю чел сам и так всё сделает как надо...). Не надо рейтинг повышать adv/king.gif...


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 25.2.2004, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



З.Ы. справедливости ради отмечу, что WM_USER применяется для построения Win-сообщений, определяемых пользователем (т.е. MFC не использует идентификаторы Win-сообщений, выше чем WM_USER). Это совсем не относится к "командам" (т.е. сообщению WM_COMMAND), другими словами - можно было задать ID_FIRST_15BUTTON равным любому значению, например 555 smile.gif ... Просто сказалась привычка что WM_USER - "безопасное значение", не более того.


--------------------
user posted image
PM MAIL WWW   Вверх
Coocky
Дата 25.2.2004, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Моя проблема в том,что я не знаю WinAPI.Сразу кинулся в MFC,увидел AppWizard и подумал:халява,нарисовал кнопку и готова прога.Только надо MFC немного выучить и все...Ан-нет...
Не прошло...Делаю шаг назад к WinAPI(если я не ошибаюсь,MFC - надстройка над WinAPI ).
А пока всем спасибо biggrin.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
mr.DUDA
Дата 3.3.2004, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Проверь вот этот архив, в нём - исходники и демо-EXE диалога с "пятнашками".

З.Ы. извиняюсь за неправильный аттачмент, промахнулся и не попал по нужному файлу smile.gif

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  TestPatn.rar


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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