comparison win/dw.c @ 107:cd0e5cf92f6a

Rewrote the Windows packing code so it is more like OS/2 to improve window redrawing performance. Fixed problems with the tree widget on unix. lastselect needs to be set on the root tree widget... not the scrolled window!
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 17 Sep 2002 17:33:06 +0000
parents 4b6799f3dbbc
children 94d273843a41
comparison
equal deleted inserted replaced
106:4b6799f3dbbc 107:cd0e5cf92f6a
3361 newbox->grouphwnd = (HWND)NULL; 3361 newbox->grouphwnd = (HWND)NULL;
3362 newbox->cinfo.fore = newbox->cinfo.back = -1; 3362 newbox->cinfo.fore = newbox->cinfo.back = -1;
3363 3363
3364 hwndframe = CreateWindow(FRAMECLASSNAME, 3364 hwndframe = CreateWindow(FRAMECLASSNAME,
3365 "", 3365 "",
3366 WS_CHILD | WS_CLIPCHILDREN, 3366 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
3367 0,0,2000,1000, 3367 0,0,2000,1000,
3368 DW_HWND_OBJECT, 3368 DW_HWND_OBJECT,
3369 NULL, 3369 NULL,
3370 NULL, 3370 NULL,
3371 NULL); 3371 NULL);
3394 newbox->count = 0; 3394 newbox->count = 0;
3395 newbox->cinfo.fore = newbox->cinfo.back = -1; 3395 newbox->cinfo.fore = newbox->cinfo.back = -1;
3396 3396
3397 hwndframe = CreateWindow(FRAMECLASSNAME, 3397 hwndframe = CreateWindow(FRAMECLASSNAME,
3398 "", 3398 "",
3399 WS_CHILD, 3399 WS_VISIBLE | WS_CHILD,
3400 0,0,2000,1000, 3400 0,0,2000,1000,
3401 DW_HWND_OBJECT, 3401 DW_HWND_OBJECT,
3402 NULL, 3402 NULL,
3403 NULL, 3403 NULL,
3404 NULL); 3404 NULL);
3431 ccs.hWindowMenu = NULL; 3431 ccs.hWindowMenu = NULL;
3432 ccs.idFirstChild = 0; 3432 ccs.idFirstChild = 0;
3433 3433
3434 hwndframe = CreateWindow("MDICLIENT", 3434 hwndframe = CreateWindow("MDICLIENT",
3435 "", 3435 "",
3436 WS_CHILD | WS_CLIPSIBLINGS, 3436 WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
3437 0,0,2000,1000, 3437 0,0,2000,1000,
3438 DW_HWND_OBJECT, 3438 DW_HWND_OBJECT,
3439 NULL, 3439 NULL,
3440 DWInstance, 3440 DWInstance,
3441 &ccs); 3441 &ccs);
3449 */ 3449 */
3450 HWND dw_bitmap_new(ULONG id) 3450 HWND dw_bitmap_new(ULONG id)
3451 { 3451 {
3452 return CreateWindow(STATICCLASSNAME, 3452 return CreateWindow(STATICCLASSNAME,
3453 "", 3453 "",
3454 SS_BITMAP | WS_CHILD | WS_CLIPCHILDREN, 3454 SS_BITMAP | WS_VISIBLE |
3455 WS_CHILD | WS_CLIPCHILDREN,
3455 0,0,2000,1000, 3456 0,0,2000,1000,
3456 DW_HWND_OBJECT, 3457 DW_HWND_OBJECT,
3457 NULL, 3458 NULL,
3458 NULL, 3459 NULL,
3459 NULL); 3460 NULL);
3474 if(!top) 3475 if(!top)
3475 flags = TCS_BOTTOM; 3476 flags = TCS_BOTTOM;
3476 3477
3477 tmp = CreateWindow(WC_TABCONTROL, 3478 tmp = CreateWindow(WC_TABCONTROL,
3478 "", 3479 "",
3479 WS_CHILD | WS_CLIPCHILDREN, 3480 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
3480 0,0,2000,1000, 3481 0,0,2000,1000,
3481 DW_HWND_OBJECT, 3482 DW_HWND_OBJECT,
3482 NULL, 3483 NULL,
3483 NULL, 3484 NULL,
3484 NULL); 3485 NULL);
3646 */ 3647 */
3647 HWND dw_container_new(ULONG id) 3648 HWND dw_container_new(ULONG id)
3648 { 3649 {
3649 HWND tmp = CreateWindow(WC_LISTVIEW, 3650 HWND tmp = CreateWindow(WC_LISTVIEW,
3650 "", 3651 "",
3651 WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS | 3652 WS_VISIBLE | WS_CHILD |
3653 LVS_REPORT | LVS_SHOWSELALWAYS |
3652 LVS_SHAREIMAGELISTS | WS_BORDER | 3654 LVS_SHAREIMAGELISTS | WS_BORDER |
3653 WS_CLIPCHILDREN, 3655 WS_CLIPCHILDREN,
3654 0,0,2000,1000, 3656 0,0,2000,1000,
3655 DW_HWND_OBJECT, 3657 DW_HWND_OBJECT,
3656 (HMENU)id, 3658 (HMENU)id,
3680 */ 3682 */
3681 HWND dw_tree_new(ULONG id) 3683 HWND dw_tree_new(ULONG id)
3682 { 3684 {
3683 HWND tmp = CreateWindow(WC_TREEVIEW, 3685 HWND tmp = CreateWindow(WC_TREEVIEW,
3684 "", 3686 "",
3685 WS_CHILD | TVS_HASLINES | TVS_SHOWSELALWAYS | 3687 WS_VISIBLE | WS_CHILD |
3688 TVS_HASLINES | TVS_SHOWSELALWAYS |
3686 TVS_HASBUTTONS | TVS_LINESATROOT | 3689 TVS_HASBUTTONS | TVS_LINESATROOT |
3687 WS_BORDER | WS_CLIPCHILDREN, 3690 WS_BORDER | WS_CLIPCHILDREN,
3688 0,0,2000,1000, 3691 0,0,2000,1000,
3689 DW_HWND_OBJECT, 3692 DW_HWND_OBJECT,
3690 (HMENU)id, 3693 (HMENU)id,
3744 */ 3747 */
3745 HWND dw_text_new(char *text, ULONG id) 3748 HWND dw_text_new(char *text, ULONG id)
3746 { 3749 {
3747 HWND tmp = CreateWindow(STATICCLASSNAME, 3750 HWND tmp = CreateWindow(STATICCLASSNAME,
3748 text, 3751 text,
3749 BS_TEXT | WS_CHILD | WS_CLIPCHILDREN, 3752 BS_TEXT | WS_VISIBLE |
3753 WS_CHILD | WS_CLIPCHILDREN,
3750 0,0,2000,1000, 3754 0,0,2000,1000,
3751 DW_HWND_OBJECT, 3755 DW_HWND_OBJECT,
3752 (HMENU)id, 3756 (HMENU)id,
3753 NULL, 3757 NULL,
3754 NULL); 3758 NULL);
3764 */ 3768 */
3765 HWND dw_status_text_new(char *text, ULONG id) 3769 HWND dw_status_text_new(char *text, ULONG id)
3766 { 3770 {
3767 HWND tmp = CreateWindow(STATICCLASSNAME, 3771 HWND tmp = CreateWindow(STATICCLASSNAME,
3768 text, 3772 text,
3769 BS_TEXT | WS_CHILD | WS_CLIPCHILDREN, 3773 BS_TEXT | WS_VISIBLE |
3774 WS_CHILD | WS_CLIPCHILDREN,
3770 0,0,2000,1000, 3775 0,0,2000,1000,
3771 DW_HWND_OBJECT, 3776 DW_HWND_OBJECT,
3772 (HMENU)id, 3777 (HMENU)id,
3773 NULL, 3778 NULL,
3774 NULL); 3779 NULL);
3786 { 3791 {
3787 3792
3788 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, 3793 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
3789 EDITCLASSNAME, 3794 EDITCLASSNAME,
3790 "", 3795 "",
3791 WS_BORDER | 3796 WS_VISIBLE | WS_BORDER |
3792 WS_VSCROLL | ES_MULTILINE | 3797 WS_VSCROLL | ES_MULTILINE |
3793 ES_WANTRETURN | WS_CHILD | 3798 ES_WANTRETURN | WS_CHILD |
3794 WS_CLIPCHILDREN, 3799 WS_CLIPCHILDREN,
3795 0,0,2000,1000, 3800 0,0,2000,1000,
3796 DW_HWND_OBJECT, 3801 DW_HWND_OBJECT,
3824 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, 3829 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
3825 EDITCLASSNAME, 3830 EDITCLASSNAME,
3826 text, 3831 text,
3827 ES_WANTRETURN | WS_CHILD | 3832 ES_WANTRETURN | WS_CHILD |
3828 WS_BORDER | ES_AUTOHSCROLL | 3833 WS_BORDER | ES_AUTOHSCROLL |
3829 WS_CLIPCHILDREN, 3834 WS_VISIBLE | WS_CLIPCHILDREN,
3830 0,0,2000,1000, 3835 0,0,2000,1000,
3831 DW_HWND_OBJECT, 3836 DW_HWND_OBJECT,
3832 (HMENU)id, 3837 (HMENU)id,
3833 NULL, 3838 NULL,
3834 NULL); 3839 NULL);
3853 { 3858 {
3854 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, 3859 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
3855 EDITCLASSNAME, 3860 EDITCLASSNAME,
3856 text, 3861 text,
3857 ES_WANTRETURN | WS_CHILD | 3862 ES_WANTRETURN | WS_CHILD |
3858 ES_PASSWORD | WS_BORDER | 3863 ES_PASSWORD | WS_BORDER | WS_VISIBLE |
3859 ES_AUTOHSCROLL | WS_CLIPCHILDREN, 3864 ES_AUTOHSCROLL | WS_CLIPCHILDREN,
3860 0,0,2000,1000, 3865 0,0,2000,1000,
3861 DW_HWND_OBJECT, 3866 DW_HWND_OBJECT,
3862 (HMENU)id, 3867 (HMENU)id,
3863 NULL, 3868 NULL,
3895 HWND dw_combobox_new(char *text, ULONG id) 3900 HWND dw_combobox_new(char *text, ULONG id)
3896 { 3901 {
3897 HWND tmp = CreateWindow(COMBOBOXCLASSNAME, 3902 HWND tmp = CreateWindow(COMBOBOXCLASSNAME,
3898 text, 3903 text,
3899 WS_CHILD | CBS_DROPDOWN | WS_VSCROLL | 3904 WS_CHILD | CBS_DROPDOWN | WS_VSCROLL |
3900 WS_CLIPCHILDREN, 3905 WS_CLIPCHILDREN | WS_VISIBLE,
3901 0,0,2000,1000, 3906 0,0,2000,1000,
3902 DW_HWND_OBJECT, 3907 DW_HWND_OBJECT,
3903 (HMENU)id, 3908 (HMENU)id,
3904 NULL, 3909 NULL,
3905 NULL); 3910 NULL);
3936 { 3941 {
3937 BubbleButton *bubble = calloc(1, sizeof(BubbleButton)); 3942 BubbleButton *bubble = calloc(1, sizeof(BubbleButton));
3938 3943
3939 HWND tmp = CreateWindow(BUTTONCLASSNAME, 3944 HWND tmp = CreateWindow(BUTTONCLASSNAME,
3940 text, 3945 text,
3941 WS_CHILD | BS_PUSHBUTTON | WS_CLIPCHILDREN, 3946 WS_CHILD | BS_PUSHBUTTON |
3947 WS_VISIBLE | WS_CLIPCHILDREN,
3942 0,0,2000,1000, 3948 0,0,2000,1000,
3943 DW_HWND_OBJECT, 3949 DW_HWND_OBJECT,
3944 (HMENU)id, 3950 (HMENU)id,
3945 NULL, 3951 NULL,
3946 NULL); 3952 NULL);
3967 HBITMAP hbitmap = LoadBitmap(DWInstance, MAKEINTRESOURCE(id)); 3973 HBITMAP hbitmap = LoadBitmap(DWInstance, MAKEINTRESOURCE(id));
3968 3974
3969 tmp = CreateWindow(BUTTONCLASSNAME, 3975 tmp = CreateWindow(BUTTONCLASSNAME,
3970 "", 3976 "",
3971 WS_CHILD | BS_PUSHBUTTON | 3977 WS_CHILD | BS_PUSHBUTTON |
3972 BS_BITMAP | WS_CLIPCHILDREN, 3978 BS_BITMAP | WS_CLIPCHILDREN |
3979 WS_VISIBLE,
3973 0,0,2000,1000, 3980 0,0,2000,1000,
3974 DW_HWND_OBJECT, 3981 DW_HWND_OBJECT,
3975 (HMENU)id, 3982 (HMENU)id,
3976 NULL, 3983 NULL,
3977 NULL); 3984 NULL);
3999 { 4006 {
4000 ULONG *data = malloc(sizeof(ULONG)); 4007 ULONG *data = malloc(sizeof(ULONG));
4001 HWND buddy = CreateWindowEx(WS_EX_CLIENTEDGE, 4008 HWND buddy = CreateWindowEx(WS_EX_CLIENTEDGE,
4002 EDITCLASSNAME, 4009 EDITCLASSNAME,
4003 text, 4010 text,
4004 WS_CHILD | WS_BORDER | 4011 WS_CHILD | WS_BORDER | WS_VISIBLE |
4005 ES_NUMBER | WS_CLIPCHILDREN, 4012 ES_NUMBER | WS_CLIPCHILDREN,
4006 0,0,2000,1000, 4013 0,0,2000,1000,
4007 DW_HWND_OBJECT, 4014 DW_HWND_OBJECT,
4008 NULL, 4015 NULL,
4009 NULL, 4016 NULL,
4011 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, 4018 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
4012 UPDOWN_CLASS, 4019 UPDOWN_CLASS,
4013 NULL, 4020 NULL,
4014 WS_CHILD | UDS_ALIGNRIGHT | WS_BORDER | 4021 WS_CHILD | UDS_ALIGNRIGHT | WS_BORDER |
4015 UDS_ARROWKEYS | UDS_SETBUDDYINT | 4022 UDS_ARROWKEYS | UDS_SETBUDDYINT |
4016 UDS_WRAP | UDS_NOTHOUSANDS, 4023 UDS_WRAP | UDS_NOTHOUSANDS | WS_VISIBLE,
4017 0,0,2000,1000, 4024 0,0,2000,1000,
4018 DW_HWND_OBJECT, 4025 DW_HWND_OBJECT,
4019 (HMENU)id, 4026 (HMENU)id,
4020 NULL, 4027 NULL,
4021 NULL); 4028 NULL);
4046 HWND dw_radiobutton_new(char *text, ULONG id) 4053 HWND dw_radiobutton_new(char *text, ULONG id)
4047 { 4054 {
4048 HWND tmp = CreateWindow(BUTTONCLASSNAME, 4055 HWND tmp = CreateWindow(BUTTONCLASSNAME,
4049 text, 4056 text,
4050 WS_CHILD | BS_AUTORADIOBUTTON | 4057 WS_CHILD | BS_AUTORADIOBUTTON |
4051 WS_CLIPCHILDREN, 4058 WS_CLIPCHILDREN | WS_VISIBLE,
4052 0,0,2000,1000, 4059 0,0,2000,1000,
4053 DW_HWND_OBJECT, 4060 DW_HWND_OBJECT,
4054 (HMENU)id, 4061 (HMENU)id,
4055 NULL, 4062 NULL,
4056 NULL); 4063 NULL);
4074 */ 4081 */
4075 HWND dw_slider_new(int vertical, int increments, ULONG id) 4082 HWND dw_slider_new(int vertical, int increments, ULONG id)
4076 { 4083 {
4077 HWND tmp = CreateWindow(TRACKBAR_CLASS, 4084 HWND tmp = CreateWindow(TRACKBAR_CLASS,
4078 "", 4085 "",
4079 WS_CHILD | WS_CLIPCHILDREN | 4086 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE |
4080 (vertical ? TBS_VERT : TBS_HORZ), 4087 (vertical ? TBS_VERT : TBS_HORZ),
4081 0,0,2000,1000, 4088 0,0,2000,1000,
4082 DW_HWND_OBJECT, 4089 DW_HWND_OBJECT,
4083 NULL, 4090 NULL,
4084 NULL, 4091 NULL,
4102 */ 4109 */
4103 HWND dw_percent_new(ULONG id) 4110 HWND dw_percent_new(ULONG id)
4104 { 4111 {
4105 return CreateWindow(PROGRESS_CLASS, 4112 return CreateWindow(PROGRESS_CLASS,
4106 "", 4113 "",
4107 WS_CHILD | WS_CLIPCHILDREN, 4114 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
4108 0,0,2000,1000, 4115 0,0,2000,1000,
4109 DW_HWND_OBJECT, 4116 DW_HWND_OBJECT,
4110 NULL, 4117 NULL,
4111 NULL, 4118 NULL,
4112 NULL); 4119 NULL);
4122 { 4129 {
4123 BubbleButton *bubble = calloc(1, sizeof(BubbleButton)); 4130 BubbleButton *bubble = calloc(1, sizeof(BubbleButton));
4124 HWND tmp = CreateWindow(BUTTONCLASSNAME, 4131 HWND tmp = CreateWindow(BUTTONCLASSNAME,
4125 text, 4132 text,
4126 WS_CHILD | BS_AUTOCHECKBOX | 4133 WS_CHILD | BS_AUTOCHECKBOX |
4127 BS_TEXT | WS_CLIPCHILDREN, 4134 BS_TEXT | WS_CLIPCHILDREN | WS_VISIBLE,
4128 0,0,2000,1000, 4135 0,0,2000,1000,
4129 DW_HWND_OBJECT, 4136 DW_HWND_OBJECT,
4130 NULL, 4137 NULL,
4131 NULL, 4138 NULL,
4132 NULL); 4139 NULL);
4148 */ 4155 */
4149 HWND dw_listbox_new(ULONG id, int multi) 4156 HWND dw_listbox_new(ULONG id, int multi)
4150 { 4157 {
4151 HWND tmp = CreateWindow(LISTBOXCLASSNAME, 4158 HWND tmp = CreateWindow(LISTBOXCLASSNAME,
4152 "", 4159 "",
4153 LBS_NOINTEGRALHEIGHT | WS_CHILD | LBS_HASSTRINGS | 4160 WS_VISIBLE | LBS_NOINTEGRALHEIGHT |
4161 WS_CHILD | LBS_HASSTRINGS |
4154 LBS_NOTIFY | WS_BORDER | WS_CLIPCHILDREN | 4162 LBS_NOTIFY | WS_BORDER | WS_CLIPCHILDREN |
4155 WS_VSCROLL | (multi ? LBS_MULTIPLESEL : 0) , 4163 WS_VSCROLL | (multi ? LBS_MULTIPLESEL : 0) ,
4156 0,0,2000,1000, 4164 0,0,2000,1000,
4157 DW_HWND_OBJECT, 4165 DW_HWND_OBJECT,
4158 NULL, 4166 NULL,
4327 free(thisitem); 4335 free(thisitem);
4328 4336
4329 thisbox->count++; 4337 thisbox->count++;
4330 4338
4331 SetParent(item, box); 4339 SetParent(item, box);
4332 ShowWindow(item, SW_SHOW);
4333 if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0) 4340 if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0)
4334 { 4341 {
4335 ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA); 4342 ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA);
4336 4343
4337 if(cinfo) 4344 if(cinfo)
6065 HWND dw_render_new(unsigned long id) 6072 HWND dw_render_new(unsigned long id)
6066 { 6073 {
6067 Box *newbox = calloc(sizeof(Box), 1); 6074 Box *newbox = calloc(sizeof(Box), 1);
6068 HWND tmp = CreateWindow(ObjectClassName, 6075 HWND tmp = CreateWindow(ObjectClassName,
6069 "", 6076 "",
6070 WS_CHILD | WS_CLIPCHILDREN, 6077 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
6071 0,0,2000,1000, 6078 0,0,2000,1000,
6072 DW_HWND_OBJECT, 6079 DW_HWND_OBJECT,
6073 NULL, 6080 NULL,
6074 NULL, 6081 NULL,
6075 NULL); 6082 NULL);
6632 6639
6633 if(thisbox) 6640 if(thisbox)
6634 { 6641 {
6635 HWND tmp = CreateWindow(SplitbarClassName, 6642 HWND tmp = CreateWindow(SplitbarClassName,
6636 "", 6643 "",
6637 WS_CHILD | WS_CLIPCHILDREN, 6644 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
6638 0,0,2000,1000, 6645 0,0,2000,1000,
6639 DW_HWND_OBJECT, 6646 DW_HWND_OBJECT,
6640 NULL, 6647 NULL,
6641 NULL, 6648 NULL,
6642 NULL); 6649 NULL);
6659 6666
6660 if(thisbox) 6667 if(thisbox)
6661 { 6668 {
6662 HWND tmp = CreateWindow(SplitbarClassName, 6669 HWND tmp = CreateWindow(SplitbarClassName,
6663 "", 6670 "",
6664 WS_CHILD | WS_CLIPCHILDREN, 6671 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
6665 0,0,2000,1000, 6672 0,0,2000,1000,
6666 DW_HWND_OBJECT, 6673 DW_HWND_OBJECT,
6667 NULL, 6674 NULL,
6668 NULL, 6675 NULL,
6669 NULL); 6676 NULL);
6731 free(thisitem); 6738 free(thisitem);
6732 6739
6733 thisbox->count++; 6740 thisbox->count++;
6734 6741
6735 SetParent(item, box); 6742 SetParent(item, box);
6736 ShowWindow(item, SW_SHOW);
6737 if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0) 6743 if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0)
6738 { 6744 {
6739 ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA); 6745 ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA);
6740 6746
6741 if(cinfo) 6747 if(cinfo)