/**************************************************************************** PROGRAM: Thello.c PURPOSE: Ohjelma tyypillisten kontrollien testaamiseen. Editor: Vesa Lappalainen typistänyt malliohjelmista. Project: thello.c, whello.def ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #define MY_BUTTON 175 /* Nappulan tunniste */ #define MY_EDIT 176 /* Tekstikentän (Edit) tunniste */ #define MY_BAR 177 /* Oman likusäätimen tunniste */ #define MY_STATIC 178 /* 1. vakiotekstin tunniste = liun arvo */ #define MY_BARS 179 /* apuvakio seuraaville */ #define MY_SVER (MY_BARS+SB_VERT) /* 2. tekstikenän tunniste = pystyliun */ #define MY_SHOR (MY_BARS+SB_HORZ) /* 3. tekstikentän tunniste = vaakaliun*/ #define MIN_BAR 0 #define MAX_BAR 50 static int value = 0; 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 */ SetDlgItemInt(hWnd,MY_STATIC,++value,TRUE); return NULL; case MY_EDIT: /* Jos viesti teksti-ikkunalta */ switch ( GET_WM_COMMAND_CMD(wParam,lParam) ) { case EN_CHANGE: /* Aina kun sisältö muuttuu, lisät.lask */ SetDlgItemInt(hWnd,MY_STATIC,++value,TRUE); return NULL; case EN_KILLFOCUS: {/* Teksti-ikkunasta poistuttu */ char svalue[20]; GetDlgItemText(hWnd,MY_EDIT,svalue,sizeof(svalue)); SetWindowText(hWnd,svalue); /* Sama tulos pääótsikkoon */ return NULL; } } return NULL; default: break; } break; case WM_VSCROLL: { /* Johonkin pysytliukuun koskettu */ HWND shWnd = GET_WM_VSCROLL_HWND(wParam,lParam); int fnBar = SB_CTL; int id = GetDlgCtrlID(shWnd); if ( shWnd == NULL ) { shWnd = hWnd; id = SB_VERT; fnBar = SB_VERT; } 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; } SetScrollPos(shWnd,fnBar,value,TRUE); SetDlgItemInt(hWnd,id == MY_BAR ? MY_STATIC : MY_SVER ,value, TRUE); 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) { HWND hWnd,hCtrl;/* Pääikkunan kahva ja apukahva kontrollien luontiin. */ WNDCLASS wc; /* Ikkunaluokka */ 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", WS_CAPTION | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 50,50,300,300,NULL,NULL,hInstance,NULL); if ( !hWnd ) return 1; ShowWindow(hWnd,nCmdShow); /* Näytetään ikkuna */ hCtrl = CreateWindow("Button","Windows Hello", WS_BORDER |WS_CHILD | WS_VISIBLE , 10,30,100,30,hWnd,(HMENU)MY_BUTTON,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT, 40,70,40,30,hWnd,(HMENU)MY_STATIC,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT , 80,70,40,30,hWnd,(HMENU)MY_SHOR,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT, 120,70,40,30,hWnd,(HMENU)MY_SVER,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Edit","Windows Hello", WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 10,110,100,40,hWnd,(HMENU)MY_EDIT,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Scrollbar","Windows Hello", WS_CHILD | WS_VISIBLE | SBS_VERT, 200,10,30,200,hWnd,(HMENU)MY_BAR,hInstance,NULL); if ( !hCtrl ) return 1; SetScrollRange(hCtrl,SB_CTL,MIN_BAR,MAX_BAR,TRUE); SetScrollRange(hWnd,SB_VERT,MIN_BAR,2*MAX_BAR,TRUE); SetScrollRange(hWnd,SB_HORZ,MIN_BAR,3*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 */ }