Annotation of ntddk/src/print/localmon/dialogs.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include <windows.h>
                      3: #include <winspool.h>
                      4: #include <winsplp.h>
                      5: #include <stdlib.h>
                      6: #include <stdio.h>
                      7: #include "spltypes.h"
                      8: #include "local.h"
                      9: #include "dialogs.h"
                     10: 
                     11: WCHAR szWindows[] = L"windows";
                     12: WCHAR szINIKey_TransmissionRetryTimeout[] = L"TransmissionRetryTimeout";
                     13: WCHAR szHelpFile[] = L"PRINTMAN.HLP";
                     14: 
                     15: #define ID_HELP_PORTNAME        2200
                     16: #define ID_HELP_CONFIGURE_LPT   2300
                     17: #define ID_HELP_PRINTTOFILE     2400
                     18: 
                     19: /* Use the window word of the entry field to store last valid entry:
                     20:  */
                     21: #define SET_LAST_VALID_ENTRY( hwnd, id, val ) \
                     22:     SetWindowLong( GetDlgItem( hwnd, id ), GWL_USERDATA, (LONG)val )
                     23: #define GET_LAST_VALID_ENTRY( hwnd, id ) \
                     24:     GetWindowLong( GetDlgItem( hwnd, id ), GWL_USERDATA )
                     25: 
                     26: /* Local functions:
                     27:  */
                     28: BOOL
                     29: PortNameInitDialog(
                     30:     HWND hwnd,
                     31:     LPWSTR *ppPortName
                     32: );
                     33: BOOL
                     34: PortNameCommandOK(
                     35:     HWND hwnd
                     36: );
                     37: BOOL
                     38: PortNameCommandCancel(
                     39:     HWND hwnd
                     40: );
                     41: BOOL
                     42: PortIsValid(
                     43:     LPWSTR pPortName
                     44: );
                     45: 
                     46: BOOL
                     47: ConfigureLPTPortInitDialog(
                     48:     HWND hwnd
                     49: );
                     50: 
                     51: BOOL
                     52: ConfigureLPTPortCommandOK(
                     53:     HWND hwnd
                     54: );
                     55: 
                     56: BOOL
                     57: ConfigureLPTPortCommandCancel(
                     58:     HWND hwnd
                     59: );
                     60: 
                     61: BOOL
                     62: ConfigureLPTPortCommandTransmissionRetryUpdate(
                     63:     HWND hwnd,
                     64:     WORD CtlId
                     65: );
                     66: 
                     67: BOOL
                     68: PrintToFileInitDialog(
                     69:     HWND  hwnd,
                     70:     PHANDLE phFile
                     71: );
                     72: 
                     73: BOOL
                     74: PrintToFileCommandOK(
                     75:     HWND hwnd
                     76: );
                     77: 
                     78: BOOL
                     79: PrintToFileCommandCancel(
                     80:     HWND hwnd
                     81: );
                     82: 
                     83: VOID
                     84: CreateMessageHook(
                     85:     HWND hwnd
                     86: );
                     87: 
                     88: VOID
                     89: FreeMessageHook(
                     90:     HWND hwnd
                     91: );
                     92: 
                     93: LRESULT
                     94: CALLBACK
                     95: MessageProc(
                     96:     int Code,
                     97:     WPARAM wParam,
                     98:     LPARAM lParam
                     99: );
                    100: 
                    101: 
                    102: UINT  WM_Help = 0;
                    103: 
                    104: 
                    105: /*
                    106:  *
                    107:  */
                    108: BOOL APIENTRY
                    109: PortNameDlg(
                    110:    HWND   hwnd,
                    111:    WORD   msg,
                    112:    WPARAM wparam,
                    113:    LPARAM lparam
                    114: )
                    115: {
                    116:     switch(msg)
                    117:     {
                    118:     case WM_INITDIALOG:
                    119:         return PortNameInitDialog(hwnd, (LPWSTR *)lparam);
                    120: 
                    121:     case WM_COMMAND:
                    122:         switch (LOWORD(wparam))
                    123:         {
                    124:         case IDOK:
                    125:             return PortNameCommandOK(hwnd);
                    126: 
                    127:         case IDCANCEL:
                    128:             return PortNameCommandCancel(hwnd);
                    129: 
                    130:         case IDD_PN_PB_HELP:
                    131:             WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_PORTNAME);
                    132:         }
                    133:         break;
                    134: 
                    135:     case WM_DESTROY:
                    136:         FreeMessageHook(hwnd);
                    137:         break;
                    138:     }
                    139: 
                    140:     if( msg == WM_Help )
                    141:         WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_PORTNAME);
                    142: 
                    143:     return FALSE;
                    144: }
                    145: 
                    146: 
                    147: /*
                    148:  *
                    149:  */
                    150: BOOL
                    151: PortNameInitDialog(
                    152:     HWND hwnd,
                    153:     LPWSTR *ppPortName
                    154: )
                    155: {
                    156:     SetForegroundWindow(hwnd);
                    157: 
                    158:     SetWindowLong (hwnd, GWL_USERDATA, (LONG)ppPortName);
                    159:     SendDlgItemMessage (hwnd, IDD_PN_EF_PORTNAME, EM_LIMITTEXT, MAX_PATH, 0);
                    160: 
                    161:     CreateMessageHook( hwnd );
                    162: 
                    163:     return TRUE;
                    164: }
                    165: 
                    166: 
                    167: /*
                    168:  *
                    169:  */
                    170: BOOL
                    171: PortNameCommandOK(
                    172:     HWND hwnd
                    173: )
                    174: {
                    175:     LPWSTR *ppPortName;
                    176:     WCHAR string[MAX_PATH];
                    177: 
                    178:     ppPortName = (LPWSTR *)GetWindowLong( hwnd, GWL_USERDATA );
                    179: 
                    180:     GetDlgItemText( hwnd, IDD_PN_EF_PORTNAME, string, sizeof string );
                    181: 
                    182:     if( PortIsValid( string ) )
                    183:     {
                    184:         EnterSplSem( );
                    185:         *ppPortName = AllocSplStr( string );
                    186:         LeaveSplSem( );
                    187:         EndDialog( hwnd, TRUE );
                    188:     }
                    189:     else
                    190:         Message( hwnd, MSG_ERROR, IDS_LOCALMONITOR, IDS_INVALIDPORTNAME_S, string );
                    191: 
                    192:     return TRUE;
                    193: }
                    194: 
                    195: 
                    196: 
                    197: /*
                    198:  *
                    199:  */
                    200: BOOL
                    201: PortNameCommandCancel(
                    202:     HWND hwnd
                    203: )
                    204: {
                    205:     EndDialog( hwnd, FALSE );
                    206:     return TRUE;
                    207: }
                    208: 
                    209: 
                    210: 
                    211: /* PortIsValid
                    212:  *
                    213:  * Validate the port by attempting to create/open it.
                    214:  */
                    215: BOOL
                    216: PortIsValid(
                    217:     LPWSTR pPortName
                    218: )
                    219: {
                    220:     HANDLE hFile;
                    221:     BOOL   Valid;
                    222: 
                    223:     hFile = CreateFile( pPortName, GENERIC_WRITE, FILE_SHARE_READ, NULL,
                    224:                         OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
                    225: 
                    226:     if( hFile != (HANDLE)-1 )
                    227:     {
                    228:         CloseHandle( hFile );
                    229: 
                    230:         Valid = TRUE;
                    231:     }
                    232:     else
                    233:         Valid = FALSE;
                    234: 
                    235:     return Valid;
                    236: }
                    237: 
                    238: 
                    239: 
                    240: /*
                    241:  *
                    242:  */
                    243: BOOL APIENTRY
                    244: ConfigureLPTPortDlg(
                    245:    HWND   hwnd,
                    246:    WORD   msg,
                    247:    WPARAM wparam,
                    248:    LPARAM lparam
                    249: )
                    250: {
                    251:     switch(msg)
                    252:     {
                    253:     case WM_INITDIALOG:
                    254:         return ConfigureLPTPortInitDialog(hwnd);
                    255: 
                    256:     case WM_COMMAND:
                    257:         switch (LOWORD(wparam))
                    258:         {
                    259:         case IDOK:
                    260:             return ConfigureLPTPortCommandOK(hwnd);
                    261: 
                    262:         case IDCANCEL:
                    263:             return ConfigureLPTPortCommandCancel(hwnd);
                    264: 
                    265:         case IDD_CL_EF_TRANSMISSIONRETRY:
                    266:             if( HIWORD(wparam) == EN_UPDATE )
                    267:                 ConfigureLPTPortCommandTransmissionRetryUpdate(hwnd, LOWORD(wparam));
                    268:             break;
                    269: 
                    270:         case IDD_CF_PB_HELP:
                    271:             WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_CONFIGURE_LPT);
                    272:         }
                    273:         break;
                    274: 
                    275:     case WM_DESTROY:
                    276:         FreeMessageHook(hwnd);
                    277:         break;
                    278:     }
                    279: 
                    280:     if( msg == WM_Help )
                    281:         WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_CONFIGURE_LPT);
                    282: 
                    283:     return FALSE;
                    284: }
                    285: 
                    286: 
                    287: /*
                    288:  *
                    289:  */
                    290: BOOL
                    291: ConfigureLPTPortInitDialog(
                    292:     HWND hwnd
                    293: )
                    294: {
                    295:     DWORD TransmissionRetryTimeout;
                    296: 
                    297:     SetForegroundWindow(hwnd);
                    298: 
                    299:     SendDlgItemMessage( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
                    300:                         EM_LIMITTEXT, TIMEOUT_STRING_MAX, 0 );
                    301: 
                    302:     TransmissionRetryTimeout = GetProfileInt( szWindows,
                    303:                                               szINIKey_TransmissionRetryTimeout,
                    304:                                               45 );
                    305:     SetDlgItemInt( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
                    306:                    TransmissionRetryTimeout, FALSE );
                    307: 
                    308:     SET_LAST_VALID_ENTRY( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
                    309:                           TransmissionRetryTimeout );
                    310: 
                    311:     CreateMessageHook( hwnd );
                    312: 
                    313:     return TRUE;
                    314: }
                    315: 
                    316: 
                    317: /*
                    318:  *
                    319:  */
                    320: BOOL
                    321: ConfigureLPTPortCommandOK(
                    322:     HWND hwnd
                    323: )
                    324: {
                    325:     WCHAR String[TIMEOUT_STRING_MAX+1];
                    326:     UINT  TransmissionRetryTimeout;
                    327:     BOOL  bTranslated;
                    328: 
                    329:     TransmissionRetryTimeout = GetDlgItemInt( hwnd,
                    330:                                               IDD_CL_EF_TRANSMISSIONRETRY,
                    331:                                               &bTranslated,
                    332:                                               FALSE );
                    333: 
                    334:     wsprintf(String, L"%d", TransmissionRetryTimeout);
                    335: 
                    336:     WriteProfileString(  szWindows, szINIKey_TransmissionRetryTimeout,
                    337:                          String );
                    338: 
                    339:     EndDialog( hwnd, TRUE );
                    340: 
                    341:     return TRUE;
                    342: }
                    343: 
                    344: 
                    345: 
                    346: /*
                    347:  *
                    348:  */
                    349: BOOL
                    350: ConfigureLPTPortCommandCancel(
                    351:     HWND hwnd
                    352: )
                    353: {
                    354:     EndDialog(hwnd, FALSE);
                    355:     return TRUE;
                    356: }
                    357: 
                    358: 
                    359: /*
                    360:  *
                    361:  */
                    362: BOOL
                    363: ConfigureLPTPortCommandTransmissionRetryUpdate(
                    364:     HWND hwnd,
                    365:     WORD CtlId
                    366: )
                    367: {
                    368:     int  Value;
                    369:     BOOL OK;
                    370: 
                    371:     Value = GetDlgItemInt( hwnd, CtlId, &OK, FALSE );
                    372: 
                    373:     if( WITHINRANGE( Value, TIMEOUT_MIN, TIMEOUT_MAX ) )
                    374:     {
                    375:         SET_LAST_VALID_ENTRY( hwnd, CtlId, Value );
                    376:     }
                    377: 
                    378:     else
                    379:     {
                    380:         SetDlgItemInt( hwnd, CtlId, GET_LAST_VALID_ENTRY( hwnd, CtlId ), FALSE );
                    381:         SendDlgItemMessage( hwnd, CtlId, EM_SETSEL, 0, (LPARAM)-1 );
                    382:     }
                    383: 
                    384:     return TRUE;
                    385: }
                    386: 
                    387: 
                    388: /*
                    389:  *
                    390:  */
                    391: BOOL APIENTRY
                    392: PrintToFileDlg(
                    393:    HWND   hwnd,
                    394:    WORD   msg,
                    395:    WPARAM wparam,
                    396:    LPARAM lparam
                    397: )
                    398: {
                    399:     switch(msg)
                    400:     {
                    401:     case WM_INITDIALOG:
                    402:         return PrintToFileInitDialog(hwnd, (PHANDLE)lparam);
                    403: 
                    404:     case WM_COMMAND:
                    405:         switch (LOWORD(wparam))
                    406:         {
                    407:         case IDOK:
                    408:             return PrintToFileCommandOK(hwnd);
                    409: 
                    410:         case IDCANCEL:
                    411:             return PrintToFileCommandCancel(hwnd);
                    412: 
                    413:         case IDD_PF_PB_HELP:
                    414:             WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_PRINTTOFILE);
                    415:         }
                    416:         break;
                    417: 
                    418:     case WM_DESTROY:
                    419:         FreeMessageHook(hwnd);
                    420:         break;
                    421:     }
                    422: 
                    423:     if( msg == WM_Help )
                    424:         WinHelp(hwnd, szHelpFile, HELP_CONTEXT, ID_HELP_PRINTTOFILE);
                    425: 
                    426:     return FALSE;
                    427: }
                    428: 
                    429: 
                    430: /*
                    431:  *
                    432:  */
                    433: BOOL
                    434: PrintToFileInitDialog(
                    435:     HWND  hwnd,
                    436:     PHANDLE phFile
                    437: )
                    438: {
                    439: //  SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0,
                    440: //               SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
                    441: 
                    442:     BringWindowToTop( hwnd );
                    443: 
                    444:     SetFocus(hwnd);
                    445: 
                    446:     SetWindowLong( hwnd, GWL_USERDATA, (LONG)phFile );
                    447: 
                    448:     SendDlgItemMessage( hwnd, IDD_PF_EF_OUTPUTFILENAME, EM_LIMITTEXT, MAX_PATH, 0);
                    449: 
                    450:     CreateMessageHook( hwnd );
                    451: 
                    452:     return TRUE;
                    453: }
                    454: 
                    455: 
                    456: /*
                    457:  *
                    458:  */
                    459: BOOL
                    460: PrintToFileCommandOK(
                    461:     HWND hwnd
                    462: )
                    463: {
                    464:     WCHAR           pFileName[MAX_PATH];
                    465:     WIN32_FIND_DATA FindData;
                    466:     PHANDLE         phFile;
                    467:     HANDLE          hFile;
                    468:     HANDLE          hFind;
                    469: 
                    470:     phFile = (PHANDLE)GetWindowLong( hwnd, GWL_USERDATA );
                    471: 
                    472:     GetDlgItemText( hwnd, IDD_PF_EF_OUTPUTFILENAME,
                    473:                     pFileName, MAX_PATH );
                    474: 
                    475:     hFind = FindFirstFile( pFileName, &FindData );
                    476: 
                    477:     /* If the file already exists, get the user to verify
                    478:      * before we overwrite it:
                    479:      */
                    480:     if( hFind != INVALID_HANDLE_VALUE )
                    481:     {
                    482:         FindClose( hFind );
                    483: 
                    484:         if( Message( hwnd, MSG_CONFIRMATION, IDS_LOCALMONITOR,
                    485:                      IDS_OVERWRITE_EXISTING_FILE )
                    486:             != IDOK )
                    487:         {
                    488:             return TRUE;
                    489:         }
                    490:     }
                    491: 
                    492: 
                    493:     hFile = CreateFile( pFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,
                    494:                         OPEN_ALWAYS,
                    495:                         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
                    496:                         NULL );
                    497: 
                    498:     if( hFile == INVALID_HANDLE_VALUE )
                    499:     {
                    500:         ReportError( hwnd, IDS_LOCALMONITOR, IDS_COULD_NOT_OPEN_FILE );
                    501:     }
                    502: 
                    503:     else
                    504:     {
                    505:         *phFile = hFile;
                    506:         EndDialog( hwnd, TRUE );
                    507:     }
                    508: 
                    509:     return TRUE;
                    510: }
                    511: 
                    512: 
                    513: 
                    514: /*
                    515:  *
                    516:  */
                    517: BOOL
                    518: PrintToFileCommandCancel(
                    519:     HWND hwnd
                    520: )
                    521: {
                    522:     EndDialog(hwnd, FALSE);
                    523:     return TRUE;
                    524: }
                    525: 
                    526: 
                    527: /* The hook handle will be stored in the DWL_USER reserved
                    528:  * storage of the dialog box.
                    529:  */
                    530: #ifdef USER_BUG_10019 /* DWL_USER is being treated as GWL_USERDATA */
                    531: 
                    532: #define SETHOOK( hwnd, hhook ) SetWindowLong( hwnd, DWL_USER, (LONG)hhook )
                    533: #define GETHOOK( hwnd ) (HHOOK)GetWindowLong( hwnd, DWL_USER )
                    534: 
                    535: #else
                    536: 
                    537: HHOOK hGlobalHook;
                    538: #define SETHOOK( hwnd, hhook ) hGlobalHook = hhook
                    539: #define GETHOOK( hwnd ) hGlobalHook
                    540: 
                    541: #endif /* USER_BUG_10019 */
                    542: 
                    543: /* Create a message hook for the current thread.
                    544:  * Since these dialogs are running on separate threads,
                    545:  * it is necessary to create one each time, and to clean
                    546:  * up afterwards.
                    547:  * Also ensures that WM_Help is defined.  This need be done
                    548:  * only once.
                    549:  */
                    550: VOID CreateMessageHook( HWND hwnd )
                    551: {
                    552:     HHOOK hhook;
                    553: 
                    554:     if( !WM_Help )
                    555:         WM_Help = RegisterWindowMessage( L"Print Manager Help Message" );
                    556: 
                    557:     hhook = SetWindowsHookEx( WH_MSGFILTER, MessageProc, hInst,
                    558:                               GetCurrentThreadId( ) );
                    559: 
                    560:     SETHOOK( hwnd, hhook );
                    561: }
                    562: 
                    563: 
                    564: /*
                    565:  *
                    566:  */
                    567: VOID FreeMessageHook( HWND hwnd )
                    568: {
                    569:     UnhookWindowsHookEx( GETHOOK( hwnd ) );
                    570: }
                    571: 
                    572: 
                    573: /*
                    574:  *
                    575:  */
                    576: HWND GetRealParent( HWND hwnd )
                    577: {
                    578:     // run up the parent chain until you find a hwnd
                    579:     // that doesn't have WS_CHILD set
                    580: 
                    581:     while( GetWindowLong( hwnd, GWL_STYLE ) & WS_CHILD )
                    582:         hwnd = (HWND)GetWindowLong( hwnd, GWL_HWNDPARENT );
                    583: 
                    584:     return hwnd;
                    585: }
                    586: 
                    587: 
                    588: /* MessageProc
                    589:  *
                    590:  * This is the callback routine which hooks F1 keypresses in dialogs.
                    591:  *
                    592:  * Any such message will be repackaged as a WM_Help message and sent to the dialog.
                    593:  *
                    594:  * See the Win32 API programming reference for a description of how this
                    595:  * routine works.
                    596:  *
                    597:  * Andrew Bell (andrewbe) - 2 September 1992
                    598:  * This variation for localmon - 3 February 1993
                    599:  */
                    600: LRESULT CALLBACK MessageProc( int Code, WPARAM wParam, LPARAM lParam )
                    601: {
                    602:     PMSG pMsg = (PMSG)lParam;
                    603:     HWND hwndDlg;
                    604: 
                    605:     hwndDlg = GetRealParent( pMsg->hwnd );
                    606: 
                    607:     if( Code < 0 )
                    608:         return CallNextHookEx( GETHOOK( hwndDlg ), Code, wParam, lParam );
                    609: 
                    610:     switch( Code )
                    611:     {
                    612:     case MSGF_DIALOGBOX:
                    613:         if( ( pMsg->message == WM_KEYDOWN ) && ( pMsg->wParam == VK_F1 ) )
                    614:         {
                    615:             PostMessage( hwndDlg, WM_Help, (WPARAM)pMsg->hwnd, 0 );
                    616:             return 1;
                    617:         }
                    618:         break;
                    619:     }
                    620: 
                    621:     return 0;
                    622: }
                    623: 
                    624: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.