Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy można dodać plik multimedialny do projektu?

Ostatnio zmodyfikowano 2010-06-22 15:31
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
Czy można dodać plik multimedialny do projektu?
» 2010-06-22 14:18:44
Witam! Mam pytanie, czy można w jakiś sposób dodać plik multimedialny (np bitmapę) do projektu, tak aby program był "większy" o wielkość tego pliku, i żeby mógł "na nim" pracować? Tak jak np w allegro można załadować bitmapę i na niej pracować, tak załadować taką bitmapę ale na poziomie pisania programu. A potem móc na niej pracować. Jak ktoś ma jakąś wiedzę w tym temacie, to prosiłbym o rozpisanie się. Dziękuję i pozdrawiam
P-18240
DejaVu
» 2010-06-22 14:26:59
Plikiem multimedialnym nie jest bitmapa... można to zrobić za pomocą resource'ów.

http://www.elektroda.pl/rtvforum/topic1137531.html
Wystarczy utworzyć właściwy plik rc, który zostanie włączony podczas kompilacji, np:
Kod:

C/C++
#include <windows.h>

A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "PLIK.ico"

1 VERSIONINFO
FILEVERSION 0, 0, 0, 0
PRODUCTVERSION 0, 0, 0, 0
FILETYPE VFT_APP
{
    BLOCK "StringFileInfo"
    {
        BLOCK "041504E4"
        {
            VALUE "CompanyName", ""
            VALUE "FileVersion", ""
            VALUE "FileDescription", ""
            VALUE "InternalName", ""
            VALUE "LegalCopyright", ""
            VALUE "LegalTrademarks", ""
            VALUE "OriginalFilename", ""
            VALUE "ProductName", ""
            VALUE "ProductVersion", ""
        }
    }
    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x0415, 1252
    }
}
 
Powyższy dołączy także informacje o aplikacji do pliku EXE.

Można także dołączyć do projektu tzw. Resource Tamplate (znajdziesz w sekcji New...)

/edit:
Inne źródło:
http://matematyka.pl/prev_topic/151243.htm
Heh, używasz windows.h, nie? Jak masz ochotę na okienka zdarzeniowe, skocz na delphi(TP po tuningu )... możesz spróbować po prostu narysować, albo czekaj...
mam ja DEV'a, i tam jest taki przykład:


Plik: main.cpp:
C/C++
/*
   Name: WinAnim
   Author: Brook Miles
   Description: Making an animation in windows
*/

#include <windows.h>

static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;

const UINT idTimer1 = 1;
UINT nTimerDelay = 10;

HBITMAP hbmBall, hbmMask;
BITMAP bm;

int ballX, ballY;
int deltaX, deltaY;

int deltaValue = 4;

void EraseBall( HDC hdc )
{
    RECT rc;
    rc.left = ballX;
    rc.top = ballY;
    rc.right = ballX + bm.bmWidth;
    rc.bottom = ballY + bm.bmHeight;
    FillRect( hdc, & rc,( HBRUSH )( COLOR_BTNFACE + 1 ) );
}

void DrawBall( HDC hdc )
{
    HDC hdcMemory;
    hdcMemory = CreateCompatibleDC( hdc );
   
    SelectObject( hdcMemory, hbmMask );
    BitBlt( hdc, ballX, ballY, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCAND );
   
    SelectObject( hdcMemory, hbmBall );
    BitBlt( hdc, ballX, ballY, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCPAINT );
   
    DeleteDC( hdcMemory );
}

