Mercurial > dwindows
diff win/dw.c @ 1658:6fe1e91da477
Added DW_POINTER() macro for casting parameters to (void *)
Fixed issues with calculating buttons sizes with icons instead of bitmaps on OS/2 and Windows.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 16 Apr 2012 15:43:43 +0000 |
parents | 3d4066aab4e0 |
children | d06255e46ce2 |
line wrap: on
line diff
--- a/win/dw.c Tue Apr 10 21:19:11 2012 +0000 +++ b/win/dw.c Mon Apr 16 15:43:43 2012 +0000 @@ -3420,8 +3420,6 @@ || !_dw_composition || !(GetWindowLongPtr(_toplevel_window(hwnd), GWL_EXSTYLE) & WS_EX_LAYERED)) return _colorwndproc(hwnd, msg, mp1, mp2); - dw_debug("Parentcinfo %x parentcinfo->back %d\n", (int)parentcinfo, parentcinfo->back); - pOldProc = cinfo->pOldProc; switch(msg) @@ -4550,6 +4548,7 @@ TCHAR tmpbuf[100] = {0}; static char testtext[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; HBITMAP hbm = 0; + HICON hic = 0; GetClassName(handle, tmpbuf, 99); @@ -4565,10 +4564,25 @@ /* Attempt to get bitmap from classes that can have them */ if(_tcsnicmp(tmpbuf, STATICCLASSNAME, _tcslen(STATICCLASSNAME)+1) == 0) - hbm = (HBITMAP)SendMessage(handle, STM_GETIMAGE, IMAGE_BITMAP, 0); + { + if(!(hbm = (HBITMAP)SendMessage(handle, STM_GETIMAGE, IMAGE_BITMAP, 0))) + hic = (HICON)SendMessage(handle, STM_GETIMAGE, IMAGE_ICON, 0); + } if(_tcsnicmp(tmpbuf, BUTTONCLASSNAME, _tcslen(BUTTONCLASSNAME)+1) == 0) - hbm = (HBITMAP)SendMessage(handle, BM_GETIMAGE, IMAGE_BITMAP, 0); + { + if(!(hbm = (HBITMAP)SendMessage(handle, BM_GETIMAGE, IMAGE_BITMAP, 0))) + hic = (HICON)SendMessage(handle, BM_GETIMAGE, IMAGE_ICON, 0); + } + /* If we got an icon, pull out the internal bitmap */ + if(hic && !hbm) + { + ICONINFO ii; + + if(GetIconInfo(hic, &ii)) + hbm = ii.hbmMask ? ii.hbmMask : ii.hbmColor; + } + /* If we got an image... set the sizes appropriately */ if(hbm) { @@ -6130,8 +6144,8 @@ { HWND tmp; ColorInfo *cinfo = calloc(1, sizeof(ColorInfo)); - HBITMAP hbitmap = LoadBitmap(DWInstance, MAKEINTRESOURCE(id)); - HICON icon = LoadImage(DWInstance, MAKEINTRESOURCE(id), IMAGE_ICON, 0, 0, LR_SHARED); + HICON icon = LoadImage(DWInstance, MAKEINTRESOURCE(id), IMAGE_ICON, 0, 0, 0); + HBITMAP hbitmap = icon ? 0 : LoadBitmap(DWInstance, MAKEINTRESOURCE(id)); tmp = CreateWindow(BUTTONCLASSNAME, NULL,