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

Jak w WinAPI zrobić przycisk z grafiką z zasobów?

Ostatnio zmodyfikowano dzisiaj: 4h » 59 min
Autor Wiadomość
AP1994
Temat założony przez niniejszego użytkownika
Jak w WinAPI zrobić przycisk z grafiką z zasobów?
» 2025-01-25 18:55:17
prubowałem po wywołaniu CreateWindow ze stylem BS_BITMAP użyć
SendMessage(hButton1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)tekstura_przycisku1);
plik png ładuję tekstura_przycisku1=LoadBitmap(hInstance, MAKEINTRESOURCE(3001));
ale nie działa
P-182044
DejaVu
» 2025-01-25 19:04:04
A wgrałeś do resourceów bitmapę pod identyfikatorem 3001?
P-182045
AP1994
Temat założony przez niniejszego użytkownika
» 2025-01-25 20:03:42
plik resouces.rc
C/C++
IDM_menu1 MENU
{
   
POPUP "Plik"
   
{
       
MENUITEM "Nowy Projekt", 100
       
MENUITEM "   Otwórz", 101
       
MENUITEM "Zapisz Zmiany", 102
   
}
}

IDB_bon1.png RCDATA "PNG/mysz.png"
IDB_bon2.png RCDATA "PNG/pozycja.png"
IDB_bon3.png RCDATA "PNG/skala.png"
IDB_bon4.png RCDATA "PNG/www.flaticon.com.rotation.png"
plik resouces.h
C/C++
#define IDM_menu1 200
#define IDB_bon1.png 3001
#define IDB_bon2.png 3002
#define IDB_bon3.png 3003
#define IDB_bon4.png 3004
P-182047
AP1994
Temat założony przez niniejszego użytkownika
» 2025-01-25 20:07:02
menu mi działa, ale pliki png nie możliwe, że jednym z powodów jest wielkość plików 800 na 600 każdy
P-182048
DejaVu
» 2025-01-25 21:00:44
LoadBitmap obsługuje pliki *.BMP, a nie *.PNG.
P-182049
AP1994
Temat założony przez niniejszego użytkownika
» 2025-01-26 11:54:57
skoro nie LoadBitmap to jak?
P-182055
AP1994
Temat założony przez niniejszego użytkownika
» 2025-01-26 11:59:54
spróbuje z LoadImage i zobaczę jak zadziała
P-182056
AP1994
Temat założony przez niniejszego użytkownika
» 2025-01-26 16:04:47
niestety zarówno
C/C++
tekstura_przycisku1 =( HBITMAP ) LoadImage( GetModuleHandle( NULL ), MAKEINTRESOURCE( 3001 ), IMAGE_BITMAP,( Width / 2 ) * 0.1,( Height / 2 ) * 0.139, LR_CREATEDIBSECTION );
jak i
C/C++
tekstura_przycisku2 = LoadBitmap( hInstance, MAKEINTRESOURCE( 3002 ) );
nie działa sprawdziłem nawet na plikach bmp. tekstura_przycisku1 i tekstura_przycisku2 zwraca NULL
C/C++
//mój kod
#include "function.h"
#include "resouces.h"

HBITMAP tekstura_przycisku1;
HBITMAP tekstura_przycisku2;
HBITMAP tekstura_przycisku3;
HBITMAP tekstura_przycisku4;
const int Width = GetSystemMetrics( SM_CXSCREEN ), Height = GetSystemMetrics( SM_CYSCREEN );
LRESULT CALLBACK WindowProc( HWND, UINT, WPARAM, LPARAM );
void EnableOpenGL( HWND hwnd, HDC *, HGLRC * );
void DisableOpenGL( HWND, HDC, HGLRC );
//Maps level("mapa test.txt",Point(0.0f,0.0f),Point(2,2));
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
   
