Changeset 833 for trunk/src/user32/new/windlgmsg.cpp
- Timestamp:
- Sep 5, 1999, 2:03:34 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/windlgmsg.cpp
r309 r833 1 /* $Id: windlgmsg.cpp,v 1. 1 1999-07-15 18:03:03sandervl Exp $ */1 /* $Id: windlgmsg.cpp,v 1.2 1999-09-05 12:03:34 sandervl Exp $ */ 2 2 /* 3 3 * Win32 dialog message APIs for OS/2 4 4 * 5 * Copyright 1999 Sander van Leeuwen 6 * 5 * Copyright 1999 Sander van Leeuwen (OS/2 port & adaption) 6 * 7 * Based on Wine code (990815: window\dialog.c) 8 * 9 * Copyright 1993, 1994, 1996 Alexandre Julliard 10 * 11 * TODO: Dialog accelerator 7 12 * 8 13 * Project Odin Software License can be found in LICENSE.TXT … … 11 16 #include <os2win.h> 12 17 #include <misc.h> 13 14 15 //****************************************************************************** 16 //****************************************************************************** 17 LONG WIN32API SendDlgItemMessageA( HWND arg1, int arg2, UINT arg3, WPARAM arg4, LPARAM arg5) 18 { 19 #ifdef DEBUG 20 WriteLog("USER32: SendDlgItemMessageA\n"); 18 #include "win32wbase.h" 19 #include "win32dlg.h" 20 21 //****************************************************************************** 22 //****************************************************************************** 23 LONG WIN32API SendDlgItemMessageA( HWND hwnd, int id, UINT Msg, WPARAM wParam, LPARAM lParam) 24 { 25 Win32Dialog *dialog; 26 Win32BaseWindow *dlgcontrol; 27 28 dialog = (Win32Dialog *)Win32BaseWindow::GetWindowFromHandle(hwnd); 29 if(!dialog || !dialog->IsDialog()) { 30 dprintf(("SendDlgItemMessageA, window %x not found", hwnd)); 31 return 0; 32 } 33 dlgcontrol = dialog->getDlgItem(id); 34 if(dlgcontrol) { 35 return dlgcontrol->SendMessageA(Msg, wParam, lParam); 36 } 37 return 0; 38 } 39 //****************************************************************************** 40 //****************************************************************************** 41 LONG WIN32API SendDlgItemMessageW( HWND hwnd, int id, UINT Msg, WPARAM wParam, LPARAM lParam) 42 { 43 Win32Dialog *dialog; 44 Win32BaseWindow *dlgcontrol; 45 46 dialog = (Win32Dialog *)Win32BaseWindow::GetWindowFromHandle(hwnd); 47 if(!dialog || !dialog->IsDialog()) { 48 dprintf(("SendDlgItemMessageW, window %x not found", hwnd)); 49 return 0; 50 } 51 dlgcontrol = dialog->getDlgItem(id); 52 if(dlgcontrol) { 53 return dlgcontrol->SendMessageW(Msg, wParam, lParam); 54 } 55 return 0; 56 } 57 //TODO 58 #if 0 59 /*********************************************************************** 60 * DIALOG_IsAccelerator 61 */ 62 static BOOL DIALOG_IsAccelerator( HWND hwnd, HWND hwndDlg, WPARAM vKey ) 63 { 64 HWND hwndControl = hwnd; 65 HWND hwndNext; 66 WND *wndPtr; 67 BOOL RetVal = FALSE; 68 INT dlgCode; 69 70 if (vKey == VK_SPACE) 71 { 72 dlgCode = SendMessageA( hwndControl, WM_GETDLGCODE, 0, 0 ); 73 if (dlgCode & DLGC_BUTTON) 74 { 75 SendMessageA( hwndControl, WM_LBUTTONDOWN, 0, 0); 76 SendMessageA( hwndControl, WM_LBUTTONUP, 0, 0); 77 RetVal = TRUE; 78 } 79 } 80 else 81 { 82 do 83 { 84 wndPtr = WIN_FindWndPtr( hwndControl ); 85 if ( (wndPtr != NULL) && 86 ((wndPtr->dwStyle & (WS_VISIBLE | WS_DISABLED)) == WS_VISIBLE) ) 87 { 88 dlgCode = SendMessageA( hwndControl, WM_GETDLGCODE, 0, 0 ); 89 if ( (dlgCode & (DLGC_BUTTON | DLGC_STATIC)) && 90 (wndPtr->text!=NULL)) 91 { 92 /* find the accelerator key */ 93 LPSTR p = wndPtr->text - 2; 94 do 95 { 96 p = strchr( p + 2, '&' ); 97 } 98 while (p != NULL && p[1] == '&'); 99 100 /* and check if it's the one we're looking for */ 101 if (p != NULL && toupper( p[1] ) == toupper( vKey ) ) 102 { 103 if ((dlgCode & DLGC_STATIC) || 104 (wndPtr->dwStyle & 0x0f) == BS_GROUPBOX ) 105 { 106 /* set focus to the control */ 107 SendMessageA( hwndDlg, WM_NEXTDLGCTL, 108 hwndControl, 1); 109 /* and bump it on to next */ 110 SendMessageA( hwndDlg, WM_NEXTDLGCTL, 0, 0); 111 } 112 else if (dlgCode & 113 (DLGC_DEFPUSHBUTTON | DLGC_UNDEFPUSHBUTTON)) 114 { 115 /* send command message as from the control */ 116 SendMessageA( hwndDlg, WM_COMMAND, 117 MAKEWPARAM( LOWORD(wndPtr->wIDmenu), 118 BN_CLICKED ), 119 (LPARAM)hwndControl ); 120 } 121 else 122 { 123 /* click the control */ 124 SendMessageA( hwndControl, WM_LBUTTONDOWN, 0, 0); 125 SendMessageA( hwndControl, WM_LBUTTONUP, 0, 0); 126 } 127 RetVal = TRUE; 128 WIN_ReleaseWndPtr(wndPtr); 129 break; 130 } 131 } 132 hwndNext = GetWindow( hwndControl, GW_CHILD ); 133 } 134 else 135 { 136 hwndNext = 0; 137 } 138 WIN_ReleaseWndPtr(wndPtr); 139 if (!hwndNext) 140 { 141 hwndNext = GetWindow( hwndControl, GW_HWNDNEXT ); 142 } 143 while (!hwndNext) 144 { 145 hwndControl = GetParent( hwndControl ); 146 if (hwndControl == hwndDlg) 147 { 148 if(hwnd==hwndDlg){ /* prevent endless loop */ 149 hwndNext=hwnd; 150 break; 151 } 152 hwndNext = GetWindow( hwndDlg, GW_CHILD ); 153 } 154 else 155 { 156 hwndNext = GetWindow( hwndControl, GW_HWNDNEXT ); 157 } 158 } 159 hwndControl = hwndNext; 160 } 161 while (hwndControl != hwnd); 162 } 163 return RetVal; 164 } 21 165 #endif 22 return O32_SendDlgItemMessage(arg1, arg2, arg3, arg4, arg5); 23 } 24 //****************************************************************************** 25 //****************************************************************************** 26 LONG WIN32API SendDlgItemMessageW( HWND arg1, int arg2, UINT arg3, WPARAM arg4, LPARAM arg5) 27 { 28 #ifdef DEBUG 29 WriteLog("USER32: SendDlgItemMessageW\n"); 166 /*********************************************************************** 167 * DIALOG_IsDialogMessage 168 */ 169 static BOOL DIALOG_IsDialogMessage( HWND hwnd, HWND hwndDlg, 170 UINT message, WPARAM wParam, 171 LPARAM lParam, BOOL *translate, 172 BOOL *dispatch, INT dlgCode ) 173 { 174 *translate = *dispatch = FALSE; 175 176 if (message == WM_PAINT) 177 { 178 /* Apparently, we have to handle this one as well */ 179 *dispatch = TRUE; 180 return TRUE; 181 } 182 183 /* Only the key messages get special processing */ 184 if ((message != WM_KEYDOWN) && 185 (message != WM_SYSCHAR) && 186 (message != WM_CHAR)) 187 return FALSE; 188 189 if (dlgCode & DLGC_WANTMESSAGE) 190 { 191 *translate = *dispatch = TRUE; 192 return TRUE; 193 } 194 195 switch(message) 196 { 197 case WM_KEYDOWN: 198 switch(wParam) 199 { 200 case VK_TAB: 201 if (!(dlgCode & DLGC_WANTTAB)) 202 { 203 SendMessageA( hwndDlg, WM_NEXTDLGCTL, 204 (GetKeyState(VK_SHIFT) & 0x8000), 0 ); 205 return TRUE; 206 } 207 break; 208 209 case VK_RIGHT: 210 case VK_DOWN: 211 case VK_LEFT: 212 case VK_UP: 213 if (!(dlgCode & DLGC_WANTARROWS)) 214 { 215 BOOL fPrevious = (wParam == VK_LEFT || wParam == VK_UP); 216 HWND hwndNext = 217 GetNextDlgGroupItem (hwndDlg, GetFocus(), fPrevious ); 218 SendMessageA( hwndDlg, WM_NEXTDLGCTL, hwndNext, 1 ); 219 return TRUE; 220 } 221 break; 222 223 case VK_ESCAPE: 224 SendMessageA( hwndDlg, WM_COMMAND, IDCANCEL, 225 (LPARAM)GetDlgItem( hwndDlg, IDCANCEL ) ); 226 return TRUE; 227 228 case VK_RETURN: 229 { 230 DWORD dw = SendMessageA( hwndDlg, DM_GETDEFID, 0, 0 ); 231 if (HIWORD(dw) == DC_HASDEFID) 232 { 233 SendMessageA( hwndDlg, WM_COMMAND, 234 MAKEWPARAM( LOWORD(dw), BN_CLICKED ), 235 (LPARAM)GetDlgItem(hwndDlg, LOWORD(dw))); 236 } 237 else 238 { 239 SendMessageA( hwndDlg, WM_COMMAND, IDOK, 240 (LPARAM)GetDlgItem( hwndDlg, IDOK ) ); 241 242 } 243 } 244 return TRUE; 245 } 246 *translate = TRUE; 247 break; /* case WM_KEYDOWN */ 248 249 case WM_CHAR: 250 if (dlgCode & DLGC_WANTCHARS) break; 251 /* drop through */ 252 253 //TODO: 254 #if 0 255 case WM_SYSCHAR: 256 if (DIALOG_IsAccelerator( hwnd, hwndDlg, wParam )) 257 { 258 /* don't translate or dispatch */ 259 return TRUE; 260 } 261 break; 30 262 #endif 31 return O32_SendDlgItemMessage(arg1, arg2, arg3, arg4, arg5); 32 } 33 //****************************************************************************** 34 //****************************************************************************** 35 BOOL WIN32API IsDialogMessageA( HWND arg1, LPMSG arg2) 36 { 37 #ifdef DEBUG 38 //// WriteLog("USER32: IsDialogMessage\n"); 39 #endif 40 return O32_IsDialogMessage(arg1, arg2); 41 } 42 //****************************************************************************** 43 //****************************************************************************** 44 BOOL WIN32API IsDialogMessageW( HWND arg1, LPMSG arg2) 45 { 46 #ifdef DEBUG 47 WriteLog("USER32: IsDialogMessageW\n"); 48 #endif 49 // NOTE: This will not work as is (needs UNICODE support) 50 return O32_IsDialogMessage(arg1, arg2); 51 } 52 //****************************************************************************** 53 //****************************************************************************** 263 } 264 265 /* If we get here, the message has not been treated specially */ 266 /* and can be sent to its destination window. */ 267 *dispatch = TRUE; 268 return TRUE; 269 } 270 //****************************************************************************** 271 //****************************************************************************** 272 BOOL WIN32API IsDialogMessageA( HWND hwndDlg, LPMSG msg) 273 { 274 BOOL ret, translate, dispatch; 275 INT dlgCode; 276 277 if ((hwndDlg != msg->hwnd) && !IsChild( hwndDlg, msg->hwnd )) 278 return FALSE; 279 280 dlgCode = SendMessageA( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); 281 ret = DIALOG_IsDialogMessage( msg->hwnd, hwndDlg, msg->message, 282 msg->wParam, msg->lParam, 283 &translate, &dispatch, dlgCode ); 284 if (translate) TranslateMessage( msg ); 285 if (dispatch) DispatchMessageA( msg ); 286 287 return ret; 288 } 289 //****************************************************************************** 290 //****************************************************************************** 291 BOOL WIN32API IsDialogMessageW(HWND hwndDlg, LPMSG msg) 292 { 293 BOOL ret, translate, dispatch; 294 INT dlgCode; 295 296 if ((hwndDlg != msg->hwnd) && !IsChild( hwndDlg, msg->hwnd )) 297 return FALSE; 298 299 dlgCode = SendMessageW( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); 300 ret = DIALOG_IsDialogMessage( msg->hwnd, hwndDlg, msg->message, 301 msg->wParam, msg->lParam, 302 &translate, &dispatch, dlgCode ); 303 if (translate) TranslateMessage( msg ); 304 if (dispatch) DispatchMessageW( msg ); 305 return ret; 306 } 307 //****************************************************************************** 308 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.