- Timestamp:
- Jul 27, 1999, 6:14:22 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/button.cpp
r387 r402 1 /* $Id: button.cpp,v 1.9 1999-07-24 17:10:24 cbratschi Exp $ */ 2 /* File: button.c -- Button type widgets 3 * 4 * Copyright (c) 1999 Christoph Bratschi (ported from WINE) 1 /* $Id: button.cpp,v 1.10 1999-07-27 16:14:22 cbratschi Exp $ */ 2 /* File: button.cpp -- Button type widgets 5 3 * 6 4 * Copyright (C) 1993 Johannes Ruscheinski 7 5 * Copyright (C) 1993 David Metcalfe 8 6 * Copyright (C) 1994 Alexandre Julliard 7 * Copyright (c) 1999 Christoph Bratschi 9 8 */ 10 9 11 10 /* CB: todo 12 11 - update checkboxes.bmp to Win9x style 12 + color and transparent mask 13 13 */ 14 14 … … 31 31 static void OB_Paint(HWND hwnd,HDC hDC,WORD action); 32 32 static void BUTTON_CheckAutoRadioButton(HWND hwnd); 33 static LRESULT BUTTON_LButtonDown(HWND hwnd,WPARAM wParam,LPARAM lParam); 33 34 34 35 #define MAX_BTN_TYPE 12 … … 88 89 switch (dwStyle & 0x0f) 89 90 { 91 case BS_AUTOCHECKBOX: 92 case BS_CHECKBOX: 93 return DLGC_WANTCHARS | DLGC_BUTTON; 94 90 95 case BS_PUSHBUTTON: 91 return DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON; 96 return DLGC_UNDEFPUSHBUTTON; 97 92 98 case BS_DEFPUSHBUTTON: 93 return DLGC_BUTTON | DLGC_DEFPUSHBUTTON; 99 return DLGC_DEFPUSHBUTTON; 100 101 case BS_AUTORADIOBUTTON: 94 102 case BS_RADIOBUTTON: 95 case BS_AUTORADIOBUTTON: 96 return DLGC_BUTTON | DLGC_RADIOBUTTON; 103 return DLGC_RADIOBUTTON; 104 105 case BS_GROUPBOX:; 106 return DLGC_STATIC; 107 97 108 default: 98 109 return DLGC_BUTTON; … … 119 130 120 131 hbitmapCheckBoxes = NativeLoadBitmap(0,MAKEINTRESOURCEA(OBM_CHECKBOXES)); 121 GetObjectA( hbitmapCheckBoxes, sizeof(bmp), &bmp ); 122 checkBoxWidth = bmp.bmWidth / 4; 123 checkBoxHeight = bmp.bmHeight / 3; 132 if (GetObjectA(hbitmapCheckBoxes,sizeof(bmp),&bmp)) 133 { 134 checkBoxWidth = bmp.bmWidth / 4; 135 checkBoxHeight = bmp.bmHeight / 3; 136 } else checkBoxWidth = checkBoxHeight = 0; 124 137 } 125 138 if (style < 0L || style >= MAX_BTN_TYPE) return -1; /* abort */ … … 160 173 (btnPaintFunc[style])(hwnd,hdc,ODA_DRAWENTIRE); 161 174 if(!wParam) EndPaint(hwnd,&ps); 175 } 176 177 return 0; 178 } 179 180 static LRESULT BUTTON_LButtonDblClk(HWND hwnd,WPARAM wParam,LPARAM lParam) 181 { 182 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 183 184 switch(dwStyle & 0x0f) 185 { 186 case BS_RADIOBUTTON: 187 case BS_AUTORADIOBUTTON: 188 case BS_OWNERDRAW: 189 SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),BN_DOUBLECLICKED),hwnd); 190 break; 191 192 default: 193 BUTTON_LButtonDown(hwnd,wParam,lParam); 194 break; 162 195 } 163 196 … … 266 299 } 267 300 301 static LRESULT BUTTON_KeyDown(HWND hwnd,WPARAM wParam,LPARAM lParam) 302 { 303 if (wParam == VK_SPACE) 304 { 305 SendMessageA(hwnd,BM_SETSTATE,TRUE,0); 306 SetFocus(hwnd); 307 SetCapture(hwnd); 308 } 309 310 return 0; 311 } 312 313 static LRESULT BUTTON_KeyUp(HWND hwnd,WPARAM wParam,LPARAM lParam) 314 { 315 if (wParam == VK_SPACE) 316 { 317 BUTTONINFO* infoPtr = (BUTTONINFO*)GetInfoPtr(hwnd); 318 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 319 DWORD id = GetWindowLongA(hwnd,GWL_ID); 320 321 ReleaseCapture(); 322 if (!(infoPtr->state & BUTTON_HIGHLIGHTED)) return 0; 323 SendMessageA(hwnd,BM_SETSTATE,FALSE,0); 324 325 switch(dwStyle & 0x0f) 326 { 327 case BS_AUTOCHECKBOX: 328 SendMessageA(hwnd,BM_SETCHECK,!(infoPtr->state & BUTTON_CHECKED),0); 329 break; 330 case BS_AUTORADIOBUTTON: 331 SendMessageA(hwnd,BM_SETCHECK,TRUE,0); 332 break; 333 case BS_AUTO3STATE: 334 SendMessageA(hwnd,BM_SETCHECK, 335 (infoPtr->state & BUTTON_3STATE) ? 0 : 336 ((infoPtr->state & 3)+1),0); 337 break; 338 } 339 SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(id,BN_CLICKED),hwnd); 340 } else if (wParam != VK_TAB) ReleaseCapture(); 341 342 return 0; 343 } 344 345 static LRESULT BUTTON_SysKeyUp(HWND hwnd,WPARAM wParam,LPARAM lParam) 346 { 347 if (wParam != VK_TAB) ReleaseCapture(); 348 349 return 0; 350 } 351 268 352 static LRESULT BUTTON_SetFocus(HWND hwnd,WPARAM wParam,LPARAM lParam) 269 353 { … … 275 359 { 276 360 SendMessageA(hwnd,BM_SETCHECK,1,0); 277 } 361 SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),BN_CLICKED),hwnd); 362 } else if (style == BS_RADIOBUTTON) 363 { 364 SendMessageA(GetParent(hwnd),WM_COMMAND,MAKEWPARAM(GetWindowLongA(hwnd,GWL_ID),BN_CLICKED),hwnd); 365 } 366 278 367 PAINT_BUTTON(hwnd,style,ODA_FOCUS); 279 368 … … 286 375 DWORD style = GetWindowLongA(hwnd,GWL_STYLE) & 0x0f; 287 376 288 infoPtr->state &= ~BUTTON_HASFOCUS; 289 PAINT_BUTTON(hwnd,style,ODA_FOCUS); 290 InvalidateRect(hwnd,NULL,TRUE); 377 if (infoPtr->state & BUTTON_HASFOCUS) 378 { 379 infoPtr->state &= ~BUTTON_HASFOCUS; 380 PAINT_BUTTON(hwnd,style,ODA_FOCUS); 381 InvalidateRect(hwnd,NULL,TRUE); 382 } 291 383 292 384 return 0; … … 296 388 { 297 389 InvalidateRect(hwnd,NULL,FALSE); 390 391 return 0; 392 } 393 394 static LRESULT BUTTON_Click(HWND hwnd,WPARAM wParam,LPARAM lParam) 395 { 396 RECT rect; 397 LPARAM point; 398 399 GetClientRect(hwnd,&rect); 400 point = MAKELPARAM(rect.right/2,rect.bottom/2); 401 SendMessageA(hwnd,WM_LBUTTONDOWN,0,point); 402 Sleep(100); 403 SendMessageA(hwnd,WM_LBUTTONUP,0,point); 298 404 299 405 return 0; … … 417 523 return BUTTON_Paint(hwnd,wParam,lParam); 418 524 525 case WM_LBUTTONDBLCLK: 526 return BUTTON_LButtonDblClk(hwnd,wParam,lParam); 527 419 528 case WM_LBUTTONDOWN: 420 case WM_LBUTTONDBLCLK:421 529 return BUTTON_LButtonDown(hwnd,wParam,lParam); 422 530 … … 439 547 return BUTTON_GetFont(hwnd,wParam,lParam); 440 548 549 case WM_KEYDOWN: 550 return BUTTON_KeyDown(hwnd,wParam,lParam); 551 552 case WM_KEYUP: 553 return BUTTON_KeyUp(hwnd,wParam,lParam); 554 555 case WM_SYSKEYUP: 556 return BUTTON_SysKeyUp(hwnd,wParam,lParam); 557 441 558 case WM_SETFOCUS: 442 559 return BUTTON_SetFocus(hwnd,wParam,lParam); … … 447 564 case WM_SYSCOLORCHANGE: 448 565 return BUTTON_SysColorChange(hwnd,wParam,lParam); 566 567 case BM_CLICK: 568 return BUTTON_Click(hwnd,wParam,lParam); 449 569 450 570 case BM_SETSTYLE: … … 910 1030 911 1031 ZeroMemory(&wndClass,sizeof(WNDCLASSA)); 912 wndClass.style = CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW | CS_PARENTDC ;1032 wndClass.style = CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW | CS_PARENTDC | CS_DBLCLKS; 913 1033 wndClass.lpfnWndProc = (WNDPROC)ButtonWndProc; 914 1034 wndClass.cbClsExtra = 0;
Note:
See TracChangeset
for help on using the changeset viewer.