davix408 Temat założony przez niniejszego użytkownika |
[WinApi] wczytywanie bitmapy z pliku » 2015-11-28 19:50:29 Witam, Niedawno rozpocząłem naukę WinApi. Na początek chciałbym napisać programik wczytujący i wyświetlający bitmapę. Utworzyłem sobie odpowiednie buttony itp. Mam jedynie problem z przekazaniem do LoadImage ścieżki do pliku. Wczytanie bitmapy ze ścieżki przekazanej "na sztywno" działa prawidłowo. Oto kod: LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; switch( msg ) { case WM_PAINT: { bitmapa =( HBITMAP ) LoadImage( 0, a.bmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); GetObject( bitmapa, sizeof( BITMAP ), & info_bitmapy ); HDC hdc = BeginPaint( hwnd, & ps ); HDC hdcBitmapy = CreateCompatibleDC( hdc ); bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa ); BitBlt( hdc, 10, 10, info_bitmapy.bmWidth, info_bitmapy.bmHeight, hdcBitmapy, 0, 0, SRCCOPY ); bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa ); EndPaint( hwnd, & ps ); DeleteDC( hdcBitmapy ); } break; case WM_COMMAND: { switch( LOWORD( wParam ) ) { case WCZYTAJ: OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = ""; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki graficzne (*.bmp)\0*.bmp\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "bmp"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; } break; } case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: DeleteObject( bitmapa ); PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
Prośba o sugestie i pomoc w rozwiązaniu problemu. |
|
carlosmay |
» 2015-11-28 21:14:58 TCHAR szBMtrack[] = L"C:\\Users\\...\\Documents\\Visual Studio 2015\\bmtest.bmp";
hbmPict =( HBITMAP ) LoadImage( NULL, szBMtrack, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
czy o to chodzi? |
|
davix408 Temat założony przez niniejszego użytkownika |
» 2015-11-28 21:23:22 Nie do końca. Utworzyłem okno dialogowe do wyboru pliku *.bmp: case WM_COMMAND: { switch( LOWORD( wParam ) ) { case WCZYTAJ: OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = ""; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki graficzne (*.bmp)\0*.bmp\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "bmp"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; } break; }
Okno sie otwiera można wskazać plik tylko nie wiem jak do uchwytu: bitmapa =( HBITMAP ) LoadImage( 0, "jakas_sciezka", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
Przekazać ścieżkę do wybranego w oknie dialogowym pliku. |
|
carlosmay |
» 2015-11-28 21:37:51 (LPSTR)sNazwaPliku bitmapa =( HBITMAP ) LoadImage( 0,( LPCWSTR ) sNazwaPliku, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
a rzutowania próbowałeś? edit: Jeszcze nie wiem jak to rozwiązać, ale wiem czemu nie otwiera pliku. Nazwa zapisana do zmiennej 'sNazwaPliku' ma format "C:\bbbb\name.bmp", a ma mieć "C:\\bbbb\\name.bmp". |
|
davix408 Temat założony przez niniejszego użytkownika |
» 2015-11-29 14:06:09 Udało się, ostatecznie zrobiłem w ten sposób: case WCZYTAJ: OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = "";
ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki graficzne (*.bmp)\0*.bmp\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "bmp"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( GetOpenFileName( & ofn ) ) { LPCTSTR sciezka = ofn.lpstrFile; zaladowana = true; InvalidateRect( hwnd, NULL, true ); bitmapa_load =( HBITMAP ) LoadImage( 0, sciezka, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); } break;
Jak wyświetlić wartość zapisaną do zmiennej sNazwaPliku w outpucie ? |
|
carlosmay |
» 2015-11-29 14:19:57 Jak wyświetlić wartość zapisaną do zmiennej sNazwaPliku w outpucie ? | MessageBox(, sNazwaPliku,, ); |
|
« 1 » |