Changeset 1525 for trunk/src/user32/static.cpp
- Timestamp:
- Oct 30, 1999, 8:40:49 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/static.cpp
r1433 r1525 1 /* $Id: static.cpp,v 1. 7 1999-10-24 22:56:07 sandervlExp $ */1 /* $Id: static.cpp,v 1.8 1999-10-30 18:40:46 cbratschi Exp $ */ 2 2 /* 3 3 * Static control 4 4 * 5 * Copyright 1999 Christoph Bratschi (ported from WINE)5 * Copyright 1999 Christoph Bratschi 6 6 * 7 7 * Copyright David W. Metcalfe, 1993 8 8 * 9 9 * WINE version: 990923 10 * 11 * Status: complete 12 * Version: 5.00 10 13 */ 11 14 … … 21 24 static void STATIC_PaintIconfn( HWND hwnd, HDC hdc ); 22 25 static void STATIC_PaintBitmapfn( HWND hwnd, HDC hdc ); 26 static void STATIC_PaintMetafilefn(HWND hwnd,HDC hdc); 27 static void STATIC_PaintOwnerDrawfn(HWND hwnd,HDC hdc); 23 28 static void STATIC_PaintEtchedfn( HWND hwnd, HDC hdc ); 24 29 … … 40 45 STATIC_PaintRectfn, /* SS_GRAYFRAME */ 41 46 STATIC_PaintRectfn, /* SS_WHITEFRAME */ 42 NULL, /* Not defined*/47 NULL, /* SS_USERITEM */ 43 48 STATIC_PaintTextfn, /* SS_SIMPLE */ 44 49 STATIC_PaintTextfn, /* SS_LEFTNOWORDWRAP */ 45 NULL,/* SS_OWNERDRAW */50 STATIC_PaintOwnerDrawfn, /* SS_OWNERDRAW */ 46 51 STATIC_PaintBitmapfn, /* SS_BITMAP */ 47 NULL,/* SS_ENHMETAFILE */52 STATIC_PaintMetafilefn, /* SS_ENHMETAFILE */ 48 53 STATIC_PaintEtchedfn, /* SS_ETCHEDHORIZ */ 49 54 STATIC_PaintEtchedfn, /* SS_ETCHEDVERT */ … … 51 56 }; 52 57 58 static void STATIC_ResizeWindow(HWND hwnd,DWORD dwStyle,INT w,INT h) 59 { 60 if (dwStyle & SS_RIGHTJUST) 61 { 62 RECT rect; 63 64 GetWindowRect(hwnd,&rect); 65 SetWindowPos(hwnd,0,rect.right-w,rect.bottom-h,w,h,SWP_NOACTIVATE | SWP_NOZORDER); 66 } else SetWindowPos(hwnd,0,0,0,w,h,SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER); 67 } 53 68 54 69 /*********************************************************************** … … 71 86 infoPtr->hIcon = hicon; 72 87 73 GetIconInfo(hicon,&ii);88 if (!GetIconInfo(hicon,&ii)) return prevIcon; 74 89 GetObjectA(ii.hbmColor,sizeof(BITMAP),(LPVOID)&bmp); 75 90 76 SetWindowPos(hwnd,0,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);91 if (!(dwStyle & (SS_CENTERIMAGE | SS_REALSIZEIMAGE))) STATIC_ResizeWindow(hwnd,dwStyle,bmp.bmWidth,bmp.bmHeight); 77 92 78 93 return prevIcon; … … 98 113 hOldBitmap = infoPtr->hIcon; 99 114 infoPtr->hIcon = hBitmap; 100 if (hBitmap )115 if (hBitmap && !(dwStyle & (SS_CENTERIMAGE | SS_REALSIZEIMAGE))) 101 116 { 102 103 GetObjectA(hBitmap, sizeof(bm), &bm); 104 SetWindowPos( hwnd, 0, 0, 0, bm.bmWidth, bm.bmHeight,105 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);117 BITMAP bm; 118 119 GetObjectA(hBitmap,sizeof(bm),&bm); 120 STATIC_ResizeWindow(hwnd,dwStyle,bm.bmWidth,bm.bmHeight); 106 121 } 122 107 123 return hOldBitmap; 124 } 125 126 static HENHMETAFILE STATIC_SetMetafile(HWND hwnd,HENHMETAFILE hMetafile) 127 { 128 HENHMETAFILE hOldMetafile; 129 130 STATICINFO *infoPtr = (STATICINFO *)GetInfoPtr(hwnd); 131 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 132 133 if ((dwStyle & SS_TYPEMASK) != SS_ENHMETAFILE) return 0; 134 135 hOldMetafile = infoPtr->hIcon; 136 infoPtr->hIcon = hMetafile; 137 138 return hOldMetafile; 108 139 } 109 140 … … 142 173 } 143 174 175 static HBITMAP STATIC_LoadMetafile(HWND hwnd,LPCSTR name) 176 { 177 HENHMETAFILE hMetafile; 178 179 hMetafile = GetEnhMetaFileA(name); //CB: right? 180 181 return hMetafile; 182 } 183 144 184 /* message handler */ 145 185 146 186 LRESULT STATIC_NCCreate(HWND hwnd,WPARAM wParam,LPARAM lParam) 147 187 { 148 CREATESTRUCTA *cs = (CREATESTRUCTA 188 CREATESTRUCTA *cs = (CREATESTRUCTA*)lParam; 149 189 STATICINFO* infoPtr; 150 190 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); … … 166 206 if (style == SS_ICON) 167 207 { 168 if (cs->lpszName) 208 if (cs->lpszName) //CB: is 0 a valid icon id? winhlp32: lpszName = NULL 169 209 { 170 210 if (!HIWORD(cs->lpszName) || cs->lpszName[0]) … … 179 219 return TRUE; 180 220 } 221 if (style == SS_ENHMETAFILE) 222 { 223 if (cs->lpszName) STATIC_SetMetafile(hwnd,STATIC_LoadMetafile(hwnd,cs->lpszName)); 224 return TRUE; 225 } 181 226 if (!HIWORD(cs->lpszName) && (cs->lpszName)) return TRUE; 182 227 … … 213 258 { 214 259 DeleteObject(infoPtr->hIcon); 260 } else if (style == SS_ENHMETAFILE && infoPtr->hIcon) 261 { 262 DeleteEnhMetaFile((HENHMETAFILE)infoPtr->hIcon); 215 263 } 216 264 … … 234 282 LRESULT STATIC_Enable(HWND hwnd,WPARAM wParam,LPARAM lParam) 235 283 { 284 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 285 286 if (dwStyle & SS_NOTIFY) SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),wParam ? STN_ENABLE:STN_DISABLE),hwnd); 287 236 288 InvalidateRect(hwnd,NULL,FALSE); 237 289 … … 258 310 else if (style == SS_BITMAP) 259 311 STATIC_SetBitmap(hwnd,STATIC_LoadBitmap(hwnd,(LPCSTR)lParam)); 312 else if (style == SS_ENHMETAFILE) 313 STATIC_SetMetafile(hwnd,STATIC_LoadMetafile(hwnd,(LPCSTR)lParam)); 260 314 else 261 315 DefWindowProcA(hwnd,WM_SETTEXT,wParam,lParam); … … 274 328 if (style == SS_ICON) return 0; 275 329 if (style == SS_BITMAP) return 0; 330 if (style == SS_ENHMETAFILE) return 0; 276 331 277 332 infoPtr->hFont = (HFONT)wParam; … … 310 365 } 311 366 367 LRESULT STATIC_GetImage(HWND hwnd,WPARAM wParam,LPARAM lParam) 368 { 369 STATICINFO* infoPtr = (STATICINFO*)GetInfoPtr(hwnd); 370 DWORD style = GetWindowLongA(hwnd,GWL_STYLE) & SS_TYPEMASK; 371 372 switch (wParam) 373 { 374 case IMAGE_BITMAP: 375 if (style & SS_BITMAP) return infoPtr->hIcon; 376 break; 377 378 case IMAGE_CURSOR: 379 case IMAGE_ICON: 380 if (style & SS_ICON) return infoPtr->hIcon; 381 break; 382 383 case IMAGE_ENHMETAFILE: 384 if (style & SS_ENHMETAFILE) return infoPtr->hIcon; 385 break; 386 387 default: 388 break; 389 } 390 391 return 0; 392 } 393 312 394 LRESULT STATIC_SetImage(HWND hwnd,WPARAM wParam,LPARAM lParam) 313 395 { 314 LRESULT lResult ;396 LRESULT lResult = 0; 315 397 316 398 switch (wParam) … … 320 402 lResult = STATIC_SetIcon(hwnd,(HICON)lParam); 321 403 break; 404 322 405 case IMAGE_BITMAP: 323 406 lResult = STATIC_SetBitmap(hwnd,(HBITMAP)lParam); 407 break; 408 324 409 case IMAGE_ENHMETAFILE: 325 return 0; //CB: not supported! 410 lResult = STATIC_SetMetafile(hwnd,(HENHMETAFILE)lParam); 411 break; 412 326 413 default: 327 414 return 0; 328 415 } 329 416 417 if (lResult) InvalidateRect(hwnd,NULL,FALSE); 418 419 return lResult; 420 } 421 422 LRESULT STATIC_SetIconMsg(HWND hwnd,WPARAM wParam,LPARAM lParam) 423 { 424 LRESULT lResult; 425 426 lResult = STATIC_SetIcon(hwnd,(HICON)wParam); 427 330 428 InvalidateRect(hwnd,NULL,FALSE); 331 UpdateWindow(hwnd);332 429 333 430 return lResult; 334 431 } 335 432 336 LRESULT STATIC_SetIcon(HWND hwnd,WPARAM wParam,LPARAM lParam) 337 { 338 LRESULT lResult; 339 340 lResult = STATIC_SetIcon(hwnd,(HICON)wParam); 341 342 InvalidateRect(hwnd,NULL,FALSE); 343 UpdateWindow(hwnd); 344 345 return lResult; 433 LRESULT STATIC_Click(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) 434 { 435 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 436 437 if (dwStyle & SS_NOTIFY) SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),STN_CLICKED),hwnd); 438 439 return DefWindowProcA(hwnd,uMsg,wParam,lParam); 440 } 441 442 LRESULT STATIC_DoubleClick(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) 443 { 444 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 445 446 if (dwStyle & SS_NOTIFY) SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),STN_DBLCLK),hwnd); 447 448 return DefWindowProcA(hwnd,uMsg,wParam,lParam); 346 449 } 347 450 … … 386 489 return STATIC_GetDlgCode(hwnd,wParam,lParam); 387 490 491 case WM_LBUTTONDOWN: 492 case WM_NCLBUTTONDOWN: 493 return STATIC_Click(hwnd,uMsg,wParam,lParam); 494 495 case WM_LBUTTONDBLCLK: 496 case WM_NCLBUTTONDBLCLK: 497 return STATIC_DoubleClick(hwnd,uMsg,wParam,lParam); 498 388 499 case STM_GETIMAGE: 500 return STATIC_GetImage(hwnd,wParam,lParam); 501 389 502 case STM_GETICON: 390 503 return STATIC_GetIcon(hwnd,wParam,lParam); … … 394 507 395 508 case STM_SETICON: 396 return STATIC_SetIcon(hwnd,wParam,lParam); 509 return STATIC_SetIconMsg(hwnd,wParam,lParam); 510 511 case STM_MSGMAX: 512 return 0; //CB: undocumented! 397 513 398 514 default: … … 411 527 WORD wFormat; 412 528 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 413 LONG style = dwStyle;414 529 STATICINFO *infoPtr = (STATICINFO *)GetInfoPtr(hwnd); 415 530 INT textLen; … … 417 532 GetClientRect(hwnd,&rc); 418 533 419 switch ( style & SS_TYPEMASK)534 switch (dwStyle & SS_TYPEMASK) 420 535 { 421 case SS_LEFT:536 case SS_LEFT: 422 537 wFormat = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP; 423 538 break; 424 539 425 case SS_CENTER: 540 case SS_CENTER: 541 case SS_CENTERIMAGE: 426 542 wFormat = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP; 427 543 break; 428 544 429 case SS_RIGHT:545 case SS_RIGHT: 430 546 wFormat = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP; 431 547 break; 432 548 433 case SS_SIMPLE:549 case SS_SIMPLE: 434 550 wFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOCLIP; 435 551 break; 436 552 437 case SS_LEFTNOWORDWRAP:553 case SS_LEFTNOWORDWRAP: 438 554 wFormat = DT_LEFT | DT_EXPANDTABS | DT_VCENTER; 439 555 break; 440 556 441 default:557 default: 442 558 return; 443 559 } 444 560 445 if (style & SS_NOPREFIX) 446 wFormat |= DT_NOPREFIX; 561 if (dwStyle & SS_NOPREFIX) wFormat |= DT_NOPREFIX; 562 if (dwStyle & SS_ENDELLIPSIS) wFormat |= DT_END_ELLIPSIS; 563 if (dwStyle & SS_PATHELLIPSIS) wFormat |= DT_PATH_ELLIPSIS; 564 if (dwStyle & SS_WORDELLIPSIS) wFormat |= DT_WORD_ELLIPSIS; 447 565 448 566 if (infoPtr->hFont) SelectObject( hdc, infoPtr->hFont ); … … 462 580 text = (char*)malloc(textLen); 463 581 GetWindowTextA(hwnd,text,textLen); 464 DrawText A( hdc, text, -1, &rc, wFormat);582 DrawTextExA(hdc,text,-1,&rc,wFormat,NULL); 465 583 free(text); 466 584 } … … 513 631 HBRUSH hbrush; 514 632 STATICINFO *infoPtr = (STATICINFO *)GetInfoPtr(hwnd); 633 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 515 634 516 635 GetClientRect( hwnd, &rc ); … … 518 637 hdc, hwnd ); 519 638 FillRect( hdc, &rc, hbrush ); 520 if (infoPtr->hIcon) DrawIcon( hdc, rc.left, rc.top, infoPtr->hIcon ); 639 if (dwStyle & SS_CENTERIMAGE) 640 { 641 ICONINFO ii; 642 BITMAP bmp; 643 644 if (!GetIconInfo(infoPtr->hIcon,&ii)) return; 645 GetObjectA(ii.hbmColor,sizeof(BITMAP),(LPVOID)&bmp); 646 DrawIcon(hdc,(rc.right-bmp.bmWidth)/2,(rc.bottom-bmp.bmHeight)/2,infoPtr->hIcon); 647 } else if (infoPtr->hIcon) DrawIcon(hdc,rc.left,rc.top,infoPtr->hIcon); 521 648 } 522 649 … … 526 653 HBRUSH hbrush; 527 654 STATICINFO *infoPtr = (STATICINFO *)GetInfoPtr(hwnd); 655 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 528 656 HDC hMemDC; 529 657 HBITMAP oldbitmap; … … 544 672 GetBitmapDimensionEx(infoPtr->hIcon, &sz); 545 673 oldbitmap = SelectObject(hMemDC, infoPtr->hIcon); 546 BitBlt(hdc, sz.cx, sz.cy, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, 547 SRCCOPY); 674 if (dwStyle & SS_CENTERIMAGE) 675 BitBlt(hdc,sz.cx,sz.cy,bm.bmWidth,bm.bmHeight,hMemDC,(rc.right-bm.bmWidth)/2,(rc.bottom-bm.bmHeight)/2,SRCCOPY); 676 else 677 BitBlt(hdc,sz.cx,sz.cy,bm.bmWidth,bm.bmHeight,hMemDC,0,0,SRCCOPY); 548 678 SelectObject(hMemDC, oldbitmap); 549 679 DeleteDC(hMemDC); … … 551 681 } 552 682 683 static void STATIC_PaintMetafilefn(HWND hwnd,HDC hdc) 684 { 685 RECT rect; 686 HBRUSH hbrush; 687 STATICINFO *infoPtr = (STATICINFO *)GetInfoPtr(hwnd); 688 689 GetClientRect(hwnd,&rect); 690 hbrush = SendMessageA(GetParent(hwnd),WM_CTLCOLORSTATIC,hdc,hwnd); 691 FillRect(hdc,&rect,hbrush); 692 693 if (infoPtr->hIcon) PlayEnhMetaFile(hdc,(HENHMETAFILE)infoPtr->hIcon,&rect); 694 } 695 696 static void STATIC_PaintOwnerDrawfn(HWND hwnd,HDC hdc) 697 { 698 DRAWITEMSTRUCT di; 699 700 di.CtlType = ODT_STATIC; 701 di.CtlID = GetWindowLongA(hwnd,GWL_ID); 702 di.itemID = 0; 703 di.itemAction = ODA_DRAWENTIRE; 704 di.itemState = ODS_DEFAULT; 705 di.hwndItem = hwnd; 706 di.hDC = hdc; 707 GetClientRect(hwnd,&di.rcItem); 708 di.itemData = 0; 709 710 SendMessageA(GetParent(hwnd),WM_DRAWITEM,GetWindowLongA(hwnd,GWL_ID),(LPARAM)&di); 711 } 553 712 554 713 static void STATIC_PaintEtchedfn( HWND hwnd, HDC hdc )
Note:
See TracChangeset
for help on using the changeset viewer.