comparison win/dw.c @ 204:098ed34d41fb

The basics of the new scrollbar code on Windows, and dw_main_iteration().
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 01 Feb 2003 08:00:38 +0000
parents ae28c5f2fe0e
children 85f25e8c1b1e
comparison
equal deleted inserted replaced
203:e0beea487e8f 204:098ed34d41fb
1505 case WM_HSCROLL: 1505 case WM_HSCROLL:
1506 case WM_VSCROLL: 1506 case WM_VSCROLL:
1507 { 1507 {
1508 char tmpbuf[100]; 1508 char tmpbuf[100];
1509 HWND handle = (HWND)mp2; 1509 HWND handle = (HWND)mp2;
1510 int (*valuechangefunc)(HWND, int, void *) = tmp->signalfunction;
1510 1511
1511 GetClassName(handle, tmpbuf, 99); 1512 GetClassName(handle, tmpbuf, 99);
1512 1513
1513 if(strnicmp(tmpbuf, TRACKBAR_CLASS, strlen(TRACKBAR_CLASS)+1)==0) 1514 if(strnicmp(tmpbuf, TRACKBAR_CLASS, strlen(TRACKBAR_CLASS)+1)==0)
1514 { 1515 {
1515 int (*valuechangefunc)(HWND, int, void *) = tmp->signalfunction;
1516 1516
1517 if(handle == tmp->window) 1517 if(handle == tmp->window)
1518 { 1518 {
1519 int value = (int)SendMessage(handle, TBM_GETPOS, 0, 0); 1519 int value = (int)SendMessage(handle, TBM_GETPOS, 0, 0);
1520 int max = (int)SendMessage(handle, TBM_GETRANGEMAX, 0, 0); 1520 int max = (int)SendMessage(handle, TBM_GETRANGEMAX, 0, 0);
1525 else 1525 else
1526 result = valuechangefunc(tmp->window, value, tmp->data); 1526 result = valuechangefunc(tmp->window, value, tmp->data);
1527 tmp = NULL; 1527 tmp = NULL;
1528 } 1528 }
1529 } 1529 }
1530 else if(strnicmp(tmpbuf, SCROLLBARCLASSNAME, strlen(SCROLLBARCLASSNAME)+1)==0)
1531 {
1532 if(handle == tmp->window && LOWORD(mp1) == SB_THUMBTRACK)
1533 {
1534 int value = (int)HIWORD(mp1);
1535
1536 dw_scrollbar_set_pos(tmp->window, value);
1537 result = valuechangefunc(tmp->window, value, tmp->data);
1538 tmp = NULL;
1539 }
1540 }
1530 } 1541 }
1531 break; 1542 break;
1532 } 1543 }
1533 } 1544 }
1534 if(tmp) 1545 if(tmp)
1607 1618
1608 if(num > -1 && array && array[num]) 1619 if(num > -1 && array && array[num])
1609 SetParent(array[num]->hwnd, tem->hwndFrom); 1620 SetParent(array[num]->hwnd, tem->hwndFrom);
1610 1621
1611 _resize_notebook_page(tem->hwndFrom, num); 1622 _resize_notebook_page(tem->hwndFrom, num);
1623 }
1624 }
1625 break;
1626 case WM_HSCROLL:
1627 case WM_VSCROLL:
1628 {
1629 HWND handle = (HWND)mp2;
1630
1631 if(dw_window_get_data(handle, "_dw_scrollbar") && LOWORD(mp1) == SB_THUMBTRACK)
1632 {
1633 int value = (int)HIWORD(mp1);
1634 dw_scrollbar_set_pos(handle, value);
1612 } 1635 }
1613 } 1636 }
1614 break; 1637 break;
1615 case WM_GETMINMAXINFO: 1638 case WM_GETMINMAXINFO:
1616 { 1639 {
2952 { 2975 {
2953 MSG msg; 2976 MSG msg;
2954 2977
2955 _dwtid = dw_thread_id(); 2978 _dwtid = dw_thread_id();
2956 2979
2957 while (GetMessage(&msg, NULL, 0, 0)) 2980 while(GetMessage(&msg, NULL, 0, 0))
2958 { 2981 {
2959 if(msg.hwnd == NULL && msg.message == WM_TIMER) 2982 if(msg.hwnd == NULL && msg.message == WM_TIMER)
2960 _wndproc(msg.hwnd, msg.message, msg.wParam, msg.lParam); 2983 _wndproc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
2961 TranslateMessage(&msg); 2984 TranslateMessage(&msg);
2962 DispatchMessage(&msg); 2985 DispatchMessage(&msg);
2983 TranslateMessage(&msg); 3006 TranslateMessage(&msg);
2984 DispatchMessage(&msg); 3007 DispatchMessage(&msg);
2985 } 3008 }
2986 else 3009 else
2987 Sleep(1); 3010 Sleep(1);
3011 }
3012 }
3013
3014 /*
3015 * Processes a single message iteration and returns.
3016 */
3017 void API dw_main_iteration(void)
3018 {
3019 MSG msg;
3020
3021 _dwtid = dw_thread_id();
3022
3023 if(GetMessage(&msg, NULL, 0, 0))
3024 {
3025 if(msg.hwnd == NULL && msg.message == WM_TIMER)
3026 _wndproc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
3027 TranslateMessage(&msg);
3028 DispatchMessage(&msg);
2988 } 3029 }
2989 } 3030 }
2990 3031
2991 /* 3032 /*
2992 * Free's memory allocated by dynamic windows. 3033 * Free's memory allocated by dynamic windows.
3292 } 3333 }
3293 else 3334 else
3294 { 3335 {
3295 cinfo = calloc(1, sizeof(ColorInfo)); 3336 cinfo = calloc(1, sizeof(ColorInfo));
3296 cinfo->fore = cinfo->back = -1; 3337 cinfo->fore = cinfo->back = -1;
3297 cinfo->buddy = 0;
3298 3338
3299 strcpy(cinfo->fontname, fontname); 3339 strcpy(cinfo->fontname, fontname);
3300 3340
3301 cinfo->pOldProc = SubclassWindow(handle, _colorwndproc); 3341 cinfo->pOldProc = SubclassWindow(handle, _colorwndproc);
3302 SetWindowLong(handle, GWL_USERDATA, (ULONG)cinfo); 3342 SetWindowLong(handle, GWL_USERDATA, (ULONG)cinfo);
3351 { 3391 {
3352 cinfo = calloc(1, sizeof(ColorInfo)); 3392 cinfo = calloc(1, sizeof(ColorInfo));
3353 3393
3354 cinfo->fore = fore; 3394 cinfo->fore = fore;
3355 cinfo->back = back; 3395 cinfo->back = back;
3356 cinfo->buddy = 0;
3357 3396
3358 cinfo->pOldProc = SubclassWindow(handle, _colorwndproc); 3397 cinfo->pOldProc = SubclassWindow(handle, _colorwndproc);
3359 SetWindowLong(handle, GWL_USERDATA, (ULONG)cinfo); 3398 SetWindowLong(handle, GWL_USERDATA, (ULONG)cinfo);
3360 } 3399 }
3361 InvalidateRgn(handle, NULL, TRUE); 3400 InvalidateRgn(handle, NULL, TRUE);
3921 DWInstance, 3960 DWInstance,
3922 NULL); 3961 NULL);
3923 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo)); 3962 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo));
3924 3963
3925 cinfo->back = cinfo->fore = -1; 3964 cinfo->back = cinfo->fore = -1;
3926 cinfo->buddy = 0;
3927 3965
3928 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc); 3966 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc);
3929 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo); 3967 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo);
3930 dw_window_set_font(tmp, DefaultFont); 3968 dw_window_set_font(tmp, DefaultFont);
3931 return tmp; 3969 return tmp;
3951 DWInstance, 3989 DWInstance,
3952 NULL); 3990 NULL);
3953 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo)); 3991 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo));
3954 3992
3955 cinfo->back = cinfo->fore = -1; 3993 cinfo->back = cinfo->fore = -1;
3956 cinfo->buddy = 0;
3957 3994
3958 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc); 3995 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc);
3959 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo); 3996 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo);
3960 dw_window_set_font(tmp, DefaultFont); 3997 dw_window_set_font(tmp, DefaultFont);
3961 return tmp; 3998 return tmp;
4174 DWInstance, 4211 DWInstance,
4175 NULL); 4212 NULL);
4176 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo)); 4213 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo));
4177 4214
4178 cinfo->back = cinfo->fore = -1; 4215 cinfo->back = cinfo->fore = -1;
4179 cinfo->buddy = 0;
4180 cinfo->user = 0;
4181 4216
4182 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc); 4217 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc);
4183 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo); 4218 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo);
4184 SendMessage(tmp, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(0, increments-1)); 4219 SendMessage(tmp, TBM_SETRANGE, (WPARAM)FALSE, (LPARAM)MAKELONG(0, increments-1));
4185 return tmp; 4220 return tmp;
4192 * increments: Number of increments available. 4227 * increments: Number of increments available.
4193 * id: An ID to be used with WinWindowFromID() or 0L. 4228 * id: An ID to be used with WinWindowFromID() or 0L.
4194 */ 4229 */
4195 HWND API dw_scrollbar_new(int vertical, int increments, ULONG id) 4230 HWND API dw_scrollbar_new(int vertical, int increments, ULONG id)
4196 { 4231 {
4197 HWND tmp = CreateWindow("SCROLLBAR", 4232 HWND tmp = CreateWindow(SCROLLBARCLASSNAME,
4198 "", 4233 "",
4199 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | 4234 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE |
4200 (vertical ? SBS_VERT : SBS_HORZ), 4235 (vertical ? SBS_VERT : SBS_HORZ),
4201 0,0,2000,1000, 4236 0,0,2000,1000,
4202 DW_HWND_OBJECT, 4237 DW_HWND_OBJECT,
4203 (HMENU)id, 4238 (HMENU)id,
4204 DWInstance, 4239 DWInstance,
4205 NULL); 4240 NULL);
4241 ColorInfo *cinfo = calloc(1, sizeof(ColorInfo));
4242
4243 cinfo->back = cinfo->fore = -1;
4244
4245 cinfo->pOldProc = SubclassWindow(tmp, _colorwndproc);
4246 SetWindowLong(tmp, GWL_USERDATA, (ULONG)cinfo);
4247 dw_window_set_data(tmp, "_dw_scrollbar", (void *)1);
4206 return tmp; 4248 return tmp;
4207 } 4249 }
4208 4250
4209 /* 4251 /*
4210 * Create a new percent bar window (widget) to be packed. 4252 * Create a new percent bar window (widget) to be packed.
5339 /* 5381 /*
5340 * Sets the scrollbar range. 5382 * Sets the scrollbar range.
5341 * Parameters: 5383 * Parameters:
5342 * handle: Handle to the scrollbar to be set. 5384 * handle: Handle to the scrollbar to be set.
5343 * range: Maximum range value. 5385 * range: Maximum range value.
5344 */ 5386 * visible: Visible area relative to the range.
5345 void API dw_scrollbar_set_range(HWND handle, unsigned int range) 5387 */
5346 { 5388 void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible)
5347 SendMessage(handle, SBM_SETRANGE, 0, (LPARAM)range); 5389 {
5390 SCROLLINFO si;
5391
5392 si.cbSize = sizeof(SCROLLINFO);
5393 si.fMask = SIF_RANGE | SIF_PAGE;
5394 si.nMin = 0;
5395 si.nMax = range;
5396 si.nPage = visible;
5397 SendMessage(handle, SBM_SETSCROLLINFO, (WPARAM)TRUE, (LPARAM)&si);
5348 } 5398 }
5349 5399
5350 /* 5400 /*
5351 * Sets the spinbutton value. 5401 * Sets the spinbutton value.
5352 * Parameters: 5402 * Parameters:
7346 { 7396 {
7347 if(!dataname) 7397 if(!dataname)
7348 return; 7398 return;
7349 7399
7350 cinfo = calloc(1, sizeof(ColorInfo)); 7400 cinfo = calloc(1, sizeof(ColorInfo));
7401 cinfo->fore = cinfo->back = -1;
7351 SetWindowLong(window, GWL_USERDATA, (LONG)cinfo); 7402 SetWindowLong(window, GWL_USERDATA, (LONG)cinfo);
7352 } 7403 }
7353 7404
7354 if(cinfo) 7405 if(cinfo)
7355 { 7406 {