/**************/ /* nappi.c */ /**************************************************************************** PROGRAM: nappi.c Windows: Win 3.1 & WIN32 PURPOSE: Bittikuva ja itsepiirretty nappi Editor: Vesa Lappalainen 31.7.1994 PROJECT: nappi.c, nappi.rc, nappi.def, ALI\tabhand.c, ALI\mdialog.c, ALI\tausta.c, ALI\bitmap.c ****************************************************************************/ #include #include "tabhand.h" #include "tausta.h" #include "bitmap.h" #include "nappi.h" /***************************************************************************/ //TblDlgMAIN(NULL,"nappi",MsgTbl); /* Tämä voi olla myös alussa! */ TblClassDlgMAIN("Nappiluokka",NULL,"PIKA","nappi",MsgTbl); /* Tämä voi olla myös alussa! */ /***************************************************************************/ #define MAX_KUVATUKSIA 100 typedef struct { char *bitname; char *viesti; HBITMAP hBitMap; } tNappi; tNappi Napit[] = { { "BITMAP_1","Hyvä Suomi" }, { "BITMAP_2","Heja Sverige" }, { "3","Long live The Queen!" }, { "..\\kuvat\\hauto.bmp","Henkilöauto!" }, { "C:\\WINDOWS\\XLBIG.BMP","???" }, { NULL } }; #define DIBIE #define BITMAPNAME "ukko" //#define BITMAPNAME "C:\\WINDOWS\\DWARVES.BMP" /* Ei näy! Liika värejä? */ //#define BITMAPNAME "C:\\WINDOWS\\XLBIG.BMP" //#define BITMAPNAME "F:\\A.BMP" static struct { HBITMAP hBitmap; tNappi *Napit; bmHDIB hDib; } G = { 0,Napit }; static EVENT WM_command_CM_DONT_WORK(tMSGParam *msg) { MessageBox(msg->hWnd,"Ei toimi vielä","Nappi",0); return 0; } static EVENT WM_command_KUVATUS(tMSGParam *msg) /* #man# */ { MessageBox(msg->hWnd,G.Napit[msg->id - ID_KUVATUS].viesti,"KUVATUS",0); return 0; } static EVENT WM_drawitem_KUVATUS(tMSGParam *msg) /* #man# */ { DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)msg->lParam; HWND hWnd = GetDlgItem(msg->hWnd,dis->CtlID); HBITMAP hBitmap = G.Napit[dis->CtlID - ID_KUVATUS].hBitMap; if ( hBitmap == NULL ) return 0; /* Piirretään erilainen kuva kun nappi on painettu alas */ if ( dis->itemAction == ODA_SELECT && ( dis->itemState & ODS_SELECTED ) ) PiirraBittikartta(dis->hDC,hBitmap,5,5); else TaytaBittikartalla(hWnd,dis->hDC,hBitmap); return 0; } static EVENT WM_initdialog(tMSGParam *msg) { int i,x,dx,y,leveys,korkeus; RECT rc; HINSTANCE hInst = GetWindowInstance(msg->hWnd); #ifdef DIB G.hDib = bmReadDib(BITMAPNAME); #else G.hBitmap = bmFileOrResLoadBitmap(hInst,BITMAPNAME); #endif for (i=0; G.Napit[i].bitname; i++) G.Napit[i].hBitMap = bmFileOrResLoadBitmap(hInst ,G.Napit[i].bitname); G.Napit[2].hBitMap = LoadBitmap(hInst ,MAKEINTRESOURCE(3)); mGetChildRect(msg->hWnd,ID_KUVATUS,&rc); leveys = rc.right - rc.left; korkeus = rc.bottom - rc.top; x = rc.left; y = rc.top; dx = 4; for (i=1; G.Napit[i].bitname; i++) { x += leveys + dx; CreateWindow("Button","Kuvatus", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, x,y,leveys,korkeus,msg->hWnd, (HMENU)(ID_KUVATUS+i),hInst,NULL); } return 0; } static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { #ifdef DIB bmDrawDib(msg->hDC,G.hDib,0,0); #else HDC hDCBitmap = CreateCompatibleDC(msg->hDC); HGDIOBJ hOld = SelectObject(hDCBitmap,G.hBitmap); BITMAP bm; GetObject(G.hBitmap,sizeof(bm),&bm); BitBlt(msg->hDC,0,0,bm.bmWidth,bm.bmHeight,hDCBitmap,0,0,SRCCOPY); SelectObject(hDCBitmap,hOld); DeleteDC(hDCBitmap); /* PiirraBittikartta(msg->hDC,hBitmap,0,0); */ #endif return 0; } static EVENT WM_close(tMSGParam *msg) { int i; #ifdef DIB bmDeleteDib(G.hDib); #else DeleteObject(G.hBitmap); #endif for (i=0; G.Napit[i].bitname; i++) DeleteObject(G.Napit[i].hBitMap); PostQuitMessage(0); (void)msg; return 0; } /***************************************************************************/ /* Viestien käsittelytaulukko */ /***************************************************************************/ tMSGEntry MsgTbl[] = { { WM_COMMAND , TRANGE , DoC , WM_command_KUVATUS, 0,SAME_AS_W,ID_KUVATUS,ID_KUVATUS+MAX_KUVATUKSIA-1 }, { WM_DRAWITEM , TRANGE , DoC , WM_drawitem_KUVATUS,0,SAME_AS_W,ID_KUVATUS,ID_KUVATUS+MAX_KUVATUKSIA-1 }, { WM_COMMAND , CM_FILE_EXIT , DoC , WM_close }, { WM_COMMAND , CM_DONT_WORK , DoC , WM_command_CM_DONT_WORK }, /*a*/ { WM_INITDIALOG , DoC , DoC , WM_initdialog }, /*a*/ { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_CLOSE , DoC , DoC , WM_close }, /*a*/ { 0 } }; /***************************************************************************/