Widzę że masz z tym problem, niepotrzebnie założyłeś nowy topic
W tym samplu ładowana jest gotowa bitmapa twenty-four-bit.bmp
OnPaint() jest zrobiony na odwal się - odrysowuje całe okno zamiast skalowania bitmapy na wymazany fragment okna
Tak przy okazji pochwalę się nowym alpha nabytkiem: "Aurora compiler"
#include "windows.inc"
class COkno
{
declare COkno();
declare _COkno();
declare RegisterClass(),word;
declare Create(int l,int t,int w,int h,int style,HMENU hMenu,string *title),HWND;
declare LoadSetBitmap(string *path),HBITMAP;
declare OnPaint(),int;
declare OnCreate(),BOOL;
declare OnSize(int nType,int cx,int cy);
declare OnClose(),BOOL;
HWND m_hwnd; // hwnd okna
HDC m_cdc; // pomocnicze DC
HBITMAP m_hbm; // pomocnicza bitmapa o wielko?ci ekranu
HBITMAP m_dcbm; // oryginalna bitmapa z DC
int m_bmWidth; // rozmiar pomocniczej bitmapy
int m_bmHeight;
}
/////////////////////////
// program entry point
global sub main
{
COkno win;
win.Create(CW_USEDEFAULT,0,CW_USEDEFAULT,0,WS_OVERLAPPEDWINDOW,0,"blah");
win.LoadSetBitmap("D:\\IBpro\\temp\\twenty-four-bit.bmp");
ShowWindow(win.m_hwnd, SW_SHOW);
while (win.m_hwnd)
{
wait();
}
return;
}
COkno :: COkno // constructor
{
m_hwnd=0;
m_cdc = CreateCompatibleDC(0);
m_bmWidth = GetSystemMetrics(SM_CXSCREEN);
m_bmHeight = GetSystemMetrics(SM_CYSCREEN);
m_hbm = CreateCompatibleBitmap(
m_cdc,
m_bmWidth,
m_bmHeight);
m_dcbm = SelectObject(m_cdc, m_hbm);
return RegisterClass();
}
COkno :: _COkno // destructor
{
SelectObject(m_cdc, m_dcbm);
DeleteObject(m_hbm);
DeleteDC(m_cdc);
return;
}
COkno :: OnCreate(),BOOL
{
// CenterWindow(m_hwnd);
return 0;
}
COkno :: OnSize(int nType,int cx,int cy)
{
HDC dc = GetDC(m_hwnd);
StretchBlt(dc, 0,0, cx,cy, m_cdc, 0,0,m_bmWidth, m_bmHeight, SRCCOPY);
ReleaseDC(m_hwnd, dc);
return 0;
}
COkno :: OnPaint(),int
{
PAINTSTRUCT ps;
RECT rc;
// zrób to ?eby procek nie oszala?
BeginPaint(m_hwnd, ps);
EndPaint(m_hwnd, ps);
// i skaluj bitmap?
GetClientRect(m_hwnd, rc);
return OnSize(0, rc.right, rc.bottom);
}
COkno :: OnClose(),BOOL
{
DestroyWindow(m_hwnd);
return 0;
}
COkno :: LoadSetBitmap(string *path),HBITMAP
{
BITMAP bm;
HBITMAP hbm = LoadImage(0, path, IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);
if (hbm=0) return 0;
GetObject(hbm, len(BITMAP), bm);
m_bmWidth = bm.bmWidth;
m_bmHeight = bm.bmHeight;
// usuwamy star? pomocnicz? bitmap?
SelectObject(m_cdc, m_dcbm);
DeleteObject(m_hbm);
// i wsadzamy now?
SelectObject(m_cdc, hbm);
m_hbm = hbm;
UpdateWindow(m_hwnd);
return hmb;
}
COkno :: RegisterClass(),word
{
WNDCLASS wc;
memset(&wc, 0, len(wc));
wc.style = CS_GLOBALCLASS;
wc.lpfnWndProc = &MyWndProc;
wc.hInstance = _hinstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = "AuroraScalableImageWndClass";
wc.hbrBackground = GetStockObject(BLACK_BRUSH);
return ::RegisterClass(&wc);
}
COkno :: Create(int l,int t,int w,int h,int style,HMENU hMenu,string *title),HWND
{
return CreateWindowEx(0,
"AuroraScalableImageWndClass",
title, style, l,t,w,h,
0, hMenu, _hinstance, this);
}
sub MyWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam),LRESULT
{
COkno *me = GetProp(hwnd, "F458384A-7EF1-4715-A193-9C1B34CC527C");
select uMsg
{
case WM_NCCREATE:
me = *(CREATESTRUCT)lParam.lpCreateParams;
SetProp(hwnd, "F458384A-7EF1-4715-A193-9C1B34CC527C", me);
if (me<>null) me->m_hwnd = hwnd;
case WM_CREATE:
return me->OnCreate();
case WM_SIZE:
return me->OnSize(wParam, (lParam&0xFFFF), (lParam>>16));
case WM_DESTROY:
me->m_hwnd = 0;
RemoveProp(hwnd, "F458384A-7EF1-4715-A193-9C1B34CC527C");
case WM_CLOSE:
return me->OnClose();
case WM_PAINT:
return me->OnPaint();
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}