void UpdateBall( HWND hwnd )
{
    RECT rc;
    GetClientRect( hwnd, & rc );
   
    ballX += deltaX;
    ballY += deltaY;
   
    if( ballX < 0 ) {
        ballX = 0;
        deltaX = deltaValue;
    }
    else if( ballX + bm.bmWidth > rc.right ) {
        ballX = rc.right - bm.bmWidth;
        deltaX = - deltaValue;
    }
    if( ballY < 0 ) {
        ballY = 0;
        deltaY = deltaValue;
    }
    else if( ballY + bm.bmHeight > rc.bottom ) {
        ballY = rc.bottom - bm.bmHeight;
        deltaY = - deltaValue;
    }
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
    switch( Message )
    {
    case WM_CREATE:
        hbmBall = LoadBitmap( g_hInst, "BALLBMP" );
        hbmMask = LoadBitmap( g_hInst, "MASKBMP" );
        if( !hbmBall || !hbmMask ) {
            MessageBox( hwnd, "Load of resources failed.", "Error",
            MB_OK | MB_ICONEXCLAMATION );
            return - 1;
        }
       
        GetObject( hbmBall, sizeof( bm ), & bm );
        SetTimer( hwnd, idTimer1, nTimerDelay, NULL );
       
        ballX = 0;
        ballY = 0;
        deltaX = deltaValue;
        deltaY = deltaValue;
       
        break;
    case WM_TIMER:
        if( hbmBall && hbmMask )
        {
            HDC hdcWindow;
            hdcWindow = GetDC( hwnd );
           
            EraseBall( hdcWindow );
            UpdateBall( hwnd );
            DrawBall( hdcWindow );
           
            ReleaseDC( hwnd, hdcWindow );
        }
        break;
    case WM_PAINT:
        if( hbmBall && hbmMask )
        {
            PAINTSTRUCT ps;
            HDC hdcWindow;
            hdcWindow = BeginPaint( hwnd, & ps );
           
            DrawBall( hdcWindow );
           
            EndPaint( hwnd, & ps );
        }
        break;
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
    case WM_DESTROY:
        KillTimer( hwnd, idTimer1 );
       
        DeleteObject( hbmBall );
        DeleteObject( hbmMask );
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, Message, wParam, lParam );
    }
    return 0;
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX WndClass;
    HWND hwnd;
    MSG Msg;
   
    g_hInst = hInstance;
   
    WndClass.cbSize = sizeof( WNDCLASSEX );
    WndClass.style = 0;
    WndClass.lpfnWndProc = WndProc;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hInstance = g_hInst;
    WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
    WndClass.hbrBackground =( HBRUSH )( COLOR_BTNFACE + 1 );
    WndClass.lpszMenuName = NULL;
    WndClass.lpszClassName = g_szClassName;
    WndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    if( !RegisterClassEx( & WndClass ) )
    {
        MessageBox( 0, "Window Registration Failed!", "Error!",
        MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL );
        return 0;
    }
   
    hwnd = CreateWindowEx(
    WS_EX_CLIENTEDGE,
    g_szClassName,
    "A Bitmap Program",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
    NULL, NULL, g_hInst, NULL );
   
    if( hwnd == NULL )
    {
        MessageBox( 0, "Window Creation Failed!", "Error!",
        MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL );
        return 0;
    }
   
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
   
    while( GetMessage( & Msg, NULL, 0, 0 ) )
    {
        TranslateMessage( & Msg );
        DispatchMessage( & Msg );
    }
    return Msg.wParam;
}


oraz plik images.rc:

Kod:
BALLBMP BITMAP "ball.bmp"
MASKBMP BITMAP "ballmask.bmp"

orócz tego są jeszcze grafiki, jedna to kulka niebieska, druga czarna.
(wydaje mi się, że czarny (RGB(0,0,0))to przezroczysty w windows.h...)

Pokombinuj, bo ja nigdy nie miałem serca tego przeanalizować
Sory za niekonkretną odpowiedź, ale to nie mój ulubiony temat...

Pozdro, mam nadzieję, że pomogłem 
P-18241
SeaMonster131
» 2010-06-22 14:28:11
Wiem że do projektu można dodać plik .rc (plik zasobów). Wiem też że np można załadować w nim kursor, ikonę programu, zrobić menu itp... ale czy 'plik multimedialny' też to nie wiem... możesz zerknąć w google ;)

#up: ale ja wolno pisze... :D
P-18242
McAffey
Temat założony przez niniejszego użytkownika
» 2010-06-22 15:31:19
Oto mi chodziło. Można zamknąć temat, jak będę miał dalsze wątpliwości to go otworzę. Dziękuję i pozdrawiam
P-18244
« 1 »
  Strona 1 z 1