Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Добавление Bitmap к меню  (Прочитано 9781 раз)
0 Пользователей и 1 Гость смотрят эту тему.
_Vitaly
Гость
« : 19-03-2005 06:31 » 

Привет!

Не получается добавить Bitmap к меню в функции окна. Фрагмент текста программы привожу:
     ...
     switch(Message){
          case WM_CREATE:
                nDimention=GetSystemMetrics(SM_CYMENU);
                hBitmap=LoadImage(hInst,"vvv.bmp",IMAGE_BITMAP,nDimension*2,nDimension,LR_LOADFROMFILE);
               AppendMenu(GetMenu(hWnd),MF_BITMAP,IDM_Bitmap,(LPCTSTR)hBitmap);
                break;
           case WM_COMMAND:
           .........
Если этот фрагмент расположить в WinMain, то всё - класс. Если - перед switch, то при каждой обработке функцией окна сообщений прорисовывается Bitmap,а в этом месте - не работает.
   Данный фрагмент взят из книги "Азбука программирования в WIN32 API" П.В.Румянцев
    Честно говоря, много ошибок в этой азбуке.
Огромное спасибо за ответы!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 20-03-2005 23:32 » 

1. А у тебя hBitmap глобальная? 2. А меню уже существует когда первое WM_CREATE приходит?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
_Vitaly
Гость
« Ответ #2 : 21-03-2005 07:03 » 

hBitmap объявляется внутри функции окна.
Меню создаётся в функции WinMain() строкой hMenu=CreateMenu() и на момент прихода первого сообщения WM_CREATE уже существует.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 21-03-2005 09:31 » 

Хм...  Надо посмотреть весь код, если у тебя есть тестовый проектик - кинь на мыло.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 22-03-2005 11:47 » 

_Vitaly, всё правильно как я и думал, сначала приходит WM_CREATE и меню у тебя ещё не созденно, а уж потом происходит добавление меню.
перепиши блок
case WM_CREATE:
       {
         HMENU hMenu = GetMenu(hWnd); // равно 0 !!!!
            nDimension=GetSystemMetrics(SM_CYMENU);
hBitmap=LoadImage(hInst,"vvv.bmp",IMAGE_BITMAP,nDimension*2,nDimension,LR_LOADFROMFILE);
            AppendMenu(hMenu,MF_BITMAP,IDM_Bitmap,(LPCTSTR)hBitmap);
       }
и ты увидешь, что hMenu = 0

И это нормально - сначала создаётся основное окно (  hWnd=CreateWindow(szClassName,"Programm No2",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
  )

именно в этот момент ты получаешь - WM_CREATE.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 22-03-2005 12:37 » 

а опрос зачем? Улыбаюсь
да ещё такой подробный Улыбаюсь
Записан

_Vitaly
Гость
« Ответ #6 : 22-03-2005 13:57 » 

Джон! Огромное спасибо за помощь!!!

Алексей1153! Опрос - это по неопытности, первый раз на сайте, sorry. Постараюсь исправиться.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 22-03-2005 14:25 » new

_Vitaly, "Заходи" (с) Верещагин Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines