Mahir Temat założony przez niniejszego użytkownika |
Problem z wlasną funkcja rysującą w WinApi » 2015-03-24 14:47:17 Witam Napisalem w WinApi wlasna funkcje do wyświetlania bitmap. Lecz gdy chcę wyświetlić tą samą bitmape to niestety ona się nie wyświetla. #include <string> #include <windows.h>
using namespace std;
HBITMAP CreateBitmapMask( HBITMAP hbmColour, COLORREF crTransparent ) { HDC hdcMem, hdcMem2; HBITMAP hbmMask, hbmOld, hbmOld2; BITMAP bm; GetObject( hbmColour, sizeof( BITMAP ), & bm ); hbmMask = CreateBitmap( bm.bmWidth, bm.bmHeight, 1, 1, NULL ); hdcMem = CreateCompatibleDC( NULL ); hdcMem2 = CreateCompatibleDC( NULL ); hbmOld =( HBITMAP ) SelectObject( hdcMem, hbmColour ); hbmOld2 =( HBITMAP ) SelectObject( hdcMem2, hbmMask ); SetBkColor( hdcMem, crTransparent ); BitBlt( hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY ); BitBlt( hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT ); SelectObject( hdcMem, hbmOld ); SelectObject( hdcMem2, hbmOld2 ); DeleteDC( hdcMem ); DeleteDC( hdcMem2 ); return hbmMask; }
void rysuj( HBITMAP hbmObraz, HWND hwnd, int X, int Y ) { HBITMAP hbmOld, hbmMaska; hbmMaska = CreateBitmapMask( hbmObraz, RGB( 0, 255, 0 ) ); HDC hdc = GetDC( hwnd ), hdcNowy = CreateCompatibleDC( hdc ); BITMAP bmInfo; GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo ); hbmOld =( HBITMAP ) SelectObject( hdcNowy, hbmMaska ); BitBlt( hdc, X, Y, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCAND ); SelectObject( hdcNowy, hbmObraz ); BitBlt( hdc, X, Y, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCPAINT ); ReleaseDC( hwnd, hdc ); SelectObject( hdcNowy, hbmOld ); DeleteDC( hdcNowy ); DeleteObject( hbmMaska ); DeleteObject( hbmObraz ); } Nie wiem co robie źle i czy tylko ja tak mam, prosze o pomoc. |
|
Mahir Temat założony przez niniejszego użytkownika |
» 2015-03-25 17:38:06 Co, to ja tylko mam ten problem?? Czemu nick nie chce pomoc? |
|
pekfos |
» 2015-03-25 22:07:20 Gdzie wywołujesz tę funkcję? |
|
Mahir Temat założony przez niniejszego użytkownika |
» 2015-03-26 16:19:25 między ShowWindow(...) a while(GetMessage(...)) w WinMain |
|
pekfos |
» 2015-03-26 17:04:33 Zapomniałeś napisać, że cały kod skopiowałeś z kursu. Wypadało by przynajmniej doczytać lekcję do końca. Bitmapy"Odświeżanie zawartości okienka". |
|
Mahir Temat założony przez niniejszego użytkownika |
» 2015-03-26 17:26:45 Najgorsze jest to ze nadal nie dziala :c |
|
Brunon3 |
» 2015-03-26 17:32:24 Najgorsze jest to ze nadal nie dziala :c |
A pokażesz co zrobiłeś że nadal nie działa..? -BD. |
|
Mahir Temat założony przez niniejszego użytkownika |
» 2015-03-26 17:45:48 zrobilem to tak: #if defined(UNICODE) && !defined(_UNICODE) #define _UNICODE #elif defined(_UNICODE) && !defined(UNICODE) #define UNICODE #endif
#include <tchar.h> #include <windows.h> #include "windows++.h"
LRESULT CALLBACK WindowProcedure( HWND, UINT, WPARAM, LPARAM );
TCHAR szClassName[] = _T( "CodeBlocksWindowsApp" );
HBITMAP test; HWND hwnd;
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow ) { MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; if( !RegisterClassEx( & wincl ) ) return 0; hwnd = CreateWindowEx( 0, szClassName, _T( "Code::Blocks Template Windows App" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL ); ShowWindow( hwnd, nCmdShow ); test =( HBITMAP ) LoadImage( NULL, "kompas.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); while( GetMessage( & messages, NULL, 0, 0 ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint( hwnd, & ps ); rysuj( test, hwnd, 50, 50 ); rysuj( test, hwnd, 150, 150 ); EndPaint( hwnd, & ps ); } break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; }
i nadal nie dziala |
|
« 1 » 2 |