На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS

Дорогие друзья! Поздравляем вас с Новым 2025 годом!

Всем удачи, успеха и благополучия!

msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Загрузить bmp с диска в CStatic , подскажите плиз
    Поиск по форуму юзал, МСДН читал
    есть такой код (в OnOk)
    ExpandedWrap disabled
      CRect MyRect(5,5,100,100);
      CStatic pic;
      pic.Create("",SS_BITMAP,MyRect,&MyDlg,110);
      pic.SetBitmap((HBITMAP)::LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));

    на последней строчке вылетает крит ошибка :(
      ExpandedWrap disabled
        CBitmap m_bmp;
        CStatic m_stat;
        ////....
        m_bmp.LoadBitmap(....);
        if  (m_bmp.m_hBitmap)
        {
        m_stat.SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)m_bmp.m_hBitmap);
        }

      З.Ы. Ошибка наверное оттого, что ты неудачно загрузил битмап, поэтому я пазделил эти операции.
        так вся проблема в том, что LoadBitmap загружает только из ресурсов
          Цитата

          HBITMAP LoadBitmap(
          HINSTANCE hInstance, // handle to application instance
          LPCTSTR lpBitmapName // name of bitmap resource
          );
          Parameters
          hInstance
          [in] Handle to the instance of the module whose executable file contains the bitmap to be loaded.
          lpBitmapName
          [in] Pointer to a null-terminated string that contains the name of the bitmap resource to be loaded. Alternatively, this parameter can consist of the resource identifier in the low-order word and zero in the high-order word. The MAKEINTRESOURCE macro can be used to create this value.


          Добавлено
          Тоесть так покатит:
          ExpandedWrap disabled
            m_bmp.LoadBitmap(_T("c:\\1.bmp"));
            Swindler
            The LoadBitmap function loads the specified bitmap resource from a module's executable file.
            я же написал, мне не из ресурсов, а с диска :)
            ExpandedWrap disabled
                  CPictureDlg MyDlg;
                  CRect MyRect(5,5,100,100);
                  CBitmap m_bmp;
                  CStatic m_stat;
                  HANDLE image=LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                  m_stat.Create("",SS_BITMAP,MyRect,&MyDlg,110);
                  m_stat.SetBitmap((HBITMAP)image); //вот на этой строчке вываливается крит ошибка (Abort/ignore/retry)
                  //CDialog::OnOK();

            если подробней: { ASSERT(::IsWindow(m_hWnd)); return (HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap); }
            причем вотчер показывает, что загрузка картинки прошла правильно, image имел ненулевой адрес

            Добавлено
            Swindler
            проверил, все та же ошибка, причем вотчер m_bmp:
            m_hObject 0x00000000
              ExpandedWrap disabled
                m_stat.Create("",SS_BITMAP,MyRect,&MyDlg,110);

              Ты уверен что создаеться нормальный статик. Просто положи на форму статик и задай ему тип Битмап. Если с ним всё будет нормально, то проблемма в этом.
                Swindler
                что значит "положить на форму"? ID на всяк случай я убрал (мб пересекался с чем-то), толку=0
                НА ПРАКТИКЕ этим кто-нибудь занимался? :cry:
                  Цитата Radagast @
                  НА ПРАКТИКЕ этим кто-нибудь занимался? :cry:

                  У меня всё работает :)
                  Цитата Radagast @
                  что значит "положить на форму"? ID на всяк случай я убрал (мб пересекался с чем-то), толку=0

                  Смотри, у тебя на форме есть объект - статик (ID_MY_STATIC). Ты ему ставишь тип - битмап. Далее, объявляешь переменнкую типа CStatic m_stat(как член класса). В конструкторе (в OnCreate, OnInitDialog пишешь):
                  ExpandedWrap disabled
                    m_stat.Attach(GetDlgItem(ID_MY_STATIC));

                  Ну а дальше:
                  ExpandedWrap disabled
                    m_bmp.LoadBitmap(....);
                    if  (m_bmp.m_hBitmap)
                    {
                    m_stat.SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)m_bmp.m_hBitmap);
                    }
                    ой... я про "положить на форму" подумал в переносном смысле, т.е. проигнорить :)
                    сейчас попробую
                      Цитата Radagast, 26.12.2006, 11:34:36, 1391355
                      pic.Create("",SS_BITMAP,MyRect,&MyDlg,110);

                      что возвращает?
                      MyDlg уже создан, то есть Create был?
                      лучше сразу так делать
                      ExpandedWrap disabled
                        pic.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,&MyDlg,110);

                      и делать это лучше в OnInitDialog c парентом this,то есть
                      ExpandedWrap disabled
                        pic.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,this,110);
                        Swindler
                        а Вам не трудно выложить проект плиз?
                        и что такое m_bmp.m_hBitmap?
                        и в св-вах CStatic'a я галочки bitmap не вижу
                        Visual C++ 6.0

                        Добавлено
                        ElcnU
                        в OnInitDialog
                        ExpandedWrap disabled
                          CPictureDlg MyDlg;
                          CRect MyRect(5,5,100,100);
                          m_stat.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,this,110);//вылетает, если подробней,то return pWnd->Create(_T("STATIC"), lpszText, dwStyle, rect, pParentWnd, nID);


                        Добавлено
                        ах да, m_stat прикреплен Class Wizard'ом, control естественно
                        я и подумать не мог, что CStatic появляется в списке member variables, только если поставить свой ID :D
                          Цитата Radagast @
                          а Вам не трудно выложить проект плиз?

                          Я выложил кусок, который отвечает за загрузку. Больше ничего не надо.
                          Цитата Radagast @
                          m_bmp.m_hBitmap
                          - это хендл
                          Цитата Radagast @
                          и в св-вах CStatic'a я галочки bitmap не вижу

                          Type
                            :D ты пытаешься создать статик , а диалог у тя еще не создан , соответственно и контрол не создасться и на SetBitmap вылетет :yes:
                            при этом ты наверное еще пытаешься сделать MyDlg.DoModal(). :whistle:
                            Сообщение отредактировано: ElcnU -
                              Цитата Swindler @
                              m_bmp.m_hBitmap
                              - это хендл

                              в MSDN ниче такого нету, Студия на него ругается
                              чем плох (HBITMAP)?
                              Цитата Swindler @
                              в св-вах CStatic'a я галочки bitmap не вижу
                              Type

                              ?! :)
                              Цитата ElcnU @
                              ты пытаешься создать статик , а диалог у тя еще не создан

                              Цитата ElcnU @
                              и делать это лучше в OnInitDialog c парентом this

                              ?!

                              Цитата ElcnU @
                              при этом ты наверное еще пытаешься сделать MyDlg.DoModal().

                              нет, а что это такое? :)
                              Цитата Swindler @
                              Я выложил кусок, который отвечает за загрузку

                              извините, но Вам не трудно уточнить, что находится между скобок в m_bmp.LoadBitmap(....); ?
                              с учетом
                              Цитата
                              CBitmap::LoadBitmap
                              BOOL LoadBitmap( LPCTSTR lpszResourceName );
                              Parameters

                              lpszResourceName

                              Points to a null-terminated string that contains the name of the bitmap resource.
                              Сообщение отредактировано: Radagast -
                                Цитата Radagast, 26.12.2006, 13:30:29, 1391610
                                нет, а что это такое?

                                у тя как диалог отображается?

                                Цитата Radagast, 26.12.2006, 13:30:29, 1391610
                                извините, но Вам не трудно уточнить, что находится между скобок в m_bmp.LoadBitmap(....); ?

                                ресурс
                                ExpandedWrap disabled
                                  m_bmp.LoadBitmap(MAKEINTRESOURCE(ID_BITMAP));

                                Цитата Radagast, 26.12.2006, 13:30:29, 1391610
                                ?!


                                Цитата Radagast, 26.12.2006, 13:30:29, 1391610
                                Цитата (ElcnU @ 26.12.06, 17:48)
                                и делать это лучше в OnInitDialog c парентом this

                                ?!

                                статик лучше создавать в классе диалога :yes:
                                  возвращаемся к основному вопросу
                                  а как к этому
                                  Цитата ElcnU @
                                  MAKEINTRESOURCE(ID_BITMAP)

                                  привязать "1.bmp"?
                                    Открываешь Resource View -> Твой Проект -> Bitmap -> Ghfdjq rkfdbitq -> Add Resource -> Import (выбираешь файл)
                                      неееет, он открывается динамически, его имя будет считываться во время исполнения проги
                                        Млин, ну я ж уже 100 раз говорил m_bmp.LoadBitmap(_T("Путь")) тогда MAKEINTRESOURCE не надо, потому что MAKEINTRESOURCE возвращает указатель на объект в ресурсах
                                          вопрос стоит очень простой-есть строка, в которой хранится имя файла *.bmp на диске, как его отобразить на форме? неужели в Студии всё до такой степени запутано?!
                                          большаааая просьба к форумчанам-выложить весь код, который это делает, или проект-пример
                                          я же не 1й и не последний такой

                                          Добавлено
                                          Swindler
                                          на данный момент код выглядит так:
                                          ExpandedWrap disabled
                                            CBitmap m_bmp;
                                            m_bmp.LoadBitmap(_T("1.bmp"));
                                            CPictureDlg MyDlg;
                                            CRect MyRect(5,5,100,100);
                                            m_stat.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,&MyDlg);
                                            m_stat.SetBitmap((HBITMAP)m_bmp);

                                          это всё находится в OnOk
                                          и вылетает крит ошибка :dunno:
                                            Radagast, покажи свой код :yes:
                                              Swindler
                                              да вот он весь перед вами :yes:
                                              всё остальное создано AppWizard
                                              m_stat выставлен в Class Wizard'e->Member Variables как CStatic

                                              Добавлено
                                              ах да, этот статик уже размещен на форме, так что m_stat.Create походу не нужен
                                              я его закоментил, прога работает, но по нажатию на ОК ничего не происходит
                                                Radagast, еще раз повторяю!!! >:(
                                                Цитата Radagast, 26.12.2006, 15:52:00, 1391888
                                                CPictureDlg MyDlg;

                                                ТОЛЬКО СОЗДАЁТ ОБЪЕКТ ДИАЛОГА, А ОКНО ЕЩЕ НЕТ!!! И НЕЛЬЗЯ СОЗДАТЬ НА НУЛЕВОМ РОДИТЕЛЕ КОНТРОЛ!!! >:(

                                                ExpandedWrap disabled
                                                  //CPictureDlg MyDlg;должна быть либо глобальная либо членом класса, в котором созаётся, чтоб время жизни переменной было больше работы функции OnOk!!!
                                                  MyDlg.Create(ID_DIALOG_PICTURE);
                                                  MyDlg.ShowWindow(SW_SHOW);
                                                  CRect MyRect(5,5,100,100);
                                                  m_stat.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,&MyDlg);
                                                  HBITMAP hbitmap=(HBITMAP)::LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                                                  m_stat.SetBitmap(hbitmap);
                                                Сообщение отредактировано: ElcnU -
                                                  и повторюсь еще раз, после строчки
                                                  m_bmp.LoadBitmap(_T("1.bmp"));
                                                  вотчер остается серый, хотя должен окраситься в красный :)
                                                  m_hObject 0x00000000!

                                                  Добавлено
                                                  вот мне всегда было интересно, как можно видеть окно диалога, если под него не создан экземпляр... создается же экземпляр приложения
                                                  ElcnU
                                                  спс сейчас проверю

                                                  Добавлено
                                                  итак, в файле pictureDlg.h сразу после строки
                                                  CPictureDlg(CWnd* pParent = NULL); // standard constructor
                                                  я написал
                                                  CDialog MyDlg;//или надо было CPictureDlg MyDlg? тогда там 6 синтак. ошибок вылетало
                                                  остальной код в точности как в посте 23 (только не ID_DIALOG_PICTURE, а ID_PICTURE_DIALOG
                                                  по крайней мере у меня Визард так его обозвал :) )
                                                  у меня появляется новое окно поверх старого, без картники и с крит ошибкой...
                                                  Сообщение отредактировано: Radagast -
                                                    Цитата Radagast, 26.12.2006, 16:03:33, 1391921
                                                    итак, в файле pictureDlg.h сразу после строки
                                                    CPictureDlg(CWnd* pParent = NULL); // standard constructor
                                                    я написал
                                                    CDialog MyDlg;//или надо было CPictureDlg MyDlg? тогда там 6 синтак. ошибок вылетало
                                                    остальной код в точности как в посте 23 (только не ID_DIALOG_PICTURE, а ID_PICTURE_DIALOG
                                                    по крайней мере у меня Визард так его обозвал )
                                                    у меня появляется новое окно поверх старого, без картники и с крит ошибкой...

                                                    итак если хочешь создать static в том же окне то переменную создавать не надо, а родителем просто указать this :yes:
                                                    Если новое такое же из самого себя, то объявляешь
                                                    CPictureDlg* MyDlg;
                                                    а перед Create делаешь
                                                    ExpandedWrap disabled
                                                      MyDlg=new CPictureDlg;

                                                    и с MyDlg работаешь как с указателем то есть вместо . делаешь -> и.т.п
                                                    Сообщение отредактировано: ElcnU -
                                                      ElcnU
                                                      чувствую, я вас уже достал и лучше мне не говорить, что замена &MyDlg на this ничего не изменила :)
                                                        Radagast, возьми и приаттач проект :)
                                                          Цитата
                                                          Вы не можете прикрепить этот тип файла

                                                          ?!
                                                          Сообщение отредактировано: Radagast -
                                                            Чесно говоря этот топик меня очень порадовал. По-новогоднему :) Топикстартеру желаю успехов :)
                                                              Топикстартер в очередной раз убедился, что единственная стоящая вещь, которую мелкомягкие создали за 20 лет - это Freelancer
                                                                Цитата Radagast @
                                                                Цитата
                                                                Вы не можете прикрепить этот тип файла

                                                                ?!

                                                                1 приатачиваемый архив должен быть zip.
                                                                2 внутри не должно быть исполняемых файлов.
                                                                3 размер не должен превышать 200кб
                                                                  вот, буду оч благодарен, если получится...
                                                                  Сообщение отредактировано: Radagast -

                                                                  Прикреплённый файлПрикреплённый файлpicture.zip (33.65 Кбайт, скачиваний: 97)
                                                                    если по тому проекту что ты скинул то в OnOk должно быть
                                                                    ExpandedWrap disabled
                                                                      m_stat.ModifyStyle(0,SS_BITMAP);
                                                                      m_stat.SetBitmap(::LoadBitmap(GetModuleHandle(NULL),"1.bmp"));
                                                                    Сообщение отредактировано: ElcnU -
                                                                      НАКОНЕЦ-ТО!!!! УРАА! :D
                                                                      а как ее масштабировать? а то на полэкрана вылезает...
                                                                        Цитата Radagast, 27.12.2006, 16:33:55, 1393437
                                                                        а как ее масштабировать? а то на полэкрана вылезает...

                                                                        ExpandedWrap disabled
                                                                              m_stat.ModifyStyle(0,SS_BITMAP);
                                                                              HBITMAP hbitmap=(HBITMAP)::LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE);
                                                                              m_stat.SetBitmap(hbitmap);
                                                                          супир
                                                                          ElcnU
                                                                          megathx & Marry Xmas! :)
                                                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                          0 пользователей:


                                                                          Рейтинг@Mail.ru
                                                                          [ Script execution time: 0,0862 ]   [ 16 queries used ]   [ Generated: 19.01.25, 13:46 GMT ]