/**************/ /* tausta.c */ /**************************************************************************** PROGRAM: tausta.c PURPOSE: Aliohjelmakirjasto taustan piirtämiseksi. AUTHOR: Vesa Lappalainen 20.10.1992 20.8.1994/vl : ikkunakohtaiset taustat ja viestitaulukon pala 21.11.1994/vl: täyttö monella bittikartalla USAGE: Käyttäjän pitää 0) Liittää projektiin ALI\tausta.c ja pääohjelmaan #include "tausta.h" 1) liittää .RC tiedostoonsa haluttujen taustan bittikartta esim. nimellä TAUSTA 2) Kutsua ikkunan luomisessa (esim. WM_INITDIALOG) AlustaTausta(hInstance,"TAUSTA"); Tätä voidaan kutsua myös myöhemmin taustan vaihtamiseksi. AlustaTausta(NULL,"UUSITAUSTA"); 3) Taustan hoitamiseksi kutsua ikkunan funktiossa case WM_ERASEBKGND: PiirraTausta((HDC)wParam); return TRUE; Tai laittaa EV_HANDLE_WM_ERASEBKGND rivi MsgTbl -taulukkoon (ks. TABHAND.H) 4) Ohjelman lopuksi kutsua PoistaTausta(); 2*) Jos käytetään ikkunakohtaisia taustoja, niin ne luodaan kutsulla AlustaTaustaHWND(hInstance,hWnd,"TAUSTA",1); ( 0 = ei venytystä, 1 = venytetään ikkunan kokoiseksi, 2 = tayta monelle kunnes tulee täyteen ) 3* & 4*) Jos viestitaulukkoon lisätään rivi LOOK_TABLE(TaustaMsgTbl) ei muuta tarvitse tehdäkään. Myös ikkunakohtaisessa tapauksessa voidaan luoda vielä ikkunaton tausta, jota käytetään niille ikkunoille, joille ei ole erikseen luotu ikkunakohtaista taustaa. Tämä "ikkunaton" tausta pitää kuitenkin erikseen poistaa! Kaikki funktiot palauttavat 0=OK, muut on virhe. Muita funktioita: int TaytaBittikarttalla(HWND hWnd,HDC hDC,HBITMAP hBitmap); int PiirraBittikartta(HDC hDC,HBITMAP hBitmap,int x,int y) Suunitelmia: ------------ - täytössä nopeampi käyttö automaattisen talletuksen avulla ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include "tabhand.h" #include "tausta.h" /***************************************************************************/ static HINSTANCE GhInstance = NULL; int TaytaMonellaBittikartalla(HWND hWnd,HDC hDC,HBITMAP hBitmap) { HDC hDCBitmap = CreateCompatibleDC(hDC); HGDIOBJ hOld = SelectObject(hDCBitmap,hBitmap); RECT rc; BITMAP bm; int x,y; GetObject(hBitmap,sizeof(bm),&bm); GetClientRect(hWnd,&rc); for (y=0; y= MAX_TAUSTOJA ) return 1; Taustat[taustoja].tayta = tayta; Taustat[taustoja].hWnd = hWnd; Taustat[taustoja].hBitBack = hBitBack; taustoja++; return hBitBack == NULL; } static int onko_tayta(HWND hWnd) { int i; for (i=0; ihWnd,(HDC)msg->wParam); } /***************************************************************************/ static EVENT WM_destroy(tMSGParam *msg) { PoistaTaustaHWND(msg->hWnd); return CONTINUE_TABLE; } /***************************************************************************/ tMSGEntry TaustaMsgTbl[] = { { WM_ERASEBKGND , DoC , DoC , WM_erasebkgnd }, /*a*/ { WM_DESTROY , DoC , DoC , WM_destroy }, /*a*/ { 0 } };