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.htmlWystarczy utworzyć właściwy plik rc, który zostanie włączony podczas kompilacji, np: Kod:
#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.htmHeh, 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:
#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
|
|