Annotation of mstools/samples/sdktools/dlgedit/dialogs.c, revision 1.1

1.1     ! root        1: 
        !             2: /******************************************************************************\
        !             3: *       This is a part of the Microsoft Source Code Samples. 
        !             4: *       Copyright (C) 1993 Microsoft Corporation.
        !             5: *       All rights reserved. 
        !             6: *       This source code is only intended as a supplement to 
        !             7: *       Microsoft Development Tools and/or WinHelp documentation.
        !             8: *       See these sources for detailed information regarding the 
        !             9: *       Microsoft samples programs.
        !            10: \******************************************************************************/
        !            11: 
        !            12: /****************************** Module Header *******************************
        !            13: * Module Name: dialogs.c
        !            14: *
        !            15: * Contains many of the dialogs and supporting routines used by the
        !            16: * dialog box editor.
        !            17: *
        !            18: * Functions:
        !            19: *
        !            20: *    DlgBox()
        !            21: *    EnteringDialog()
        !            22: *    CreateTestDialog()
        !            23: *    DestroyTestDialog()
        !            24: *    SelectDialogDialog()
        !            25: *    ArrangeSettingsDialog()
        !            26: *    AboutDlgProc()
        !            27: *    SelectDialogDlgProc()
        !            28: *    SelectDialogInit()
        !            29: *    SelectDialogFillLangList()
        !            30: *    SelectDialogOK()
        !            31: *    TestDlgProc()
        !            32: *    TestInitDlg()
        !            33: *    ArrangeSettingsDlgProc()
        !            34: *
        !            35: * Comments:
        !            36: * 
        !            37: ****************************************************************************/
        !            38: 
        !            39: #include "dlgedit.h"
        !            40: #include "dlgfuncs.h"
        !            41: #include "dlgextrn.h"
        !            42: #include "dialogs.h"
        !            43: #include "dlghelp.h"
        !            44: 
        !            45: 
        !            46: /*
        !            47:  * Maximum number of characters in the Arrange Settings fields.
        !            48:  */
        !            49: #define CCHARRSETMAX    2
        !            50: 
        !            51: DIALOGPROC SelectDialogDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
        !            52: STATICFN VOID SelectDialogInit(HWND hwnd);
        !            53: STATICFN VOID SelectDialogFillLangList(HWND hwnd);
        !            54: STATICFN BOOL SelectDialogOK(HWND hwnd);
        !            55: DIALOGPROC TestDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
        !            56: STATICFN VOID TestInitDlg(HWND hwnd);
        !            57: DIALOGPROC ArrangeSettingsDlgProc(HWND hwnd, UINT msg, WPARAM wParam,
        !            58:     LPARAM lParam);
        !            59: 
        !            60: 
        !            61: 
        !            62: /************************************************************************
        !            63: * DlgBox
        !            64: *
        !            65: * This function basically does a DialogBox, but it does it safely
        !            66: * for the dialog editor, saving some states.
        !            67: *
        !            68: * Arguments:
        !            69: *     INT idDlg       = Ordinal name of the dialog.
        !            70: *     WNDPROC lpfnDlg = Dialog procedure to use (this function will
        !            71: *                       call Make/FreeProcInstance).
        !            72: *
        !            73: * Returns:
        !            74: *     What DialogBox returned.
        !            75: *
        !            76: ************************************************************************/
        !            77: 
        !            78: INT DlgBox(
        !            79:     INT idDlg,
        !            80:     WNDPROC lpfnDlg)
        !            81: {
        !            82:     INT nResult;
        !            83:     INT idPrevDlg;
        !            84: 
        !            85:     EnteringDialog(idDlg, &idPrevDlg, TRUE);
        !            86:     nResult = DialogBox(ghInst, MAKEINTRESOURCE(idDlg), ghwndMain, (DLGPROC)lpfnDlg);
        !            87:     EnteringDialog(idPrevDlg, NULL, FALSE);
        !            88: 
        !            89:     return nResult;
        !            90: }
        !            91: 
        !            92: 
        !            93: 
        !            94: /************************************************************************
        !            95: * EnteringDialog
        !            96: *
        !            97: * This function enables or disables things based on whether we are
        !            98: * going to show one of the editor's dialogs.  It must be called
        !            99: * before and after showing a dialog box.
        !           100: *
        !           101: * Arguments:
        !           102: *   INT idDlg       - Ordinal name of the dialog.
        !           103: *   PINT pidPrevDlg - Points to where to save the id of the previous
        !           104: *                     (current) dialog.  If fEntering is FALSE, this
        !           105: *                     is not used and should be NULL.
        !           106: *   BOOL fEntering  - TRUE if about ready to show the dialog.  FALSE if
        !           107: *                     the dialog was just dismissed.  For the FALSE case,
        !           108: *                     the idDlg should be zero, or the id of the previous
        !           109: *                     dialog.
        !           110: *
        !           111: ************************************************************************/
        !           112: 
        !           113: VOID EnteringDialog(
        !           114:     INT idDlg,
        !           115:     PINT pidPrevDlg,
        !           116:     BOOL fEntering)
        !           117: {
        !           118:     /*
        !           119:      * If we are entering a new dialog, save the previous dialog
        !           120:      * in the place specified.
        !           121:      */
        !           122:     if (fEntering)
        !           123:         *pidPrevDlg = gidCurrentDlg;
        !           124: 
        !           125:     gfDisabled = fEntering;
        !           126:     gidCurrentDlg = idDlg;
        !           127:     StatusSetEnable();
        !           128: 
        !           129:     if (ghwndToolbox)
        !           130:         EnableWindow(ghwndToolbox, !fEntering);
        !           131: }
        !           132: 
        !           133: 
        !           134: 
        !           135: /************************************************************************
        !           136: * SelectDialogDialog
        !           137: *
        !           138: * This function saves the current dialog box in the resource in
        !           139: * memory, then it puts up a dialog box with a list of dialog
        !           140: * boxes in the resource.  Finally it puts up the selected dialog.
        !           141: *
        !           142: ************************************************************************/
        !           143: 
        !           144: VOID SelectDialogDialog(VOID)
        !           145: {
        !           146:     if (!SynchDialogResource())
        !           147:         return;
        !           148: 
        !           149:     DlgBox(DID_SELECTDIALOG, (WNDPROC)SelectDialogDlgProc);
        !           150: }
        !           151: 
        !           152: 
        !           153: 
        !           154: /************************************************************************
        !           155: * SelectDialogDlgProc
        !           156: *
        !           157: * This is the View Dialog dialog procedure.
        !           158: *
        !           159: * Arguments:
        !           160: *    HWND - handle to the dialog
        !           161: *    UINT - window message
        !           162: *    WPARAM - message parameter 
        !           163: *    LPARAM - message parameter
        !           164: *
        !           165: * Returns:
        !           166: *    Default dialog return.
        !           167: *
        !           168: ************************************************************************/
        !           169: 
        !           170: DIALOGPROC SelectDialogDlgProc(
        !           171:     HWND hwnd,
        !           172:     UINT msg,
        !           173:     WPARAM wParam,
        !           174:     LPARAM lParam)
        !           175: {
        !           176:     switch (msg) {
        !           177:         case WM_INITDIALOG:
        !           178:             SelectDialogInit(hwnd);
        !           179:             return TRUE;
        !           180: 
        !           181:         case WM_COMMAND:
        !           182:             switch (LOWORD(wParam)) {
        !           183:                 case DID_SELECTDIALOGNAMELIST:
        !           184:                     switch (HIWORD(wParam)) {
        !           185:                         case LBN_SELCHANGE:
        !           186:                             SelectDialogFillLangList(hwnd);
        !           187:                             break;
        !           188: 
        !           189:                         case LBN_DBLCLK:
        !           190:                             if (SelectDialogOK(hwnd))
        !           191:                                 EndDialog(hwnd, IDOK);
        !           192: 
        !           193:                             break;
        !           194:                     }
        !           195: 
        !           196:                     break;
        !           197: 
        !           198:                 case DID_SELECTDIALOGLANGLIST:
        !           199:                     switch (HIWORD(wParam)) {
        !           200:                         case LBN_DBLCLK:
        !           201:                             if (SelectDialogOK(hwnd))
        !           202:                                 EndDialog(hwnd, IDOK);
        !           203: 
        !           204:                             break;
        !           205:                     }
        !           206: 
        !           207:                     break;
        !           208: 
        !           209:                 case IDOK:
        !           210:                     if (SelectDialogOK(hwnd))
        !           211:                         EndDialog(hwnd, IDOK);
        !           212: 
        !           213:                     break;
        !           214: 
        !           215:                 case IDCANCEL:
        !           216:                     EndDialog(hwnd, IDCANCEL);
        !           217:                     break;
        !           218: 
        !           219:                 case IDHELP:
        !           220:                     WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
        !           221:                             HELPID_SELECTDIALOG);
        !           222:                     break;
        !           223:             }
        !           224: 
        !           225:             return TRUE;
        !           226: 
        !           227:         default:
        !           228:             return FALSE;
        !           229:     }
        !           230: }
        !           231: 
        !           232: 
        !           233: 
        !           234: /************************************************************************
        !           235: * SelectDialogInit
        !           236: *
        !           237: * Processes the WM_INITDIALOG message for the Select Dialog dialog
        !           238: * procedure.
        !           239: *
        !           240: * This function fills the select dialog listbox with the names or
        !           241: * numbers of all the dialogs in the resource list.  If the dialog has
        !           242: * a name, that is used.  If it just has an ordinal, then the decimal
        !           243: * ascii string for the ordinal number is used.
        !           244: *
        !           245: * Arguments:
        !           246: *    HWND - handle to the dialog
        !           247: *
        !           248: ************************************************************************/
        !           249: 
        !           250: STATICFN VOID SelectDialogInit(
        !           251:     HWND hwnd)
        !           252: {
        !           253:     HWND hwndNameLB;
        !           254:     TCHAR szName[CCHTEXTMAX];
        !           255:     INT i;
        !           256:     INT cDlgsAdded;
        !           257:     INT iSelect;
        !           258:     PRESLINK prl;
        !           259:     PRESLINK prl2;
        !           260:     LPTSTR pszName;
        !           261:     NPLABEL npLabel;
        !           262: 
        !           263:     hwndNameLB = GetDlgItem(hwnd, DID_SELECTDIALOGNAMELIST);
        !           264:     cDlgsAdded = 0;
        !           265: 
        !           266:     /*
        !           267:      * Insert each dialog found in the resource.
        !           268:      */
        !           269:     for (prl = gprlHead; prl; prl = prl->prlNext) {
        !           270:         if (prl->fDlgResource) {
        !           271:             /*
        !           272:              * Check to be sure we have not added a dialog with this
        !           273:              * name already (but perhaps a different language).
        !           274:              */
        !           275:             for (prl2 = gprlHead; prl2 != prl; prl2 = prl2->prlNext) {
        !           276:                 if (prl2->fDlgResource) {
        !           277:                     if (NameOrdCmp(prl2->pszName, prl->pszName) == 0)
        !           278:                         break;
        !           279:                 }
        !           280:             }
        !           281: 
        !           282:             if (prl2 == prl) {
        !           283:                 /*
        !           284:                  * If the name is an ordinal, display a number.  If there
        !           285:                  * happens to be a define for this number, display that
        !           286:                  * instead, however.
        !           287:                  *
        !           288:                  * Note that we do not ever show it in hex, because
        !           289:                  * rc.exe does not parse hex ordinals for dialogs, so
        !           290:                  * we never show it in that format.
        !           291:                  */
        !           292:                 if (IsOrd(prl->pszName)) {
        !           293:                     if (npLabel = FindID(OrdID(prl->pszName), plInclude))
        !           294:                         pszName = npLabel->pszLabel;
        !           295:                     else
        !           296:                         pszName = itoaw(OrdID(prl->pszName), szName, 10);
        !           297:                 }
        !           298:                 else {
        !           299:                     pszName = prl->pszName;
        !           300:                 }
        !           301: 
        !           302:                 i = (INT)SendMessage(hwndNameLB, LB_ADDSTRING, 0, (DWORD)pszName);
        !           303:                 SendMessage(hwndNameLB, LB_SETITEMDATA, i, (DWORD)prl);
        !           304:                 cDlgsAdded++;
        !           305:             }
        !           306:         }
        !           307:     }
        !           308: 
        !           309:     /*
        !           310:      * If there is a current dialog, search for it and
        !           311:      * make it the default selected item.
        !           312:      */
        !           313:     iSelect = 0;
        !           314:     if (gcd.prl) {
        !           315:         for (i = 0; i < cDlgsAdded; i++) {
        !           316:             prl = (PRESLINK)SendMessage(hwndNameLB, LB_GETITEMDATA, i, 0L);
        !           317:             if (NameOrdCmp(prl->pszName, gcd.prl->pszName) == 0) {
        !           318:                 iSelect = i;
        !           319:                 break;
        !           320:             }
        !           321:         }
        !           322:     }
        !           323: 
        !           324:     SendMessage(hwndNameLB, LB_SETCURSEL, iSelect, 0L);
        !           325: 
        !           326:     SelectDialogFillLangList(hwnd);
        !           327: 
        !           328:     CenterWindow(hwnd);
        !           329: }
        !           330: 
        !           331: 
        !           332: 
        !           333: /************************************************************************
        !           334: * SelectDialogFillLangList
        !           335: *
        !           336: * Fills the listbox with the list of dialogs matching the specified name
        !           337: *
        !           338: * Arguments:
        !           339: *    HWND - handle to the dialog editor window
        !           340: *
        !           341: ************************************************************************/
        !           342: 
        !           343: STATICFN VOID SelectDialogFillLangList(
        !           344:     HWND hwnd)
        !           345: {
        !           346:     TCHAR szLang[CCHTEXTMAX];
        !           347:     HWND hwndNameLB;
        !           348:     HWND hwndLangLB;
        !           349:     PRESLINK prl;
        !           350:     INT i;
        !           351:     INT iSelect;
        !           352:     WORD wPrimary;
        !           353:     WORD wSubLang;
        !           354:     INT iLang;
        !           355:     INT iSubLang;
        !           356:     LPTSTR pszName;
        !           357:     INT cItems;
        !           358: 
        !           359:     hwndNameLB = GetDlgItem(hwnd, DID_SELECTDIALOGNAMELIST);
        !           360:     hwndLangLB = GetDlgItem(hwnd, DID_SELECTDIALOGLANGLIST);
        !           361: 
        !           362:     SendMessage(hwndLangLB, LB_RESETCONTENT, 0, 0);
        !           363: 
        !           364:     if ((iSelect = (INT)SendMessage(hwndNameLB, LB_GETCURSEL, 0, 0)) == LB_ERR)
        !           365:         return;
        !           366: 
        !           367:     /*
        !           368:      * Get the name of the dialog selected in the Name listbox
        !           369:      * (the reslink pointer is stored in the listbox items data field).
        !           370:      */
        !           371:     prl = (PRESLINK)SendMessage(hwndNameLB, LB_GETITEMDATA, iSelect, 0L);
        !           372:     pszName = prl->pszName;
        !           373: 
        !           374:     /*
        !           375:      * Insert each dialog found in the resource that matches that name.
        !           376:      */
        !           377:     for (prl = gprlHead; prl; prl = prl->prlNext) {
        !           378:         if (prl->fDlgResource && NameOrdCmp(prl->pszName, pszName) == 0) {
        !           379:             wPrimary = (WORD)PRIMARYLANGID(prl->wLanguage);
        !           380:             for (iLang = 0; iLang < gcLanguages; iLang++) {
        !           381:                 if (gaLangTable[iLang].wPrimary == wPrimary) {
        !           382:                     break;
        !           383:                 }
        !           384:             }
        !           385: 
        !           386:             wSubLang = SUBLANGID(prl->wLanguage);
        !           387:             for (iSubLang = 0;
        !           388:                     iSubLang < gaLangTable[iLang].cSubLangs;
        !           389:                     iSubLang++) {
        !           390:                 if (wSubLang == gaLangTable[iLang].asl[iSubLang].wSubLang) {
        !           391:                     break;
        !           392:                 }
        !           393:             }
        !           394: 
        !           395:             wsprintf(szLang, L"%s, %s",
        !           396:                     ids(gaLangTable[iLang].idsLangDesc),
        !           397:                     ids(gaLangTable[iLang].asl[iSubLang].idsSubLangDesc));
        !           398: 
        !           399:             i = (INT)SendMessage(hwndLangLB, LB_ADDSTRING, 0, (DWORD)szLang);
        !           400:             SendMessage(hwndLangLB, LB_SETITEMDATA, i, (DWORD)prl);
        !           401:         }
        !           402:     }
        !           403: 
        !           404:     iSelect = 0;
        !           405:     cItems = (INT)SendMessage(hwndLangLB, LB_GETCOUNT, 0, 0);
        !           406:     if (gcd.prl && NameOrdCmp(gcd.prl->pszName, pszName) == 0) {
        !           407:         for (i = 0; i < cItems; i++) {
        !           408:             prl = (PRESLINK)SendMessage(hwndLangLB, LB_GETITEMDATA, i, 0);
        !           409:             if (gcd.prl == prl) {
        !           410:                 iSelect = i;
        !           411:                 break;
        !           412:             }
        !           413:         }
        !           414:     }
        !           415: 
        !           416:     SendMessage(hwndLangLB, LB_SETCURSEL, iSelect, 0L);
        !           417: }
        !           418: 
        !           419: 
        !           420: 
        !           421: /************************************************************************
        !           422: * SelectDialogOK
        !           423: *
        !           424: * Processes the selection of a new dialog from the Select Dialog
        !           425: * dialog procedure.
        !           426: *
        !           427: * Arguments:
        !           428: *    HWND - handle to the select dialog box
        !           429: *
        !           430: * Returns:
        !           431: *    TRUE 
        !           432: *
        !           433: ************************************************************************/
        !           434: 
        !           435: STATICFN BOOL SelectDialogOK(
        !           436:     HWND hwnd)
        !           437: {
        !           438:     HWND hwndLangLB;
        !           439:     INT iSelect;
        !           440:     PRESLINK prl;
        !           441: 
        !           442:     hwndLangLB = GetDlgItem(hwnd, DID_SELECTDIALOGLANGLIST);
        !           443: 
        !           444:     if ((iSelect = (INT)SendMessage(hwndLangLB, LB_GETCURSEL, 0, 0)) !=
        !           445:             LB_ERR) {
        !           446:         /*
        !           447:          * Get a pointer to the selected dialog (stored in the listbox
        !           448:          * items data field).
        !           449:          */
        !           450:         prl = (PRESLINK)SendMessage(hwndLangLB, LB_GETITEMDATA, iSelect, 0L);
        !           451: 
        !           452:         /*
        !           453:          * Is there a dialog currently being edited?
        !           454:          */
        !           455:         if (gfEditingDlg) {
        !           456:             /*
        !           457:              * If they chose the same dialog as what they are currently
        !           458:              * editing, just get out without doing anything more.
        !           459:              * Otherwise, delete the current dialog because we are
        !           460:              * now committed to loading a new one.
        !           461:              */
        !           462:             if (prl == gcd.prl)
        !           463:                 return TRUE;
        !           464:             else
        !           465:                 DeleteDialog(FALSE);
        !           466:         }
        !           467: 
        !           468:         /*
        !           469:          * Finally, load the new dialog (make it current).
        !           470:          */
        !           471:         ResLinkToDialog(prl);
        !           472: 
        !           473:         /*
        !           474:          * Select the new dialog, if it was successfully created.
        !           475:          */
        !           476:         if (gfEditingDlg)
        !           477:             SelectControl(gcd.npc, FALSE);
        !           478:     }
        !           479: 
        !           480:     return TRUE;
        !           481: }
        !           482: 
        !           483: 
        !           484: 
        !           485: /************************************************************************
        !           486: * CreateTestDialog
        !           487: *
        !           488: * Creates a dialog for the test mode of the dialog editor
        !           489: *
        !           490: ************************************************************************/
        !           491: 
        !           492: VOID CreateTestDialog(VOID)
        !           493: {
        !           494:     PRES pRes;
        !           495:     PDIALOGBOXHEADER pdbh;
        !           496: 
        !           497:     if (!gfEditingDlg)
        !           498:         return;
        !           499: 
        !           500:     CancelSelection(TRUE);
        !           501: 
        !           502:     /*
        !           503:      * Save the current dialog in the resource buffer.
        !           504:      */
        !           505:     if (!SynchDialogResource())
        !           506:         return;
        !           507: 
        !           508:     /*
        !           509:      * Make a memory copy of the current dialog resource for test mode.
        !           510:      */
        !           511:     if (!(pRes = AllocDialogResource(TRUE, FALSE)))
        !           512:         return;
        !           513: 
        !           514:     pdbh = (PDIALOGBOXHEADER)SkipResHeader(pRes);
        !           515: 
        !           516:     /*
        !           517:      * Create the test dialog in a modeless loop using the test dialog proc.
        !           518:      */
        !           519:     ghwndTestDlg = CreateDialogIndirect(ghInst, (LPDLGTEMPLATE)pdbh,
        !           520:             ghwndSubClient, TestDlgProc);
        !           521: 
        !           522:     if (ghwndTestDlg) {
        !           523:         gfTestMode = TRUE;
        !           524: 
        !           525:         /*
        !           526:          * Disable various top level menus.
        !           527:          */
        !           528:         MyEnableMenuItemByPos(ghMenuMain, MENUPOS_FILE, FALSE);
        !           529:         MyEnableMenuItemByPos(ghMenuMain, MENUPOS_EDIT, FALSE);
        !           530:         MyEnableMenuItemByPos(ghMenuMain, MENUPOS_ARRANGE, FALSE);
        !           531:         DrawMenuBar(ghwndMain);
        !           532: 
        !           533:         ToolboxSelectTool(W_NOTHING, FALSE);
        !           534:         if (gfShowToolbox)
        !           535:             ToolboxShow(FALSE);
        !           536: 
        !           537:         StatusSetEnable();
        !           538: 
        !           539:         /*
        !           540:          * Remove the work mode dialog from view (actually, it is now
        !           541:          * hidden behind the test dialog, but we hide it in case the
        !           542:          * user moves the test dialog.
        !           543:          */
        !           544:         ShowWindow(gcd.npc->hwnd, SW_HIDE);
        !           545:     }
        !           546: }
        !           547: 
        !           548: 
        !           549: 
        !           550: /************************************************************************
        !           551: * TestDlgProc
        !           552: *
        !           553: * This is the dialog procedure for the dialog in Test mode.
        !           554: *
        !           555: ************************************************************************/
        !           556: 
        !           557: DIALOGPROC TestDlgProc(
        !           558:     HWND hwnd,
        !           559:     UINT msg,
        !           560:     WPARAM wParam,
        !           561:     LPARAM lParam)
        !           562: {
        !           563:     switch (msg) {
        !           564:         case WM_INITDIALOG:
        !           565:             TestInitDlg(hwnd);
        !           566:             return TRUE;
        !           567: 
        !           568:         case WM_SYSCOMMAND:
        !           569:             if (wParam == SC_CLOSE) {
        !           570:                 DestroyTestDialog();
        !           571:                 return TRUE;
        !           572:             }
        !           573: 
        !           574:             return FALSE;
        !           575: 
        !           576:         case WM_DRAWITEM:
        !           577:             return DrawOwnerDrawButton((LPDRAWITEMSTRUCT)lParam);
        !           578: 
        !           579:         case WM_DESTROY:
        !           580:             gfTestMode = FALSE;
        !           581: 
        !           582:             ShowWindow(gcd.npc->hwnd, SW_SHOWNA);
        !           583: 
        !           584:             /*
        !           585:              * Enable various top level menus.
        !           586:              */
        !           587:             MyEnableMenuItemByPos(ghMenuMain, MENUPOS_FILE, TRUE);
        !           588:             MyEnableMenuItemByPos(ghMenuMain, MENUPOS_EDIT, TRUE);
        !           589:             MyEnableMenuItemByPos(ghMenuMain, MENUPOS_ARRANGE, TRUE);
        !           590:             DrawMenuBar(ghwndMain);
        !           591: 
        !           592:             if (gfShowToolbox)
        !           593:                 ToolboxShow(TRUE);
        !           594: 
        !           595:             StatusSetEnable();
        !           596: 
        !           597:             return TRUE;
        !           598: 
        !           599:         default:
        !           600:             return FALSE;
        !           601:     }
        !           602: }
        !           603: 
        !           604: 
        !           605: 
        !           606: /************************************************************************
        !           607: * TestInitDlg
        !           608: *
        !           609: * This function handles the initialization of the test dialog.
        !           610: *
        !           611: * Arguments:
        !           612: *     HWND hwnd = The test dialog window handle.
        !           613: *
        !           614: ************************************************************************/
        !           615: 
        !           616: STATICFN VOID TestInitDlg(
        !           617:     HWND hwnd)
        !           618: {
        !           619:     register INT i;
        !           620:     TCHAR szBuf[CCHTEXTMAX];
        !           621:     HWND hwndCtrl;
        !           622:     LPTSTR pszTextEnd;
        !           623:     TCHAR szClass[32];
        !           624:     INT iClass;
        !           625: 
        !           626:     /*
        !           627:      * The following will fill some controls with sample text lines.
        !           628:      */
        !           629:     lstrcpy(szBuf, ids(IDS_DEFLBTEXT));
        !           630:     pszTextEnd = szBuf + lstrlen(szBuf);
        !           631:     hwndCtrl = GetWindow(hwnd, GW_CHILD);
        !           632:     while (hwndCtrl) {
        !           633:         GetClassName(hwndCtrl, szClass, sizeof(szClass));
        !           634: 
        !           635:         switch (iClass = GetiClass(szClass)) {
        !           636:             case IC_LISTBOX:
        !           637:             case IC_COMBOBOX:
        !           638:                 /*
        !           639:                  * Fill listboxes and comboboxes with some sample lines.
        !           640:                  */
        !           641:                 for (i = 1; i <= CLBTESTLINES; i++) {
        !           642:                     itoaw(i, pszTextEnd, 10);
        !           643:                     SendMessage(hwndCtrl,
        !           644:                             (WORD)((iClass == IC_LISTBOX) ?
        !           645:                             LB_INSERTSTRING : CB_INSERTSTRING),
        !           646:                             (WPARAM)-1, (DWORD)szBuf);
        !           647:                 }
        !           648: 
        !           649:                 break;
        !           650:         }
        !           651: 
        !           652:         hwndCtrl = GetWindow(hwndCtrl, GW_HWNDNEXT);
        !           653:     }
        !           654: }
        !           655: 
        !           656: 
        !           657: 
        !           658: /************************************************************************
        !           659: * DestroyTestDialog
        !           660: *
        !           661: * Destroys the test dialog window.
        !           662: ************************************************************************/
        !           663: 
        !           664: VOID DestroyTestDialog(VOID)
        !           665: {
        !           666:     DestroyWindow(ghwndTestDlg);
        !           667:     ghwndTestDlg = NULL;
        !           668: }
        !           669: 
        !           670: 
        !           671: 
        !           672: /************************************************************************
        !           673: * ArrangeSettingsDialog
        !           674: *
        !           675: * This function displays the Arrange Settings dialog box.
        !           676: *
        !           677: ************************************************************************/
        !           678: 
        !           679: VOID ArrangeSettingsDialog(VOID)
        !           680: {
        !           681:     DlgBox(DID_ARRSETTINGS, (WNDPROC)ArrangeSettingsDlgProc);
        !           682: }
        !           683: 
        !           684: 
        !           685: 
        !           686: /************************************************************************
        !           687: * ArrangeSettingsDlgProc
        !           688: *
        !           689: * This is the Arrange Settings dialog procedure.
        !           690: *
        !           691: ************************************************************************/
        !           692: 
        !           693: DIALOGPROC ArrangeSettingsDlgProc(
        !           694:     HWND hwnd,
        !           695:     UINT msg,
        !           696:     WPARAM wParam,
        !           697:     LPARAM lParam)
        !           698: {
        !           699:     switch (msg) {
        !           700:         case WM_INITDIALOG:
        !           701:             SendDlgItemMessage(hwnd, DID_ARRSETCXGRID, EM_LIMITTEXT,
        !           702:                     CCHARRSETMAX, 0L);
        !           703:             SendDlgItemMessage(hwnd, DID_ARRSETCYGRID, EM_LIMITTEXT,
        !           704:                     CCHARRSETMAX, 0L);
        !           705:             SetDlgItemInt(hwnd, DID_ARRSETCXGRID, gcxGrid, TRUE);
        !           706:             SetDlgItemInt(hwnd, DID_ARRSETCYGRID, gcyGrid, TRUE);
        !           707: 
        !           708:             SendDlgItemMessage(hwnd, DID_ARRSETXMARGIN, EM_LIMITTEXT,
        !           709:                     CCHARRSETMAX, 0L);
        !           710:             SendDlgItemMessage(hwnd, DID_ARRSETYMARGIN, EM_LIMITTEXT,
        !           711:                     CCHARRSETMAX, 0L);
        !           712:             SetDlgItemInt(hwnd, DID_ARRSETXMARGIN, gxMargin, TRUE);
        !           713:             SetDlgItemInt(hwnd, DID_ARRSETYMARGIN, gyMargin, TRUE);
        !           714: 
        !           715:             SendDlgItemMessage(hwnd, DID_ARRSETXSPACE, EM_LIMITTEXT,
        !           716:                     CCHARRSETMAX, 0L);
        !           717:             SendDlgItemMessage(hwnd, DID_ARRSETYSPACE, EM_LIMITTEXT,
        !           718:                     CCHARRSETMAX, 0L);
        !           719:             SetDlgItemInt(hwnd, DID_ARRSETXSPACE, gxSpace, TRUE);
        !           720:             SetDlgItemInt(hwnd, DID_ARRSETYSPACE, gySpace, TRUE);
        !           721: 
        !           722:             SendDlgItemMessage(hwnd, DID_ARRSETXMINPUSHSPACE, EM_LIMITTEXT,
        !           723:                     CCHARRSETMAX, 0L);
        !           724:             SendDlgItemMessage(hwnd, DID_ARRSETXMAXPUSHSPACE, EM_LIMITTEXT,
        !           725:                     CCHARRSETMAX, 0L);
        !           726:             SendDlgItemMessage(hwnd, DID_ARRSETYPUSHSPACE, EM_LIMITTEXT,
        !           727:                     CCHARRSETMAX, 0L);
        !           728:             SetDlgItemInt(hwnd, DID_ARRSETXMINPUSHSPACE, gxMinPushSpace, TRUE);
        !           729:             SetDlgItemInt(hwnd, DID_ARRSETXMAXPUSHSPACE, gxMaxPushSpace, TRUE);
        !           730:             SetDlgItemInt(hwnd, DID_ARRSETYPUSHSPACE, gyPushSpace, TRUE);
        !           731: 
        !           732:             CenterWindow(hwnd);
        !           733: 
        !           734:             return TRUE;
        !           735: 
        !           736:         case WM_COMMAND:
        !           737:             switch (LOWORD(wParam)) {
        !           738:                 INT cxGridNew;
        !           739:                 INT cyGridNew;
        !           740:                 INT xMarginNew;
        !           741:                 INT yMarginNew;
        !           742:                 INT xSpaceNew;
        !           743:                 INT ySpaceNew;
        !           744:                 INT xMinPushSpaceNew;
        !           745:                 INT xMaxPushSpaceNew;
        !           746:                 INT yPushSpaceNew;
        !           747:                 BOOL fTranslated1;
        !           748:                 BOOL fTranslated2;
        !           749:                 BOOL fTranslated3;
        !           750: 
        !           751:                 case IDOK:
        !           752:                     cxGridNew = GetDlgItemInt(hwnd, DID_ARRSETCXGRID,
        !           753:                             &fTranslated1, TRUE);
        !           754:                     cyGridNew = GetDlgItemInt(hwnd, DID_ARRSETCYGRID,
        !           755:                             &fTranslated2, TRUE);
        !           756: 
        !           757:                     if (!fTranslated1 || !fTranslated2 ||
        !           758:                             cxGridNew <= 0 || cyGridNew <= 0) {
        !           759:                         Message(MSG_GTZERO, ids(IDS_GRID));
        !           760:                         SetFocus(GetDlgItem(hwnd, DID_ARRSETCXGRID));
        !           761:                         break;
        !           762:                     }
        !           763: 
        !           764:                     xMarginNew = GetDlgItemInt(hwnd, DID_ARRSETXMARGIN,
        !           765:                             &fTranslated1, TRUE);
        !           766:                     yMarginNew = GetDlgItemInt(hwnd, DID_ARRSETYMARGIN,
        !           767:                             &fTranslated2, TRUE);
        !           768: 
        !           769:                     if (!fTranslated1 || !fTranslated2 ||
        !           770:                             xMarginNew < 0 || yMarginNew < 0) {
        !           771:                         Message(MSG_POSITIVENUM, ids(IDS_MARGIN));
        !           772:                         SetFocus(GetDlgItem(hwnd, DID_ARRSETXMARGIN));
        !           773:                         break;
        !           774:                     }
        !           775: 
        !           776:                     xSpaceNew = GetDlgItemInt(hwnd, DID_ARRSETXSPACE,
        !           777:                             &fTranslated1, TRUE);
        !           778:                     ySpaceNew = GetDlgItemInt(hwnd, DID_ARRSETYSPACE,
        !           779:                             &fTranslated2, TRUE);
        !           780: 
        !           781:                     if (!fTranslated1 || !fTranslated2 ||
        !           782:                             xSpaceNew < 0 || ySpaceNew < 0) {
        !           783:                         Message(MSG_POSITIVENUM, ids(IDS_CTRLSPACING));
        !           784:                         SetFocus(GetDlgItem(hwnd, DID_ARRSETXSPACE));
        !           785:                         break;
        !           786:                     }
        !           787: 
        !           788:                     xMinPushSpaceNew = GetDlgItemInt(hwnd,
        !           789:                             DID_ARRSETXMINPUSHSPACE, &fTranslated1, TRUE);
        !           790:                     xMaxPushSpaceNew = GetDlgItemInt(hwnd,
        !           791:                             DID_ARRSETXMAXPUSHSPACE, &fTranslated2, TRUE);
        !           792:                     yPushSpaceNew = GetDlgItemInt(hwnd, DID_ARRSETYPUSHSPACE,
        !           793:                             &fTranslated3, TRUE);
        !           794: 
        !           795:                     if (!fTranslated1 || !fTranslated2 || !fTranslated3 ||
        !           796:                             xMinPushSpaceNew < 0 || xMaxPushSpaceNew < 0 ||
        !           797:                             yPushSpaceNew < 0) {
        !           798:                         Message(MSG_POSITIVENUM, ids(IDS_PUSHSPACING));
        !           799:                         SetFocus(GetDlgItem(hwnd, DID_ARRSETXMINPUSHSPACE));
        !           800:                         break;
        !           801:                     }
        !           802: 
        !           803:                     if (xMinPushSpaceNew > xMaxPushSpaceNew) {
        !           804:                         Message(MSG_MINGTMAXSPACE);
        !           805:                         SetFocus(GetDlgItem(hwnd, DID_ARRSETXMINPUSHSPACE));
        !           806:                         break;
        !           807:                     }
        !           808: 
        !           809:                     gcxGrid = cxGridNew;
        !           810:                     gcyGrid = cyGridNew;
        !           811:                     gxMargin = xMarginNew;
        !           812:                     gyMargin = yMarginNew;
        !           813:                     gxSpace = xSpaceNew;
        !           814:                     gySpace = ySpaceNew;
        !           815:                     gxMinPushSpace = xMinPushSpaceNew;
        !           816:                     gxMaxPushSpace = xMaxPushSpaceNew;
        !           817:                     gyPushSpace = yPushSpaceNew;
        !           818: 
        !           819:                     EndDialog(hwnd, LOWORD(wParam));
        !           820:                     break;
        !           821: 
        !           822:                 case DID_ARRSETDEFAULTS:
        !           823:                     SetDlgItemInt(hwnd, DID_ARRSETCXGRID,
        !           824:                             DEFCXGRID, TRUE);
        !           825:                     SetDlgItemInt(hwnd, DID_ARRSETCYGRID,
        !           826:                             DEFCYGRID, TRUE);
        !           827: 
        !           828:                     SetDlgItemInt(hwnd, DID_ARRSETXMARGIN,
        !           829:                             DEFXMARGIN, TRUE);
        !           830:                     SetDlgItemInt(hwnd, DID_ARRSETYMARGIN,
        !           831:                             DEFYMARGIN, TRUE);
        !           832: 
        !           833:                     SetDlgItemInt(hwnd, DID_ARRSETXSPACE,
        !           834:                             DEFXSPACE, TRUE);
        !           835:                     SetDlgItemInt(hwnd, DID_ARRSETYSPACE,
        !           836:                             DEFYSPACE, TRUE);
        !           837: 
        !           838:                     SetDlgItemInt(hwnd, DID_ARRSETXMINPUSHSPACE,
        !           839:                             DEFXMINPUSHSPACE, TRUE);
        !           840:                     SetDlgItemInt(hwnd, DID_ARRSETXMAXPUSHSPACE,
        !           841:                             DEFXMAXPUSHSPACE, TRUE);
        !           842:                     SetDlgItemInt(hwnd, DID_ARRSETYPUSHSPACE,
        !           843:                             DEFYPUSHSPACE, TRUE);
        !           844: 
        !           845:                     break;
        !           846: 
        !           847:                 case IDCANCEL:
        !           848:                     EndDialog(hwnd, IDCANCEL);
        !           849:                     break;
        !           850: 
        !           851:                 case IDHELP:
        !           852:                     WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
        !           853:                             HELPID_ARRSETTINGS);
        !           854:                     break;
        !           855:             }
        !           856: 
        !           857:             return TRUE;
        !           858: 
        !           859:         default:
        !           860:             return FALSE;
        !           861:     }
        !           862: }
        !           863: 
        !           864: 
        !           865: 
        !           866: /************************************************************************
        !           867: * AboutDlgProc
        !           868: *
        !           869: * This is the About Box dialog procedure.
        !           870: *
        !           871: ************************************************************************/
        !           872: 
        !           873: DIALOGPROC AboutDlgProc(
        !           874:     HWND hwnd,
        !           875:     UINT msg,
        !           876:     WPARAM wParam,
        !           877:     LPARAM lParam)
        !           878: {
        !           879:     switch (msg) {
        !           880:         case WM_INITDIALOG:
        !           881:             {
        !           882:                 TCHAR szVersion[CCHTEXTMAX];
        !           883: 
        !           884:                 lstrcpy(szVersion, ids(IDS_APPVERSION));
        !           885:                 lstrcat(szVersion, ids(IDS_APPVERSIONMINOR));
        !           886: 
        !           887:                 SetDlgItemText(hwnd, DID_ABOUTVERSION, szVersion);
        !           888:                 CenterWindow(hwnd);
        !           889:             }
        !           890: 
        !           891:             return TRUE;
        !           892: 
        !           893:         case WM_COMMAND:
        !           894:             EndDialog(hwnd, IDOK);
        !           895:             return TRUE;
        !           896: 
        !           897:         default:
        !           898:             return FALSE;
        !           899:     }
        !           900: }

unix.superglobalmegacorp.com

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