OnPaint Dialog Hintergrund Strech Bitmap!
-
Hi,
folgenden Code verwende ich um ein Bitmap als Hintergrund in meinen Dialogen anzuzeigen.
// meinem Dialog header .h private: CBitmap Backround;
// in meiner Dialog Klasse .cpp BOOL CMeinDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); Backround.LoadBitmap( IDB_BACK2 ); //bmp backround Bitmap .. } void CMeinDialogDlg::OnPaint() { CPaintDC dc2(this); BITMAP bm; Backround.GetObject( sizeof( bm ), &bm ); CDC SpeicherDC; SpeicherDC.CreateCompatibleDC( &dc2 ); SpeicherDC.SelectObject( &Backround ); CRect Rect; GetClientRect( &Rect ); dc2.SetStretchBltMode( HALFTONE ); dc2.StretchBlt( 0, 0, Rect.right, Rect.bottom, &SpeicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY ); }
Der Code funkioniert wunderbar. Jetzt musste ich jedoch meine Bitmaps in eine DLL packen. Jetzt veruche ich krampfhaft das Bitmap aus meiner DLL zu verwenden
Ich habe folgenden Code verwendet
BOOL CMeinDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); HINSTANCE hResDLL = LoadLibrary(_T("MeineDLL.dll")); HBITMAP BACKROUNDBMP = LoadBitmap(hResDLL, MAKEINTRESOURCE(IDB_BACK2 )); FreeLibrary(hResDLL); Backround.LoadBitmap( IDB_BACKROUNDBMP ); //bmp backround Bitmap .. }
aber ich bekomme immer beim kompilieren den Fehler
error C2664: 'BOOL CBitmap::LoadBitmapA(LPCTSTR)': Konvertierung des Parameters 1 von 'HBITMAP' in 'LPCTSTR' nicht möglich Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Was mach ich falsch?
Wenn ich das Bitmap in dem Dialog mit m_Staticcontrol.LoadBitmap( IDB_BACKROUNDBMP ); anzeige funktioniert es..
Wieso nicht in der OnPaint als Strech Bitmap??
Danke für eure Hilfe
asmodia
-
Nimm
HBITMAP BACKROUNDBMP = ::LoadBitmap(hResDLL, MAKEINTRESOURCE(IDB_BACK2 )); // man bemerke den "::"
-
Ich bekomme den Fehler
'BOOL CBitmap::LoadBitmapA(LPCTSTR)': Konvertierung des Parameters 1 von 'HBITMAP' in 'LPCTSTR' nicht möglich Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
wenn mein Code so aussieht
BOOL CMeinDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); HINSTANCE hResDLL = LoadLibrary(_T("MeineDLL.dll")); HBITMAP BACKROUNDBMP = ::LoadBitmap(hResDLL, MAKEINTRESOURCE(IDB_BACK2 )); // man bemerke den "::" FreeLibrary(hResDLL); Backround.LoadBitmap( IDB_BACKROUNDBMP ); //bmp backround Bitmap .. }
-
asmodia schrieb:
Ich bekomme den Fehler
'BOOL CBitmap::LoadBitmapA(LPCTSTR)': Konvertierung des Parameters 1 von 'HBITMAP' in 'LPCTSTR' nicht möglich Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
wenn mein Code so aussieht
Das sind die bloeden "#define"-s, die von den Include-Dateien gemacht werden, frueher ging das.
probier mal:
HBITMAP BACKROUNDBMP = ::LoadBitmapA(hResDLL, MAKEINTRESOURCE(IDB_BACK2 )); // direkter LoadBitmapA-Aufruf
Die wollen nicht mehr, dass man mit den MFC programmiert, ich hatte neulich bei einem neuen MFC-Projekt auch solche Probleme.
Wenn LoadBitmapA() auch nicht funktioniert (weil es in den Headern wieder zu "LoadBitmap" umdefiniert wurde), dann weiss ich auch nicht.
Hast Du die Pruefungen auf 64-Bit-Kompatibilitaet in den Compileroptionen ausgeschaltet?
-
Funktioniert leider auch nicht. Das selbe Problem
64-Bit-Kompatibilitaet sind ausgeschaltet.
Sonst vielleicht noch eine Idee??asmodia
-
Achja, den Code habe ich aus diesem Tut.
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel4.htm
Viellecht klickt es bei jemanden von euch, warum das nicht mit dem BMP bei mir klappt, wenn ich es aus der DLL hole.asmodia
-
Manchmal ist die Lösung so einfach
hier für alle die es Interessiert:
BOOL CMeinDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); HINSTANCE hClientResources = AfxGetResourceHandle(); HMODULE hInstance = LoadLibrary( _T("MeineDLL.dll")); AfxSetResourceHandle( hInstance ); Backround.LoadBitmap(IDB_BACK2); AfxSetResourceHandle(hClientResources); FreeLibrary(hInstance); .. }
Und das schöne an dieser Methode ist das ich die alten Resourcen ID`S verwenden kann.
Danke euch allen!
asmodia
-
Dir auch danke!
Jetzt weiss ich auch, wie man das Problem umgeht!