/**************************************************************************** PROGRAM: Thello2.c PURPOSE: Ohjelma tyypillisten kontrollien testaamiseen. Editor: Vesa Lappalainen typistänyt malliohjelmista. Tehtäviä: 1) Kokeile muutella ikkunoiden tyylejä muuttamalla kertoimia 1* ja 0* 2) Kokeile erityisesti laittaa salasanatoiminto päälle Edit-ikkunaan 3) Kokeile mitä vaikuttaa svalue -puskurin pienentäminen esim. 10 merkiksi. 4) Miten monirivisen EDIT-ikkunan rivinvaihdot näkyvät otsikkorivissä? 5) Kokeile muutella monirivisen EDIT-ikkunan rullauslippuja. ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include HWND hNWnd; /* Nappulan kahva */ HWND hSWnd; /* Static-ikkunan kahva */ HWND hTWnd; /* Teksti-ikkunan kahva */ HWND hMTWnd; /* Monirivisen teksti-ikkunan */ HWND hBWnd; /* ScrollBar-ikkunan kahv */ #define MY_BUTTON 175 #define MY_TEXT 176 #define MY_BAR 177 #define MY_MTEXT 178 #define MIN_BAR 0 #define MAX_BAR 50 static int value = 0; static char svalue[100]; void ShowStatic(int value) /* Aliohjelmalla tulostetaan Static ikkunaan numero ja laitetaan */ /* samalla liuku vastaavaan asentoon. */ { wsprintf(svalue,"%10d",value); SetWindowText(hSWnd,svalue); value = max(MIN_BAR,min(MAX_BAR,value)); SetScrollPos(hBWnd,SB_CTL,value,TRUE); } LONG CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; switch (message) { case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) TextOut(ps.hdc, 10, 10, "Hello World!",12); EndPaint(hWnd,&ps); return (NULL); case WM_COMMAND: switch ( GET_WM_COMMAND_ID(wParam,lParam) ) { case MY_BUTTON: /* Painonappia painettu */ ShowStatic(++value); return NULL; case MY_TEXT: /* Jos viesti teksti-ikkunalta */ switch ( GET_WM_COMMAND_CMD(wParam,lParam) ) { case EN_CHANGE: /* Aina kun sisältö muuttuu, lisät.lask */ ShowStatic(++value); return NULL; case EN_KILLFOCUS: /* Teksti-ikkunasta poistuttu */ GetWindowText(hTWnd,svalue,sizeof(svalue)); SetWindowText(hWnd,svalue); return NULL; } case MY_MTEXT: /* Jos viesti monirivis.teksti-ikkunalta*/ switch ( GET_WM_COMMAND_CMD(wParam,lParam) ) { case EN_CHANGE: /* Aina kun sisältö muuttuu, lisät.lask */ ShowStatic(++value); return NULL; case EN_KILLFOCUS: /* Teksti-ikkunasta poistuttu */ GetWindowText(hMTWnd,svalue,sizeof(svalue)); SetWindowText(hWnd,svalue); return NULL; } return NULL; default: break; } break; case WM_VSCROLL: /* Liukuun koskettu */ if ( GET_WM_VSCROLL_HWND(wParam,lParam) == hBWnd ) { /* Jos oma liuku */ switch ( GET_WM_VSCROLL_CODE(wParam,lParam) ) { case SB_BOTTOM : value = MIN_BAR; break; case SB_TOP : value = MAX_BAR; break; case SB_LINEDOWN : value++; break; case SB_PAGEDOWN : value += 10; break; case SB_LINEUP : value--; break; case SB_PAGEUP : value -= 10; break; case SB_THUMBPOSITION: case SB_THUMBTRACK : value = GET_WM_VSCROLL_POS(wParam,lParam); break; } ShowStatic(value); } return NULL; case WM_DESTROY: /* Viesti: ikkuna hävitetään */ PostQuitMessage(0); return (NULL); default: /* Antaa Windowsin käsitellä muut */ break; } return (DefWindowProc(hWnd, message, wParam, lParam)); } int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; /* Ikkunaluokka */ HWND hWnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ (void)lpCmdLine; /* Hämäystä, jottei valitusta param. käytt. */ if (!hPrevInstance) { /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "WHelloWClass"; if ( !RegisterClass(&wc) ) return 1; } hWnd = CreateWindow("WHelloWClass","Windows Hello", 1* WS_CAPTION | 1* WS_BORDER | 0* WS_DLGFRAME | 1* WS_VSCROLL | 1* WS_HSCROLL | 1* WS_SYSMENU | 1* WS_THICKFRAME | 1* WS_MINIMIZEBOX | 1* WS_MAXIMIZEBOX | 0* WS_POPUP | 0* WS_CHILD , 50,50,300,400, /* CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, */ NULL,NULL,hInstance,NULL); if ( !hWnd ) return 1; SetScrollRange(hWnd,SB_VERT,0,100,FALSE); ShowWindow(hWnd,nCmdShow); /* Näytetään ikkuna */ hNWnd = CreateWindow("Button"/*"WHelloWClass"*/,"Windows Hello", 0* WS_CAPTION | 1* WS_BORDER | 0* WS_DLGFRAME | 0* WS_VSCROLL | 0* WS_HSCROLL | 0* WS_SYSMENU | 0* WS_THICKFRAME | 0* WS_MINIMIZEBOX | 0* WS_MAXIMIZEBOX | 0* WS_POPUP | 1* WS_CHILD | 1* WS_VISIBLE , 10,30,100,30,hWnd,(HMENU)MY_BUTTON,hInstance,NULL); if ( !hNWnd ) return 1; hSWnd = CreateWindow("Static","Windows Hello", 0* WS_CAPTION | 0* WS_BORDER | 0* WS_DLGFRAME | 0* WS_VSCROLL | 0* WS_HSCROLL | 0* WS_SYSMENU | 0* WS_THICKFRAME | 0* WS_MINIMIZEBOX | 0* WS_MAXIMIZEBOX | 0* WS_POPUP | 1* WS_CHILD | 1* WS_VISIBLE , 10,70,100,30, hWnd,NULL,hInstance,NULL); if ( !hSWnd ) return 1; hTWnd = CreateWindow("Edit","Windows Hello", 0* WS_CAPTION | 0* WS_BORDER | 1* WS_DLGFRAME | 0* WS_VSCROLL | 0* WS_HSCROLL | 0* WS_SYSMENU | 1* WS_THICKFRAME | 0* WS_MINIMIZEBOX | 0* WS_MAXIMIZEBOX | 0* WS_POPUP | 1* WS_CHILD | 1* WS_VISIBLE | 0* ES_PASSWORD, 10,110,100,40, hWnd,(HMENU)MY_TEXT,hInstance,NULL); if ( !hTWnd ) return 1; hMTWnd = CreateWindow("Edit","Windows\r\n Hello", 0* WS_CAPTION | 0* WS_BORDER | 1* WS_DLGFRAME | 1* WS_VSCROLL | 0* WS_HSCROLL | 0* WS_SYSMENU | 1* WS_THICKFRAME | 0* WS_MINIMIZEBOX | 0* WS_MAXIMIZEBOX | 0* WS_POPUP | 1* WS_CHILD | 1* WS_VISIBLE | 0* ES_PASSWORD | 1* ES_MULTILINE | 1* ES_UPPERCASE | 0* ES_AUTOHSCROLL | 1* ES_AUTOVSCROLL , 10,210,100,90, hWnd,(HMENU)MY_MTEXT,hInstance,NULL); if ( !hMTWnd ) return 1; hBWnd = CreateWindow("Scrollbar","Windows Hello", 0* WS_CAPTION | 0* WS_BORDER | 0* WS_DLGFRAME | 0* WS_VSCROLL | 0* WS_HSCROLL | 0* WS_SYSMENU | 0* WS_THICKFRAME | 0* WS_MINIMIZEBOX | 0* WS_MAXIMIZEBOX | 0* WS_POPUP | 1* WS_CHILD | 1* WS_VISIBLE | SBS_VERT , 200,10,30,200, hWnd,(HMENU)MY_BAR,hInstance,NULL); if ( !hBWnd ) return 1; SetScrollRange(hBWnd,SB_CTL,MIN_BAR,MAX_BAR,TRUE); while ( GetMessage(&msg,NULL,NULL,NULL) ) { TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ } return msg.wParam; /* Palautetaan PostQuitMessage-funktion arvo */ }