/**************************************************************************** PROGRAM: tthello.c PURPOSE: Ohjelma tyypillisten kontrollien testaamiseen. Toteutettu taulukon avulla. Malliksi on scrollbareja koplattu yhteen. Editor: Vesa Lappalainen typistänyt malliohjelmista. Project: tthello.c, whello.def, ALI\tabhand.c, ALI\scrollba.c Tehtäviä: 1) Muuttele scrollbarien yhteenkoplausta. 2) Kokeile eri lippujen vaikutusta muuttelemalla MY_MEDITin luonnissa olevia arvoja. ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include "tabhand.h" /* Hoitaa taulukon käsittelyn */ #include "scrollba.h" /* Hoitelee scrollbareja */ #define WSTYLE WS_VSCROLL | WS_HSCROLL /***************************************************************************/ TblClassSWindowMAIN("WHelloWClass",NULL,"Windows Hello",MsgTbl,WSTYLE); /***************************************************************************/ #define MY_MEDIT 174 /* Monirivisen edit-kentän tunniste */ #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 EVENT WM_create(tMSGParam *msg) { HINSTANCE hInstance = GetWindowInstance(msg->hWnd); HWND hCtrl; MoveWindow(msg->hWnd,50,50,300,300,FALSE); hCtrl = CreateWindow("Button","Windows Hello", WS_BORDER |WS_CHILD | WS_VISIBLE , 10,30,100,30,msg->hWnd,(HMENU)MY_BUTTON,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT, 40,70,40,30,msg->hWnd,(HMENU)MY_STATIC,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT , 80,70,40,30,msg->hWnd,(HMENU)MY_SHOR,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Static","0",WS_CHILD | WS_VISIBLE | SS_RIGHT, 120,70,40,30,msg->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,msg->hWnd,(HMENU)MY_EDIT,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = 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,160,100,80,msg->hWnd,(HMENU)MY_MEDIT,hInstance,NULL); if ( !hCtrl ) return 1; hCtrl = CreateWindow("Scrollbar","Windows Hello", WS_CHILD | WS_VISIBLE | SBS_VERT, 200,10,30,200,msg->hWnd,(HMENU)MY_BAR,hInstance,NULL); if ( !hCtrl ) return 1; SetScrollRangeID(msg->hWnd,MY_BAR ,MIN_BAR, MAX_BAR,TRUE); SetScrollRangeID(msg->hWnd,SB_VERT,MIN_BAR,2*MAX_BAR,TRUE); SetScrollRangeID(msg->hWnd,SB_HORZ,MIN_BAR,3*MAX_BAR,TRUE); return 0; } static EVENT WM_paint(tMSGParam *msg) /* # 1 # */ { TextOut(msg->hDC, 10, 10, "Hello World!",12); return 0; } static EVENT WM_command_MY_BUTTON(tMSGParam *msg) { int value = (int)GetDlgItemInt(msg->hWnd,MY_STATIC,NULL,TRUE); SetDlgItemInt(msg->hWnd,MY_STATIC,++value,TRUE); SetScrollPosID(msg->hWnd,MY_BAR,value,TRUE); return 0; } static EVENT WM_command_MY_EDIT__EN_CHANGE(tMSGParam *msg) { return WM_command_MY_BUTTON(msg); } static EVENT WM_command_MY_EDIT__EN_KILLFOCUS(tMSGParam *msg) { char svalue[20]; GetDlgItemText(msg->hWnd,MY_EDIT,svalue,sizeof(svalue)); SetWindowText(msg->hWnd,svalue); return 0; } static EVENT WM_scroll_MY_BAR(tMSGParam *msg) /* Omaan liukuun koskettu */ { int value = SetNewScrollPos(msg,10,TRUE); SetDlgItemInt(msg->hWnd,MY_STATIC,value,TRUE); SendScrollPosID(msg->hWnd,SB_VERT,value); return 0; } static EVENT WM_scroll(tMSGParam *msg) /* Kaikki muut liut */ { int value = SetNewScrollPos(msg,20,TRUE); SetDlgItemInt(msg->hWnd,MY_BARS+msg->id,value,TRUE); SendScrollPosID(msg->hWnd,MY_BAR,value); return 0; } /***************************************************************************/ static tMSGEntry MsgTbl[] = { EV_HANDLE_WM_DESTROY, { WM_CREATE , DoC , DoC , WM_create }, /*a*/ { WM_PAINT , DoC , DoC , WM_paint, 1 }, /*a*/ { WM_COMMAND , MY_BUTTON , DoC , WM_command_MY_BUTTON }, /*a*/ { WM_COMMAND , MY_EDIT , EN_CHANGE , WM_command_MY_EDIT__EN_CHANGE }, /*a*/ { WM_COMMAND , MY_EDIT , EN_KILLFOCUS , WM_command_MY_EDIT__EN_KILLFOCUS }, /*a*/ { WM_SCROLL , MY_BAR , DoC , WM_scroll_MY_BAR }, /*a*/ { WM_SCROLL , DoC , DoC , WM_scroll }, /*a*/ { 0 } };