как вставить bitmap в dialog
помогите налепить на объект CStatic в диалоге bitmap(OnInitDialog или OnCreate - всё равно), а то я уже ,извините, задолбался.
напишите , если не трудно.
Чем тебе этот пример не нравится ?:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cstatic.3a3a.setbitmap.asp
Как там на том свете?
спасибо.я просто сначала создавал объект HBITMAP, а затем пытался перенести в SetBitmap, но выдавалась ощибка "использование неинициализированного объекта".а так я все делал почти одинаково, но не знал почему не связывается дескриптор с объектом.
не, что-то не то. SetBitmap ведь принимает в качестве параметра HBITMAP. а LoadBitmap (обе) возвращают BOOL.???
[QUOTE]Originally posted by Disabled
LoadBitmap (обе) возвращают BOOL.???
чушь
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // name of bitmap resource
);
(оттуда же (MSDN))
это которая ::LoadBitmap(...
чушь
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // name of bitmap resource
);
(оттуда же (MSDN))
это которая ::LoadBitmap(...
cогласен, я тупой-не заметил ::.
Пишу, компил.- ощибок нет, но все-равно появляется диалог без bitmap. У тебя этот код пашет???
У тебя этот код пашет???
что-то где-то когда-то...
запость проект, посмотрим
Как на том свете-то, так и не ответил?
что-то где-то когда-то...
запость проект, посмотрим
Как на том свете-то, так и не ответил?
там ничё вообще-то. только жарковато да красные чуваки сзади пристраиваются.
# include "afxwin.h"
# include "resource.h"
class CMyDialog : public CDialog
{
public:
HCURSOR myCur;
CMyDialog(CWnd *pParent=NULL);
afx_msg void OnMyOkDown();
virtual BOOL OnInitDialog();
private:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyDialog,CDialog)
ON_BN_CLICKED(BOB4_OK,OnMyOkDown)
END_MESSAGE_MAP()
void CMyDialog::OnMyOkDown()
{
EndDialog(BOB4_OK);
DestroyWindow();
}
CMyDialog::CMyDialog(CWnd *pParent)
:CDialog(BOB4_DIALOG,pParent)
{}
CMyDialog myDialog;
class CDialogApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CDialogApp::InitInstance()
{
m_pMainWnd=&myDialog;
myDialog.DoModal();
return TRUE;
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
[COLOR=red]myCur=AfxGetApp()->LoadCursor(IDC_CURSOR1);
::SetClassLong(this->m_hWnd,GCL_HCURSOR,(long)myCur););[/COLOR]
return TRUE;
}
CDialogApp obj;
ну и где тут твоя Bitmap, которая якобы должна появиться где-то в диалоге?
что-то никаким HBITMAP'ом не пахнет...
постил бы проект как attachment
ну и где тут твоя Bitmap, которая якобы должна появиться где-то в диалоге?
что-то никаким HBITMAP'ом не пахнет...
постил бы проект как attachment
Ой, мля, не то вставил – спросони (такие глюки, что даже красным выделил). Вот :
# include "afxwin.h"
# include "resource.h"
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd *pParent=NULL);
afx_msg void OnMyOkDown();
virtual BOOL OnInitDialog();
private:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyDialog,CDialog)
ON_BN_CLICKED(BOB4_OK,OnMyOkDown)
END_MESSAGE_MAP()
void CMyDialog::OnMyOkDown()
{
EndDialog(BOB4_OK);
DestroyWindow();
}
CMyDialog::CMyDialog(CWnd *pParent)
:CDialog(BOB4_DIALOG,pParent)
{}
CMyDialog myDialog;
class CDialogApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CDialogApp::InitInstance()
{
m_pMainWnd=&myDialog;
myDialog.DoModal();
return TRUE;
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CBitmap bitmap;
HBITMAP bm;
stat = new CStatic();
bitmap.LoadBitmap(IDB_BITMAP1);
stat->SetBitmap(bm);
stat->Create(NULL,WS_CHILD|WS_VISIBLE|SS_BITMAP,
CRect(10,50,70,70),this,IDB_BITMAP1);
return TRUE;
}
CDialogApp obj;
Он мне пишет, что используется неинициализир. bm.
И чувствовать спешит ...
(эт я про красных чуваков...)
Ой, мля, не то вставил – спросони (такие глюки, что даже красным выделил). Вот :
# include "afxwin.h"
# include "resource.h"
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd *pParent=NULL);
[COLOR=red]~CMyDialog(){ if(stat)delete stat;};[/COLOR]
afx_msg void OnMyOkDown();
virtual BOOL OnInitDialog();
private:
DECLARE_MESSAGE_MAP()
protected:
[COLOR=red]CStatic* stat;[/COLOR]
};
BEGIN_MESSAGE_MAP(CMyDialog,CDialog)
ON_BN_CLICKED(BOB4_OK,OnMyOkDown)
END_MESSAGE_MAP()
void CMyDialog::OnMyOkDown()
{
EndDialog(BOB4_OK);
DestroyWindow();
}
CMyDialog::CMyDialog(CWnd *pParent)
:CDialog(BOB4_DIALOG,pParent)
{
[COLOR=red]stat=0;[/COLOR]
}
CMyDialog myDialog;
class CDialogApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CDialogApp::InitInstance()
{
m_pMainWnd=&myDialog;
myDialog.DoModal();
return TRUE;
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
stat = new CStatic();
[COLOR=red]stat->Create(NULL,WS_CHILD|WS_VISIBLE|SS_BITMAP,
CRect(10,50,70,70),this,IDB_BITMAP1);
stat->SetBitmap(::LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP1)));[/COLOR]
return TRUE;
}
CDialogApp obj;
Он мне пишет, что используется неинициализир. bm.
Предполагается, что у тебя есть Bitmap с IDB_BITMAP1 в ресурсах екзешника.
Может все-таки перед следующим глупым вопросом
хоть чуть-чуть подумаешь?
А то ведь красные чуваки не дремлют :) ...
И жить торопится,
И чувствовать спешит ...
(эт я про красных чуваков...)
Предполагается, что у тебя есть Bitmap с IDB_BITMAP1 в ресурсах екзешника.
Может все-таки перед следующим глупым вопросом
хоть чуть-чуть подумаешь?
А то ведь красные чуваки не дремлют :) ...
за код огромное спосибо - работает.однако, шаман, не наезжай по поводу глупости моих вопросов - я только начинаю да и спросить не у кого.вот лучше объясни глупому, а разве
CBitmap bit;
bit.LoadBitmap(IDR_чего-нибудь);
не загружает этот самый Bitmap?
и что делает GetModuleHandle() c аргументом 0??
за код огромное спосибо - работает.однако, шаман, не наезжай по поводу глупости моих вопросов - я только начинаю да и спросить не у кого.вот лучше объясни глупому, а разве
CBitmap bit;
bit.LoadBitmap(IDR_чего-нибудь);
не загружает этот самый Bitmap?
и что делает GetModuleHandle() c аргументом 0??
Наверное крутой шаман имел ввиду, что у тебя вызывается деструктор объекта CBitmap при выходе из функции и который вызывает DeleteObject((HGDIOBJ)m_hBitmap);
Я имел ввиду вот это:
Ой, мля, не то вставил – спросони ...
остальное у тебя, похоже, в том же духе...
разве
CBitmap bit;
bit.LoadBitmap(IDR_чего-нибудь);
не загружает этот самый Bitmap?
конечно загружает,
но ты пишешь:
HBITMAP bm; //<-чему это равно сейчас?
bitmap.LoadBitmap(IDB_BITMAP1);
stat->SetBitmap(bm); // а здесь?
можно было:
stat->SetBitmap(HBITMAP(bitmap));
есть такой оператор в CBitmap...
что делает GetModuleHandle() c аргументом 0??
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulehandle.asp
трудно было посмотреть?
полюбуйся еще на afxwin2.inl, и поймешь, почему сначала Create, потом SetBitmap
Не обижайся, я вовсе не считаю тебя глупым.
Я имел ввиду вот это:
Ой, мля, не то вставил – спросони ...
остальное у тебя, похоже, в том же духе...
разве
CBitmap bit;
bit.LoadBitmap(IDR_чего-нибудь);
не загружает этот самый Bitmap?
конечно загружает,
но ты пишешь:
HBITMAP bm; //<-чему это равно сейчас?
bitmap.LoadBitmap(IDB_BITMAP1);
stat->SetBitmap(bm); // а здесь?
можно было:
stat->SetBitmap(HBITMAP(bitmap));
есть такой оператор в CBitmap...
что делает GetModuleHandle() c аргументом 0??
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulehandle.asp
трудно было посмотреть?
полюбуйся еще на afxwin2.inl, и поймешь, почему сначала Create, потом SetBitmap
ok.извини.спосибо.
ещё раз спасибо. за afxwin2(1...)- по ходу всё приясняется. а по поводу глупости : ты имел в виду несеръёзный подход к делу?? я так понял??
и если можно еще один вопрос: instance-я понимаю что это такое, но не могу найти аналог на русском.
не подскажишь, что это у вас, опытных программеров(без стёба), означает??
ok.извини.спосибо.
ещё раз спасибо. за afxwin2(1...)- по ходу всё приясняется. а по поводу глупости : ты имел в виду несеръёзный подход к делу?? я так понял??
и если можно еще один вопрос: instance-я понимаю что это такое, но не могу найти аналог на русском.
не подскажишь, что это у вас, опытных программеров(без стёба), означает??
Это означает у всех программеров экземпляр, в данном случае имеется ввиду HINSTANCE, или HANDLE of INSTANCE или дескриптор экземпляра, короче дескриптор запущенного модуля (HMODULE и HINSTANCE почти во всех WinAPI функциях взаимозаменяемы)
Это означает у всех программеров экземпляр, в данном случае имеется ввиду HINSTANCE, или HANDLE of INSTANCE или дескриптор экземпляра, короче дескриптор запущенного модуля (HMODULE и HINSTANCE почти во всех WinAPI функциях взаимозаменяемы)
ясно.спасибо.как-нибудь ещё чё спрошу.
ясно.спасибо.как-нибудь ещё чё спрошу.
Welcome ;) !
меня мучают сомнения по поводу
stat-> SetBitmap(::LoadBitmap(GetModuleHandle(0),MAKEINTR
ESOURCE(IDB_BITMAP1)));
в смысле стоит или, все-таки, не стоит сохранять
HBITMAP после LoadBitmap, чтобы потом DeleteObject?
Welcome ;) !
меня мучают сомнения по поводу
stat-> SetBitmap(::LoadBitmap(GetModuleHandle(0),MAKEINTR
ESOURCE(IDB_BITMAP1)));
в смысле стоит или, все-таки, не стоит сохранять
HBITMAP после LoadBitmap, чтобы потом DeleteObject?
В MSDN Using static controls написано (там приводится пример с иконками а не с битмапами) что декскать не надо вызвать, потому что при загрузки из ресурсов получается декскриптор разделяемый (типа может использоваться в разных местах), который доступен все время существование модуля в памяти и наверно выгружается с модулем.