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;
}