Wymyśliłem, że tworze swoją klasę okien. Każde okno wygląda inaczej (w zależności od
podanego pędzla), przy zachowaniu wspólnej klasy(WNDCLASSEX).
Plik .h
#ifndef Nowa_Kontrolka_h_
#define Nowa_Kontrolka_h_
class Nowa_Kontrolka;
#include<windows.h>
#include<iostream>
LRESULT CALLBACK fZdarz(HWND hWindow, UINT zdarzenie, WPARAM wParam, LPARAM lParam);
class Nowa_Kontrolka
{
private:
static int licznik;//liczy ilosc obiektów
HWND uchwyt;
HBITMAP tlo;
static WNDCLASSEX WndClass;
public:
Nowa_Kontrolka(HWND Rodzic, HINSTANCE hInst, HBITMAP bitmapa);
//Zaprzyjaźniam funkcje zdarzeniową, by mogła sięgać po 'tlo'
friend LRESULT CALLBACK fZdarz(HWND hWindow, UINT zdarzenie, WPARAM wParam, LPARAM lParam);
};
#endif
Plik .cpp
#include"Nowa_Kontrolka.h"
extern HINSTANCE *hInstance;
int Nowa_Kontrolka::licznik = 0;
WNDCLASSEX Nowa_Kontrolka::WndClass = {
sizeof(WNDCLASSEX),
0,
fZdarz,
0,0,
*hInstance,
LoadIcon(NULL, IDI_APPLICATION),
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)COLOR_WINDOW,
NULL,
"Nowa_Kontrolka",
LoadIcon(NULL, IDI_APPLICATION) };
//******************************************************************************
Nowa_Kontrolka::Nowa_Kontrolka(HWND Rodzic, HINSTANCE hInst, HBITMAP bitmapa)
{
++licznik;//stworzono nowy obiekt
//Jeśli jest to pierwszy obiekt tej klasy
if( licznik < 2 )
RegisterClassEx(&WndClass);
tlo = bitmapa;
uchwyt = CreateWindowEx( WS_EX_TOOLWINDOW,
"Nowa_Kontrolka",
"Oto nowa kontrolka",
WS_CHILD|WS_OVERLAPPEDWINDOW|WS_VISIBLE,
10,10, 100,100,
Rodzic,
0,
hInst,
NULL);
}
//******************************************************************************
LRESULT CALLBACK fZdarz(HWND hWindow, UINT zdarzenie, WPARAM wParam, LPARAM lParam)
{
switch(zdarzenie)
{
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
case WM_PAINT:
{
HDC hdcKontekst = GetDC(hWindow);
HDC hdcPamiec = CreateCompatibleDC(hdcKontekst);
DeleteObject( SelectObject(hdcPamiec, tlo) );//błąd - 'tlo' undeclared
BITMAP rozmiar;
GetObject(hdcPamiec, sizeof(BITMAP), &rozmiar);
BitBlt(hdcKontekst, 200, 100, rozmiar.bmWidth, rozmiar.bmHeight,
hdcPamiec, 0, 0, SRCCOPY);
DeleteDC(hdcPamiec);
ReleaseDC(hWindow, hdcKontekst);
break;
}
}
return DefWindowProc(hWindow, zdarzenie, wParam, lParam);
}
Nie wiem skąd ten błąd skoro funkcja jest zaprzyjaźniona. Z tego co wiem to wskaźnik "*hInstance"
tu nie pasuje, bo musi być on znany już w trakcie kompilacji i okno w ogóle się nie wyświetli.
Niestety na razie tego nie sprawdze, bo mam inny błąd. Proszę o pomoc.
</php>