/**************/ /* kieli.c */ /**************************************************************************** ** PROGRAM: kieli.c ** PURPOSE: Erikielisten menujen käyttäminen ja lipun piiräminen ** pääikkunan alalaitaan. ** ** Käyttäjän täytyy tehdä resurssitiedostoon ** haluamansa kokoiset liput bittikarttoina nimille ** KIELI_? , missä ? on juokseva numero 1:stä eteenpäin ** Vastaavasti tehdään menut samoille nimille ** ja mikäli menuun halutaan lipunkuva, pitää ** kielet numeroida menun johonkin kohtaan ** IDM_OPTIONS_LANGUAGE+? eteenpäin, missä ? alkaa 0:sta. ** Jos lipunkuva halutaan myös ikkunan alalaitaan, ** pitää se tehdä User Draw push buttonina, jolle ** annetaan tunnus ID_LANGUAGE. ** Tunnukset löytyvät tiedostosta kieli.h ****************************************************************************/ #include #include #include "..\menu4\kieli.h" /***************************************************************************/ typedef struct { char name[20]; int item; HBITMAP hBit; HMENU hMenu; } LanguageType; /***************************************************************************/ #define MAX_KIELIA 10 static int KIELIA = 0; static LanguageType Languages[MAX_KIELIA] = { {"",IDM_OPTIONS_LANGUAGE,NULL,NULL} }; static int kieli=0; /***************************************************************************/ void TaytaBittikarttalla(HWND hWnd,HDC hDC,HBITMAP hBitmap) /* Täytetään koko alue bittikartalla */ { HDC hDCBitmap = CreateCompatibleDC(hDC); HGDIOBJ hOld = SelectObject(hDCBitmap,hBitmap); RECT rc; BITMAP bm; GetObject(hBitmap,sizeof(bm),&bm); GetClientRect(hWnd,&rc); StretchBlt(hDC,0,0,rc.right,rc.bottom,hDCBitmap, 0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); SelectObject(hDCBitmap,hOld); DeleteDC(hDCBitmap); } /***************************************************************************/ int AsetaKieli(HWND hWnd,int k) { kieli = k; if ( kieli >= KIELIA ) kieli = 0; SetMenu(hWnd,Languages[kieli].hMenu); InvalidateRect(hWnd,NULL,FALSE); return TRUE; } /***************************************************************************/ BOOL language_message(HWND hWnd, unsigned message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DRAWITEM: switch (wParam) { case ID_LANGUAGE: { DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam; HWND hwnd = GetDlgItem(hWnd,ID_LANGUAGE); TaytaBittikarttalla(hwnd,dis->hDC,Languages[kieli].hBit); return TRUE; } } return FALSE; case WM_COMMAND: if ( ( IDM_OPTIONS_LANGUAGE <= wParam ) && ( wParam < IDM_OPTIONS_LANGUAGE+KIELIA) ) return AsetaKieli(hWnd,wParam-IDM_OPTIONS_LANGUAGE); if ( wParam == ID_LANGUAGE ) return AsetaKieli(hWnd,++kieli); } return FALSE; } /***************************************************************************/ void AlustaMenut(HANDLE hInstance,HWND hWnd) /* Ladataan tarvittavat bittikartat ja vaihdetaan ne kussakin menussa ** kunkin kielen valinnan tilalle. Kielten valinnat tulee olla numeroitu ** juoksevasti. Jos joku valinta puuttuu, lisätään se ensimmäisen kielen ** yläpuolelle. Jos jonkin kielisessä menussa ei ole yhtään kielenvaihtoa, ** ei sinne niitä lisätäkään! */ { int i,j; for (i=0; i= 0 ) /* Lisätään puuttuvat kielet */ for (j=0; j=0; i--) DestroyMenu(Languages[i].hMenu); for (i=KIELIA-1; i>=0; i--) DeleteObject(Languages[i].hBit); }