Skocz do zawartości

Odnosnie BCW


Marshall

Recommended Posts

Niestety
TImageList - nie istnieje w tym kompilatorze.
On ma niestety czesc swoich odmiennych funkcji.
Co najgorsze to na helpie nie mozna zabardzo polegac.
Jest podany przyklad ladowania bitmapy:

HDC hdc, hdcMemory;
HBITMAP hbmpMyBitmap, hbmpOld;
BITMAP bm;

hbmpMyBitmap = LoadBitmap(hinst, "MyBitmap");
GetObject(hbmpMyBitmap, sizeof(BITMAP), &bm);

hdc = GetDC(hwnd);
hdcMemory=CreateCompatibleDC(hdc);
hbmpOld=SelectObject(hdcMemory, hbmpMyBitmap);

BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCCOPY);
SelectObject(hdcMemory,hbmpOld);

DeleteDC(hdcMemory);
ReleaseDC(hwnd, hdc);

Niestety ten przyklad po podstawieniu parametrow okna i namiarow na bitmape rowniez nie dziala. Po skompilowaniu dokladnie jest taki sam efekt na ekranie jak przed skompilowaniem.Wpisany tekst dodaje do szkieletu budowy okna.Program rysuje figury,linie, punkty, zaznacza piksele,lecz obrazu nie chce dodac, niezaleznie czy pracuje na nowym,czy tez rozbudowanym oknie.Chyba ze o czyms zapomnialem.Moze jeszcze cos trzeba do tego dodac.[/img]

OTO BEZEFEKTOWNE ZREALIZOWANIE ZALOZEN HELPA

#include <windows.h>

static char lpszAppName[] = "Rysowanie funkcji" ;
HPEN pioro;
HINSTANCE hinstance;

int i;

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

PAINTSTRUCT ps;
RECT rc;
HBRUSH hbr;

HDC hdc, hdcMemory;
HBITMAP hbmpMyBitmap, hbmpOld;
BITMAP bm;

switch (uMsg)
{

case WM_CREATE:

break;

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

int k;

for (k=0;k<=51;k++)
for (i=0;i<=51;i++)
{
rc.left = 5+i*2;
rc.top = k*2+5;
rc.right = 7+i*2;
rc.bottom = k*2+7;

hbr = CreateSolidBrush(RGB(5*i,5*k,10));

FillRect(hdc, &rc, hbr);
SelectObject(hdc,hbr);
DeleteObject(hbr);

}

hbmpMyBitmap = LoadBitmap(hinstance, "h:\\Earth.bmp");
GetObject(hbmpMyBitmap, sizeof(BITMAP), &bm);

hdc = GetDC(hWnd);
hdcMemory=CreateCompatibleDC(hdc);
hbmpOld=SelectObject(hdcMemory, hbmpMyBitmap);

BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCCOPY);
SelectObject(hdcMemory,hbmpOld);

DeleteDC(hdcMemory);
ReleaseDC(hWnd, hdc);

EndPaint(hWnd, &ps);
break;

/*case WM_LBUTTONDOWN:
X = LOWORD(lParam);
Y = HIWORD(lParam);
InvalidateRect(hWnd, 0, TRUE);
UpdateWindow(hWnd);
break; */

case WM_DESTROY:

PostQuitMessage(0);
break;

case WM_KEYDOWN:

break;

default:

return (DefWindowProc(hWnd, uMsg, wParam, lParam));

}
return(0L);
}

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;
WNDCLASS wndclass;
HWND hWnd;

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = MainWndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszAppName;

if(RegisterClass(&wndclass) == 0)

return FALSE;

hWnd = CreateWindow(lpszAppName, lpszAppName,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if(hWnd == NULL)
return FALSE;

ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

Link do komentarza
Udostępnij na innych stronach

Funkcja LoadBitmap() w drugim parametrze nie pobiera nazwy pliku, tylko nazwe zasobu z pliku .rc. Jezeli koniecznie chcesz wczytac bitmape z pliku uzyj funkcji:

HANDLE LoadImage(
  HINSTANCE hinst,   // uchwyt do klasy aplikacji (jezeli wczytujesz z pliku daj tu wartosc NULL)
  LPCTSTR lpszName,  // nazwa lub identyfikator bitmapy (wpisz tutaj nazwe pliku jaki chcesz wczytac)
  UINT uType,        // typ obrazka jaki chcesz wczytac (wpisz IMAGE_BITMAP)
  int cxDesired,     // zadana szerokosc (podaj 0 to wczyta szerokosc z pliku)
  int cyDesired,     // zadana wysokosc (tez daj 0)
  UINT fuLoad        // flagi (tu wpisz LR_LOADFROMFILE)
);

czyli zamien swoja linijke:

hbmpMyBitmap = LoadBitmap(hinstance, "h:\\Earth.bmp"); 

na:

hbmpMyBitmap = (HBITMAP) LoadImage(NULL,"h:\\Earth.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

Pelniejszy opis tej funkcji znajdziesz tu:https://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp.
I w ogole, jak czegos nie bedziesz mogl znalezc w swoim helpie to poszukaj na https://msdn.microsoft.com/library.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...