Mercurial > dwindows
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 { |