tekstura_przycisku1 =( HBITMAP ) LoadImage(
   
GetModuleHandle( NULL ), // hInstance
   
MAKEINTRESOURCE( 3001 ), // Identyfikator zasobu
   
IMAGE_BITMAP, // Typ obrazu
   
( Width / 2 ) * 0.1,( Height / 2 ) * 0.139,
   
LR_CREATEDIBSECTION // Flaga tworzenia DIB
   
);
   
tekstura_przycisku2 = LoadBitmap( hInstance, MAKEINTRESOURCE( 3002 ) );
   
tekstura_przycisku3 = LoadBitmap( hInstance, MAKEINTRESOURCE( 3003 ) );
   
tekstura_przycisku4 = LoadBitmap( hInstance, MAKEINTRESOURCE( 3004 ) );
   
WNDCLASSEX wcex;
   
HWND hwnd;
   
HDC hDC;
   
HGLRC hRC;
   
MSG msg;
   
BOOL bQuit = FALSE;
   
HMENU hMenu = LoadMenu( hInstance, MAKEINTRESOURCE( 200 ) );
   
   
/* register window class */
   
wcex.cbSize = sizeof( WNDCLASSEX );
   
wcex.style = CS_OWNDC;
   
wcex.lpfnWndProc = WindowProc;
   
wcex.cbClsExtra = 0;
   
wcex.cbWndExtra = 0;
   
wcex.hInstance = hInstance;
   
wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );
   
wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
   
wcex.hbrBackground =( HBRUSH ) GetStockObject( BLACK_BRUSH );
   
wcex.lpszMenuName = NULL;
   
wcex.lpszClassName = "GLSample";
   
wcex.hIconSm = LoadIcon( NULL, IDI_APPLICATION );;
   
   
   
if( !RegisterClassEx( & wcex ) )
       
 return 0;
   
   
if( !al_init() )
   
{
       
MessageBox( NULL, "Nie zainicjowano", "biblioteki allegro 5", MB_OK | MB_ICONERROR );
       
return 0;
   
}
   
al_init_font_addon();
   
if( !al_init_ttf_addon() )
   
{
       
MessageBox( NULL, "Nie zainicjowano", "czcionki", MB_OK | MB_ICONERROR );
       
return 0;
   
}
   
if( !al_init_image_addon() )
   
{
       
MessageBox( NULL, "Nie zainicjowano", "bitmap", MB_OK | MB_ICONERROR );
       
return - 1;
   
}
   
if( !al_init_primitives_addon() )
   
{
       
MessageBox( NULL, "Nie zainicjowano", "prymitywów", MB_OK | MB_ICONERROR );
       
return - 1;
   
}
   
/* create main window */
   
hwnd = CreateWindowEx(
   
0,
   
"GLSample",
   
"OpenGL Sample",
   
WS_OVERLAPPED | WS_CAPTION | WS_BORDER | WS_CLIPCHILDREN,
   
CW_USEDEFAULT,
   
CW_USEDEFAULT,
   
Width,
   
Height,
   
NULL,
   
NULL,
   
hInstance,
   
NULL
    );
   
SetMenu( hwnd, hMenu );
   
ShowWindow( hwnd, nCmdShow );
   
EnableOpenGL( hwnd, & hDC, & hRC );
   
   
/* program main loop */
   
while( !bQuit )
   
{
       
/* check for messages */
       
if( PeekMessage( & msg, NULL, 0, 0, PM_REMOVE ) )
       
{
           
/* handle or dispatch messages */
           
if( msg.message == WM_QUIT )
           
{
               
bQuit = TRUE;
           
}
           
else
           
{
               
TranslateMessage( & msg );
               
DispatchMessage( & msg );
           
}
        }
       
else
       
{
           
glMatrixMode( GL_PROJECTION );
           
glLoadIdentity();
           
glOrtho( 0, Width, Height, 0, 0, 0 );
           
           
glMatrixMode( GL_MODELVIEW );
           
glLoadIdentity();
           
/* OpenGL animation code goes here */
           
           
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
           
glClear( GL_COLOR_BUFFER_BIT );
           
glPushMatrix();
           
//glRotatef(theta, 0.0f, 0.0f, 0.0f);
            //level.Draw();
           
draw_filled_rectangle( 1, 1, - 1, 0.85, al_map_rgba_f( 0.75, 0.75, 0.75, 0.01 ) );
           
draw_filled_rectangle( 1, 1, 0.9, - 1, al_map_rgba_f( 0.75, 0.75, 0.75, 0.01 ) );
           
glPopMatrix();
           
SwapBuffers( hDC );
           
           
Sleep( 1 );
       
}
    }
   
   
/* shutdown OpenGL */
   
DisableOpenGL( hwnd, hDC, hRC );
   
   
/* destroy the window explicitly */
   
DestroyWindow( hwnd );
   
   
return msg.wParam;
}

LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
   
static HWND hButton1;
   
static HWND hButton2;
   
static HWND hButton3;
   
static HWND hButton4;
   
   
//static HWND hButton5;
   
switch( uMsg )
   
{
   
case WM_CLOSE:
       
PostQuitMessage( 0 );
       
break;
   
case WM_CREATE:
       
// Tworzenie przycisków i przypisanie tekstur
       
hButton1 = CreateWindow(
       
"BUTTON", // Klasa przycisku
       
"", // Tekst przycisku (można zostawić pusty, bo będzie tekstura)
       
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_BITMAP, // Style przycisku
       
1, 1, // Pozycja
       
( Width / 2 ) * 0.1,( Height / 2 ) * 0.139, // Rozmiar
       
hwnd, // Okno nadrzędne
       
( HMENU ) 1, // ID przycisku
       
( HINSTANCE ) GetWindowLongPtr( hwnd, GWLP_HINSTANCE ),
       
NULL // Brak dodatkowych parametrów
       
);
       
if( !tekstura_przycisku1 )
       
{
           
MessageBox( hwnd, "tekstura1!", "Informacja", MB_OK );
       
}
       
SendMessage( hButton1, BM_SETIMAGE, IMAGE_BITMAP,( LPARAM ) tekstura_przycisku1 );
       
       
hButton2 = CreateWindow(
       
"BUTTON", // Klasa przycisku
       
"", // Tekst przycisku
       
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_BITMAP, // Style przycisku
       
( Width / 2 ) * 0.1, 1, // Pozycja
       
( Width / 2 ) * 0.1,( Height / 2 ) * 0.139, // Rozmiar
       
hwnd, // Okno nadrzędne
       
( HMENU ) 2, // ID przycisku
       
( HINSTANCE ) GetWindowLongPtr( hwnd, GWLP_HINSTANCE ),
       
NULL // Brak dodatkowych parametrów
       
);
       
if( !tekstura_przycisku2 )
       
{
           
MessageBox( hwnd, "tekstura2!", "Informacja", MB_OK );
       
}
       
SendMessage( hButton2, BM_SETIMAGE, IMAGE_BITMAP,( LPARAM ) tekstura_przycisku2 );
       
       
hButton3 = CreateWindow(
       
"BUTTON", // Klasa przycisku
       
"", // Tekst przycisku
       
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_BITMAP, // Style przycisku
       
( Width / 2 ) * 0.2, 1, // Pozycja
       
( Width / 2 ) * 0.1,( Height / 2 ) * 0.139, // Rozmiar
       
hwnd, // Okno nadrzędne
       
( HMENU ) 3, // ID przycisku
       
( HINSTANCE ) GetWindowLongPtr( hwnd, GWLP_HINSTANCE ),
       
NULL // Brak dodatkowych parametrów
       
);
       
SendMessage( hButton3, BM_SETIMAGE, IMAGE_BITMAP,( LPARAM ) tekstura_przycisku3 );
       
       
hButton4 = CreateWindow(
       
"BUTTON", // Klasa przycisku
       
"", // Tekst przycisku
       
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_BITMAP, // Style przycisku
       
( Width / 2 ) * 0.3, 1, // Pozycja
       
( Width / 2 ) * 0.1,( Height / 2 ) * 0.139, // Rozmiar
       
hwnd, // Okno nadrzędne
       
( HMENU ) 4, // ID przycisku
       
( HINSTANCE ) GetWindowLongPtr( hwnd, GWLP_HINSTANCE ),
       
NULL // Brak dodatkowych parametrów
       
);
       
SendMessage( hButton4, BM_SETIMAGE, IMAGE_BITMAP,( LPARAM ) tekstura_przycisku4 );
       
break;
   
case WM_DESTROY:
       
return 0;
   
case WM_COMMAND:
       
switch( LOWORD( wParam ) )
       
{
       
case 1:
           
MessageBox( hwnd, "mysz!", "Informacja", MB_OK );
           
break;
       
case 2:
           
MessageBox( hwnd, "pozycja!", "Informacja", MB_OK );
           
break;
       
case 3:
           
MessageBox( hwnd, "skala!", "Informacja", MB_OK );
           
break;
       
case 4:
           
MessageBox( hwnd, "rotacja!", "Informacja", MB_OK );
           
break;
       
case 100:
           
MessageBox( hwnd, "Nowy plik", "Informacja", MB_OK );
           
break;
       
case 101:
           
MessageBox( hwnd, "Otwórz plik", "Informacja", MB_OK );
           
break;
       
case 102:
           
MessageBox( hwnd, "Zapisz plik", "Informacja", MB_OK );
           
break;
       
}
       
break;
   
case WM_KEYDOWN:
       
{
           
if( wParam == VK_ESCAPE ) // Obsługa klawisza Escape
           
{
               
PostQuitMessage( 0 );
           
}
           
else if( wParam == 'W' ) // Obsługa klawisza 'W'
           
{
               
            }
           
else if( wParam == 'S' ) // Obsługa klawisza 'S'
           
{
               
            }
           
else if( wParam == 'A' ) // Obsługa klawisza 'A'
           
{
               
            }
           
else if( wParam == 'D' ) // Obsługa klawisza 'D'
           
{
               
            }
           
else if( wParam == 'R' ) // Obsługa klawisza 'R'
           
{
               
//level.Reload();
           
}
        }
       
break;
       
       
default:
       
return DefWindowProc( hwnd, uMsg, wParam, lParam );
   
}
   
   
return 0;
}

