Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.173] |
|
Сообщ.
#1
,
|
|
|
Поиск по форуму юзал, МСДН читал
есть такой код (в OnOk) 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)); на последней строчке вылетает крит ошибка |
Сообщ.
#2
,
|
|
|
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); } З.Ы. Ошибка наверное оттого, что ты неудачно загрузил битмап, поэтому я пазделил эти операции. |
Сообщ.
#3
,
|
|
|
так вся проблема в том, что LoadBitmap загружает только из ресурсов
|
Сообщ.
#4
,
|
|
|
Цитата 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. Добавлено Тоесть так покатит: m_bmp.LoadBitmap(_T("c:\\1.bmp")); |
Сообщ.
#5
,
|
|
|
Swindler
The LoadBitmap function loads the specified bitmap resource from a module's executable file. я же написал, мне не из ресурсов, а с диска 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 |
Сообщ.
#6
,
|
|
|
m_stat.Create("",SS_BITMAP,MyRect,&MyDlg,110); Ты уверен что создаеться нормальный статик. Просто положи на форму статик и задай ему тип Битмап. Если с ним всё будет нормально, то проблемма в этом. |
Сообщ.
#7
,
|
|
|
Swindler
что значит "положить на форму"? ID на всяк случай я убрал (мб пересекался с чем-то), толку=0 НА ПРАКТИКЕ этим кто-нибудь занимался? :cry: |
Сообщ.
#8
,
|
|
|
Цитата Radagast @ НА ПРАКТИКЕ этим кто-нибудь занимался? :cry: У меня всё работает Цитата Radagast @ что значит "положить на форму"? ID на всяк случай я убрал (мб пересекался с чем-то), толку=0 Смотри, у тебя на форме есть объект - статик (ID_MY_STATIC). Ты ему ставишь тип - битмап. Далее, объявляешь переменнкую типа CStatic m_stat(как член класса). В конструкторе (в OnCreate, OnInitDialog пишешь): m_stat.Attach(GetDlgItem(ID_MY_STATIC)); Ну а дальше: m_bmp.LoadBitmap(....); if (m_bmp.m_hBitmap) { m_stat.SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)m_bmp.m_hBitmap); } |
Сообщ.
#9
,
|
|
|
ой... я про "положить на форму" подумал в переносном смысле, т.е. проигнорить
сейчас попробую |
Сообщ.
#10
,
|
|
|
Цитата Radagast, 26.12.2006, 11:34:36, 1391355 pic.Create("",SS_BITMAP,MyRect,&MyDlg,110); что возвращает? MyDlg уже создан, то есть Create был? лучше сразу так делать pic.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,&MyDlg,110); и делать это лучше в OnInitDialog c парентом this,то есть pic.Create("",SS_BITMAP|WS_VISIBLE|WS_CHILD,MyRect,this,110); |
Сообщ.
#11
,
|
|
|
Swindler
а Вам не трудно выложить проект плиз? и что такое m_bmp.m_hBitmap? и в св-вах CStatic'a я галочки bitmap не вижу Visual C++ 6.0 Добавлено ElcnU в OnInitDialog 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 |
Сообщ.
#12
,
|
|
|
Цитата Radagast @ а Вам не трудно выложить проект плиз? Я выложил кусок, который отвечает за загрузку. Больше ничего не надо. Цитата Radagast @ - это хендлm_bmp.m_hBitmap Цитата Radagast @ и в св-вах CStatic'a я галочки bitmap не вижу Type |
Сообщ.
#13
,
|
|
|
ты пытаешься создать статик , а диалог у тя еще не создан , соответственно и контрол не создасться и на SetBitmap вылетет
при этом ты наверное еще пытаешься сделать MyDlg.DoModal(). |
Сообщ.
#14
,
|
|
|
Цитата 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. |
Сообщ.
#15
,
|
|
|
Цитата Radagast, 26.12.2006, 13:30:29, 1391610 нет, а что это такое? у тя как диалог отображается? Цитата Radagast, 26.12.2006, 13:30:29, 1391610 извините, но Вам не трудно уточнить, что находится между скобок в m_bmp.LoadBitmap(....); ? ресурс 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 ?! статик лучше создавать в классе диалога |
Сообщ.
#16
,
|
|
|
возвращаемся к основному вопросу
а как к этому Цитата ElcnU @ MAKEINTRESOURCE(ID_BITMAP) привязать "1.bmp"? |
Сообщ.
#17
,
|
|
|
Открываешь Resource View -> Твой Проект -> Bitmap -> Ghfdjq rkfdbitq -> Add Resource -> Import (выбираешь файл)
|
Сообщ.
#18
,
|
|
|
неееет, он открывается динамически, его имя будет считываться во время исполнения проги
|
Сообщ.
#19
,
|
|
|
Млин, ну я ж уже 100 раз говорил m_bmp.LoadBitmap(_T("Путь")) тогда MAKEINTRESOURCE не надо, потому что MAKEINTRESOURCE возвращает указатель на объект в ресурсах
|
Сообщ.
#20
,
|
|
|
вопрос стоит очень простой-есть строка, в которой хранится имя файла *.bmp на диске, как его отобразить на форме? неужели в Студии всё до такой степени запутано?!
большаааая просьба к форумчанам-выложить весь код, который это делает, или проект-пример я же не 1й и не последний такой Добавлено Swindler на данный момент код выглядит так: 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: |
Сообщ.
#21
,
|
|
|
Radagast, покажи свой код
|
Сообщ.
#22
,
|
|
|
Swindler
да вот он весь перед вами всё остальное создано AppWizard m_stat выставлен в Class Wizard'e->Member Variables как CStatic Добавлено ах да, этот статик уже размещен на форме, так что m_stat.Create походу не нужен я его закоментил, прога работает, но по нажатию на ОК ничего не происходит |
Сообщ.
#23
,
|
|
|
Radagast, еще раз повторяю!!!
Цитата Radagast, 26.12.2006, 15:52:00, 1391888 CPictureDlg MyDlg; ТОЛЬКО СОЗДАЁТ ОБЪЕКТ ДИАЛОГА, А ОКНО ЕЩЕ НЕТ!!! И НЕЛЬЗЯ СОЗДАТЬ НА НУЛЕВОМ РОДИТЕЛЕ КОНТРОЛ!!! //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); |
Сообщ.
#24
,
|
|
|
и повторюсь еще раз, после строчки
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 по крайней мере у меня Визард так его обозвал ) у меня появляется новое окно поверх старого, без картники и с крит ошибкой... |
Сообщ.
#25
,
|
|
|
Цитата 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 Если новое такое же из самого себя, то объявляешь CPictureDlg* MyDlg; а перед Create делаешь MyDlg=new CPictureDlg; и с MyDlg работаешь как с указателем то есть вместо . делаешь -> и.т.п |
Сообщ.
#26
,
|
|
|
ElcnU
чувствую, я вас уже достал и лучше мне не говорить, что замена &MyDlg на this ничего не изменила |
Сообщ.
#27
,
|
|
|
Radagast, возьми и приаттач проект
|
Сообщ.
#28
,
|
|
|
Цитата Вы не можете прикрепить этот тип файла ?! |
Сообщ.
#29
,
|
|
|
Чесно говоря этот топик меня очень порадовал. По-новогоднему Топикстартеру желаю успехов
|
Сообщ.
#30
,
|
|
|
Топикстартер в очередной раз убедился, что единственная стоящая вещь, которую мелкомягкие создали за 20 лет - это Freelancer
|
Сообщ.
#31
,
|
|
|
Цитата Radagast @ Цитата Вы не можете прикрепить этот тип файла ?! 1 приатачиваемый архив должен быть zip. 2 внутри не должно быть исполняемых файлов. 3 размер не должен превышать 200кб |
Сообщ.
#32
,
|
|
|
вот, буду оч благодарен, если получится...
Прикреплённый файлpicture.zip (33.65 Кбайт, скачиваний: 97) |
Сообщ.
#33
,
|
|
|
если по тому проекту что ты скинул то в OnOk должно быть
m_stat.ModifyStyle(0,SS_BITMAP); m_stat.SetBitmap(::LoadBitmap(GetModuleHandle(NULL),"1.bmp")); |
Сообщ.
#34
,
|
|
|
НАКОНЕЦ-ТО!!!! УРАА!
а как ее масштабировать? а то на полэкрана вылезает... |
Сообщ.
#35
,
|
|
|
Цитата Radagast, 27.12.2006, 16:33:55, 1393437 а как ее масштабировать? а то на полэкрана вылезает... m_stat.ModifyStyle(0,SS_BITMAP); HBITMAP hbitmap=(HBITMAP)::LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE); m_stat.SetBitmap(hbitmap); |
Сообщ.
#36
,
|
|
|
супир
ElcnU megathx & Marry Xmas! |