void EnableOpenGL( HWND hwnd, HDC * hDC, HGLRC * hRC )
{
   
PIXELFORMATDESCRIPTOR pfd;
   
   
int iFormat;
   
   
/* get the device context (DC) */
   
* hDC = GetDC( hwnd );
   
   
/* set the pixel format for the DC */
   
ZeroMemory( & pfd, sizeof( pfd ) );
   
   
pfd.nSize = sizeof( pfd );
   
pfd.nVersion = 1;
   
pfd.dwFlags = PFD_DRAW_TO_WINDOW |
   
PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
   
pfd.iPixelType = PFD_TYPE_RGBA;
   
pfd.cColorBits = 32;
   
pfd.cDepthBits = 16;
   
pfd.iLayerType = PFD_MAIN_PLANE;
   
   
iFormat = ChoosePixelFormat( * hDC, & pfd );
   
   
SetPixelFormat( * hDC, iFormat, & pfd );
   
   
/* create and enable the render context (RC) */
   
* hRC = wglCreateContext( * hDC );
   
   
wglMakeCurrent( * hDC, * hRC );
}

void DisableOpenGL( HWND hwnd, HDC hDC, HGLRC hRC )
{
   
wglMakeCurrent( NULL, NULL );
   
wglDeleteContext( hRC );
   
ReleaseDC( hwnd, hDC );
}
P-182057
« 1 » 2 3 4
  Strona 1 z 4 Następna strona