home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / sdk / mapi / win16 / dev / mdbview / fld.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-11  |  147.2 KB  |  4,589 lines

  1. /*******************************************************************/
  2. /*
  3.  -  fld.cpp
  4.  -  Copyright (C) 1995 Microsoft Corporation
  5.  -
  6.  *  Purpose:
  7.  *      Contains member functions for CFolderDlg
  8.  */
  9. /*******************************************************************/
  10.  
  11. #undef  CINTERFACE      // C++ calling convention for mapi calls
  12.  
  13.  
  14. #define XVPORT
  15.  
  16. #ifdef WIN32
  17. #ifdef _WIN95
  18. #define _INC_OLE
  19. #endif
  20. #define INC_OLE2
  21. #define INC_RPC
  22. #endif
  23.  
  24. #include <afxwin.h>
  25. #include <windowsx.h>
  26. #include <string.h>
  27.  
  28. #ifdef WIN16
  29. #include <compobj.h>
  30. #endif
  31.  
  32. #ifdef WIN32
  33. #include <objbase.h>
  34. #include <objerror.h>
  35. #ifdef _WIN95
  36. #include <ole2.h>
  37. #endif
  38. #endif
  39.  
  40. #ifdef WIN16
  41. #include <mapiwin.h>
  42. #endif
  43. #include <mapix.h>
  44. #include <mapiguid.h>
  45. #include <strtbl.h>
  46. #include <pvalloc.h>
  47. #include <misctool.h>
  48. #include "resource.h"
  49. #include "mdbview.h"
  50. #include "fld.h"
  51. #include "msg.h"
  52. #include "oper.h"
  53. #include "restrict.h"
  54.  
  55.  
  56.  
  57. /*******************************************************************/
  58. /*********************** Function Prototypes for Notif Callbacks ***/
  59.  
  60. #ifdef XVPORT
  61. extern "C"
  62. {
  63. extern NOTIFCALLBACK LogNotifToXVPLog;
  64. }
  65. #endif
  66.  
  67. extern "C"
  68. {
  69. extern NOTIFCALLBACK RedrawHeirarchyTable;
  70. }
  71.  
  72.  
  73. extern "C"
  74. {
  75. extern NOTIFCALLBACK RedrawContentsTable;
  76. }
  77.  
  78.  
  79. extern "C"
  80. {
  81. extern NOTIFCALLBACK RedrawAssMsgTable;
  82. }
  83.  
  84.  
  85. /* TBLVU functions */
  86.  
  87. extern  HINSTANCE    hlibTBLVU;
  88.  
  89. typedef BOOL (*LPFNVIEWMAPITABLE)(
  90.     LPMAPITABLE FAR *lppMAPITable,
  91.     HWND hWnd);
  92.  
  93. extern  LPFNVIEWMAPITABLE lpfnViewMapiTable;
  94. #define TBLVUViewMapiTable (*lpfnViewMapiTable)
  95.  
  96.  
  97.  
  98. /* PROPVU functions */
  99.  
  100. extern HINSTANCE    hlibPROPVU;
  101.  
  102. typedef BOOL (*LPFNVIEWMAPIPROP)(
  103.     LPSTR           lpszName,
  104.     LPMAPIPROP FAR *lppMAPIProp,
  105.     LPVOID          lpvDest,
  106.     HWND            hWnd);
  107.  
  108. extern LPFNVIEWMAPIPROP lpfnViewMapiProp;
  109. #define PROPVUViewMapiProp (*lpfnViewMapiProp)
  110.  
  111. /********************** Global Variables external declaration *******/
  112.  
  113. extern LPMAPISESSION        lpSession;
  114. extern LPMDB                lpMDB;
  115. extern LPADRBOOK            lpAdrBook;
  116. extern CTheApp              theApp;
  117. extern HINSTANCE            hInst;
  118. extern HRESULT              hResultSession;
  119. extern LPVOID               lpvCopyToDest;
  120. extern ULONG                cFolders;
  121. extern LPENTRYLIST          lpEntryListSearchFolder;
  122. extern ULONG                ulAccess;
  123.  
  124. // PropTag Array used by GetProps for getting subject and entryid
  125.  
  126. SizedSPropTagArray(2,sptaSubject) =
  127. {
  128.     2,
  129.     {
  130.         PR_SUBJECT,
  131.         PR_ENTRYID,
  132.     }
  133. };
  134.  
  135.  
  136.  
  137. /******************* Fld Message Map ****************************/
  138.  
  139. BEGIN_MESSAGE_MAP(CFolderDlg, CDialog)
  140.  
  141.     ON_LBN_DBLCLK(  IDC_PROPS,          OnPropInterface)
  142.     ON_LBN_DBLCLK(  IDC_FLDCHILD,       OnOpenChildFolder)
  143.     ON_LBN_DBLCLK(  IDC_FLDMESSAGES,    OnOpenMessage)
  144.     ON_LBN_DBLCLK(  IDC_FLD_ASS,        OnOpenAssociated)
  145.     ON_COMMAND(     IDC_CALLFUNC,       OnCallFunction)
  146.     ON_COMMAND(     IDC_PROPINTERFACE,  OnPropInterface)
  147.     ON_COMMAND(     IDC_SPECIALPROPS,   OnSpecialProps)
  148.                                         
  149. END_MESSAGE_MAP() 
  150.  
  151.  
  152. /********************************************************************/
  153. /********************** CFolderDlg Member Functions ****************/
  154.  
  155. /********************************************************************/
  156. /********************* Callbacks ************************************/
  157.  
  158. SCODE STDAPICALLTYPE RedrawHeirarchyTable(  LPVOID          lpvContext,
  159.                                             ULONG           cNotif,
  160.                                             LPNOTIFICATION  lpNotif)
  161. {
  162.     ((CFolderDlg *)(lpvContext))->RedrawFolderTable();
  163.     return(S_OK);
  164. }
  165.  
  166. /********************************************************************/
  167.  
  168. SCODE STDAPICALLTYPE RedrawContentsTable(  LPVOID          lpvContext,
  169.                                             ULONG           cNotif,
  170.                                             LPNOTIFICATION  lpNotif)
  171. {
  172.     ((CFolderDlg *)(lpvContext))->RedrawMessageTable();
  173.     return(S_OK);
  174. }
  175.  
  176. /********************************************************************/
  177.  
  178.  
  179. SCODE STDAPICALLTYPE RedrawAssMsgTable(  LPVOID          lpvContext,
  180.                                             ULONG           cNotif,
  181.                                             LPNOTIFICATION  lpNotif)
  182. {
  183.     ((CFolderDlg *)(lpvContext))->RedrawAssociatedTable();
  184.     return(S_OK);
  185. }
  186.  
  187. /********************************************************************/
  188. /*
  189.  -  CFolderDlg::
  190.  -  OnPropInterface
  191.  -
  192.  *  Purpose:
  193.  *
  194.  /********************************************************************/
  195.  
  196. void CFolderDlg::OnPropInterface()
  197. {
  198.     char    szBuffer[80];
  199.  
  200.     lstrcpy(szBuffer,m_CurrentFolder.GetBuffer(50));
  201.     lstrcat(szBuffer," Properties");
  202.  
  203.     PROPVUViewMapiProp(szBuffer,
  204.                 (LPMAPIPROP FAR *)&m_lpEntry,lpvCopyToDest, (HWND)this->m_hWnd );
  205. }
  206.  
  207.  
  208. /********************************************************************/
  209. /*
  210.  -  CFolderDlg::
  211.  -  OnCallFunction
  212.  -
  213.  *  Purpose:
  214.  *
  215.  /********************************************************************/
  216.  
  217. void CFolderDlg::OnCallFunction()
  218. {
  219.     LONG    lCurSelect = CB_ERR;
  220.     
  221.     // get the selection from the Drop Down Listbox combo box
  222.     // and switch to appropriate function selected based upon 
  223.     // position in the combo box. (NOTE position is determined by
  224.     // initialization from OnInitFld  order of adding to combobox
  225.     
  226.     // GetCurrentSelection Position
  227.     lCurSelect = SendDlgItemMessage(IDC_FUNCTIONS,CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0 );
  228.     if(lCurSelect == CB_ERR)
  229.     {
  230.         // no item was selected, bring up dialog to tell them to select something
  231.         MessageBox( "Please Select a function in the adjacent drop down listbox to call",
  232.                 "Client", MBS_OOPS );
  233.         return;
  234.    
  235.     }
  236.     // else it is a valid index in combo box
  237.  
  238.     // Switch to appropriate function
  239.     switch(lCurSelect)
  240.     {
  241.         // FOLDER FUNCTIONS
  242.         case 0:        
  243.             OnPropInterface();            // lpFld->PROPERTY (OF CURRENT FLD)
  244.             break;
  245.  
  246.         // Tables
  247.         case 1:
  248.             OnContTable();          // lpFld->GetContentsTable() (OF CURRENT FLD)
  249.             break;
  250.         case 2:
  251.             OnHeirTable();          // lpFld->GetHeirarchyTable() (OF CURRENT FLD)
  252.             break;
  253.  
  254.         // opening objects
  255.         case 3:
  256.             OnOpenChildFolder();    // lpFld->OpenEntry() -- Child Folder (ON SELECTED FLD)
  257.             break;
  258.         case 4:
  259.             OnOpenMessage();        // lpFld->OpenEntry() -- Message (ON SELECTED MSG)
  260.             break;
  261.         case 5:
  262.             OnOpenAssociated();     // lpFld->OpenEntry() -- Associated Msg (ON SELECTED MSG)
  263.             break;
  264.         
  265.         // creating objects
  266.         case 6:
  267.             OnMsgCreate();          // lpFld->CreateMessage() (UNDER CURRENT FLD)
  268.             break;
  269.         case 7:
  270.             OnFldCreate();          // lpFld->CreateFolder() (UNDER CURRENT FLD)
  271.             break;
  272.         case 8:
  273.             OnCopyFolder();         // lpFld->CopyFolder() (CURRENT FLD to DEST)
  274.             break;
  275.         case 9:
  276.             OnCopyMessages();       // lpFld->CopyMessages() (ON SELECTED MSGS)
  277.             break;
  278.         
  279.         // Deleting objects
  280.         case 10:
  281.             OnFldDelete();          // lpFld->DeleteFolder() (ON SELECTED FLD)
  282.             break;
  283.         case 11:    
  284.             OnMsgDelete();          // lpFld->DeleteMessages() (ON SELECTED MSGS)
  285.             break;
  286.         case 12:
  287.             OnEmptyFolder();        // lpFld->EmptyFolder()  (ON CURRENT FLD)
  288.             break;  
  289.  
  290.         // misc 
  291.         case 13:
  292.             OnGetSearchCriteria();  // lpFld->GetSearchCriteria() (ON CURRENT FLD)
  293.             break;
  294.         case 14:
  295.             OnSetSearchCriteria();  // lpFld->SetSearchCriteria() (ON CURRENT FLD)
  296.             break;
  297.         case 15:
  298.             OnSetMsgStatus();       // lpFld->SetMsgStatus() (ON SELECTED MSG)
  299.             break;
  300.         case 16:
  301.             OnGetMsgStatus();       // lpFld->GetMsgStatus() (ON SELECTED MSG)
  302.             break;
  303.         case 17:
  304.             OnAbortSubmit();        // lpMDB->AbortSubmit() (ON SELECTED MSG)
  305.             break;
  306.  
  307.         // MDB FUNCTIONS
  308.         case 18:
  309.             OnMDBProp();            // lpMDB->PROPERTY (OF CURRENT MDB)
  310.             break;  
  311.         case 19:
  312.             OnSetReceiveFolder();   // lpMDB->SetReceiveFolder() (ON CURRENT FLD)
  313.             break;
  314.  
  315.         // NOTIFICATIONS
  316.         case 20:
  317.             OnNotifFld();           // lpFld->Adivse() / UnAdvise (NOTIFICATIONS)
  318.             break;
  319.         case 21:
  320.             OnNotifHeir();          // lpHeirTbl->Adivse() / UnAdvise (NOTIFICATIONS)
  321.             break;
  322.         case 22:
  323.             OnNotifAss();           // lpAssContTbl->Adivse() / UnAdvise (NOTIFICATIONS)
  324.             break;
  325.         case 23:
  326.             OnNotifCont();          // lpContTbl->Adivse() / UnAdvise (NOTIFICATIONS)
  327.             break;
  328.         
  329.         // INTERNAL POINTERS
  330.         case 24:
  331.             OnSetCopyToDest();      // SET THIS FOLDER AS COPY DESTINATION
  332.             break;
  333.         case 25:
  334.             OnSetSearchDestFlds();  // SET THIS FOLDER TO BE IN LIST OF SEARCH FOLDERS
  335.             break;
  336.  
  337.         // DEFAULT
  338.         default:
  339.             MessageBox( "CFolderDlg::OnCallFunction() default ",
  340.                 "Client", MBS_OOPS );
  341.             break;       
  342.     }    
  343.  
  344. }
  345.  
  346.  
  347. /********************************************************************/
  348. /*
  349.  -  CFolderDlg::
  350.  -  OnNotifFld
  351.  -
  352.  *  Purpose:
  353.  *
  354.  /********************************************************************/
  355.  
  356. void CFolderDlg::OnNotifFld()
  357. {
  358.     CNotifDlg   Notif(this);
  359.  
  360.     Notif.m_Description = m_CurrentFolder;
  361.     Notif.m_lpUnk       = lpMDB;
  362.     Notif.m_ulObjType   = MAPI_STORE;
  363.     Notif.m_lppNotifs   = &m_lpNotifFld;
  364.     Notif.DoModal();
  365.  
  366. }
  367. /********************************************************************/
  368. /*
  369.  -  CFolderDlg::
  370.  -  OnNotifHeir
  371.  -
  372.  *  Purpose:
  373.  *
  374.  /********************************************************************/
  375.  
  376. void CFolderDlg::OnNotifHeir()
  377. {
  378.     CNotifDlg   Notif(this);
  379.  
  380.     Notif.m_Description = "HeirarchyTable Notification";
  381.     Notif.m_lpUnk       = m_lpChildTable;
  382.     Notif.m_ulObjType   = MAPI_TABLE;
  383.     Notif.m_lppNotifs   = &m_lpNotifHeirTbl;
  384.     Notif.DoModal();
  385.  
  386. }
  387. /********************************************************************/
  388. /*
  389.  -  CFolderDlg::
  390.  -  OnNotifAss
  391.  -
  392.  *  Purpose:
  393.  *
  394.  /********************************************************************/
  395.  
  396. void CFolderDlg::OnNotifAss()
  397. {
  398.     CNotifDlg   Notif(this);
  399.  
  400.     Notif.m_Description = "Associated ContentsTable Notification";
  401.     Notif.m_lpUnk       = m_lpAssociatedTable;
  402.     Notif.m_ulObjType   = MAPI_TABLE;
  403.     Notif.m_lppNotifs   = &m_lpNotifAssTbl;
  404.     Notif.DoModal();
  405.  
  406. }
  407. /********************************************************************/
  408. /*
  409.  -  CFolderDlg::
  410.  -  OnNotifCont
  411.  -
  412.  *  Purpose:
  413.  *
  414.  /********************************************************************/
  415.  
  416. void CFolderDlg::OnNotifCont()
  417. {
  418.     CNotifDlg   Notif(this);
  419.  
  420.     Notif.m_Description = "ContentsTable Notification";
  421.     Notif.m_lpUnk       = m_lpMessageTable;
  422.     Notif.m_ulObjType   = MAPI_TABLE;
  423.     Notif.m_lppNotifs   = &m_lpNotifContTbl;
  424.     Notif.DoModal();
  425. }
  426.  
  427. /********************************************************************/
  428. /*
  429.  -  CFolderDlg::
  430.  -  OnSetMsgStatus
  431.  -
  432.  *  Purpose:
  433.  *
  434.  /********************************************************************/
  435.  
  436. void CFolderDlg::OnSetMsgStatus()
  437. {
  438.     COperation      SetMessageStatusDlg(this);
  439.     CString         OperName;
  440.     char            szBuff[512];
  441.     ULONG           ulFlags     = 0;
  442.     LPENTRYID       lpEntryID   = NULL;
  443.     ULONG           ulEntryID   = 0;
  444.     LONG            lCurSelect  = -1;
  445.     LPSRowSet       lpRows      = NULL;
  446.     LONG            lRowsSeeked = 0;
  447.     int max=500;
  448.     int rgItems[500];
  449.     DWORD           dRet        = 0;
  450.     char            *szEnd      = NULL;
  451.     ULONG           ulTemp      = 0;
  452.     ULONG           ulNewStatus = 0;
  453.     ULONG           ulNewStatusMask = 0;
  454.     ULONG           ulOldStatus = 0;
  455.  
  456.  
  457.     // initalize data for dialog box
  458.     OperName  = m_CurrentFolder;
  459.     OperName += "->SetMessageStatus()";
  460.  
  461.     SetMessageStatusDlg.m_CurrentOperation= OperName;
  462.     SetMessageStatusDlg.m_CBText1         = "lpEntryID/cbEntryID";
  463.     SetMessageStatusDlg.m_EditText1       = "Message Subject";
  464.     SetMessageStatusDlg.m_EditText2       = "ulNewStatus(Hex)";
  465.     SetMessageStatusDlg.m_EditText3       = "ulNewStatusMask(Hex)";
  466.     SetMessageStatusDlg.m_FlagText1       = "MSGSTATUS_HIGHLIGHTED";
  467.     SetMessageStatusDlg.m_FlagText2       = "MSGSTATUS_TAGGED";
  468.     SetMessageStatusDlg.m_FlagText3       = "MSGSTATUS_HIDDEN";
  469.     SetMessageStatusDlg.m_FlagText4       = "MSGSTATUS_DELMARKED";
  470.     SetMessageStatusDlg.m_FlagText5       = "MSGSTATUS_REMOTE_DOWNLOAD";
  471.     SetMessageStatusDlg.m_FlagText6       = "MSGSTATUS_REMOTE_DELETE";
  472.  
  473.     SetMessageStatusDlg.m_EditDefault2 = "0x00000000";
  474.     SetMessageStatusDlg.m_EditDefault3 = "0xFFFF001F";
  475.  
  476.     // initalize data for dialog box
  477.     if( (lCurSelect = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  478.             goto Associated;
  479.  
  480.     m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  481.     wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  482.                         rgItems[0],
  483.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  484.  
  485.     if( HR_FAILED(m_hResult))
  486.     {
  487.         MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  488.                 "Client", MBS_ERROR );
  489.         goto Cleanup;
  490.     }
  491.  
  492.  
  493.     m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  494.     wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  495.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  496.  
  497.     if( HR_FAILED(m_hResult))
  498.     {
  499.         MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  500.                             "Client", MBS_ERROR );
  501.         goto Cleanup;
  502.     }
  503.  
  504.     // rip out info
  505.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  506.         SetMessageStatusDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  507.  
  508.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  509.     {
  510.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  511.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  512.  
  513.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  514.         dRet = SetMessageStatusDlg.m_CBContents1.Add(szBuff);
  515.  
  516.     }
  517.  
  518.     // bring up modal dialog box, and if user hits OK, process operation
  519.     if( SetMessageStatusDlg.DoModal() == IDOK )
  520.     {
  521.  
  522.         if( SetMessageStatusDlg.m_bFlag1 )
  523.             ulNewStatus |= MSGSTATUS_HIGHLIGHTED;
  524.  
  525.         if( SetMessageStatusDlg.m_bFlag2 )
  526.             ulNewStatus |= MSGSTATUS_TAGGED;
  527.  
  528.         if( SetMessageStatusDlg.m_bFlag3 )
  529.             ulNewStatus |= MSGSTATUS_HIDDEN;
  530.  
  531.         if( SetMessageStatusDlg.m_bFlag4 )
  532.             ulNewStatus |= MSGSTATUS_DELMARKED;
  533.  
  534.         if( SetMessageStatusDlg.m_bFlag5 )
  535.             ulNewStatus |= MSGSTATUS_REMOTE_DOWNLOAD;
  536.  
  537.         if( SetMessageStatusDlg.m_bFlag6 )
  538.             ulNewStatus |= MSGSTATUS_REMOTE_DELETE;
  539.  
  540.         // now logical or this with the ulNewStatus from the Edit Control
  541.         ulTemp = strtoul( SetMessageStatusDlg.m_szEdit2 , &szEnd,16);
  542.         ulNewStatus |= ulTemp;
  543.  
  544.         ulNewStatusMask = strtoul( SetMessageStatusDlg.m_szEdit3 , &szEnd,16);
  545.  
  546.         // m_lpFolder is global variable
  547.         m_hResult = m_lpFolder->SetMessageStatus(
  548.                         (ULONG)     ulEntryID,
  549.                         (LPENTRYID) lpEntryID,
  550.                         ulNewStatus,
  551.                         ulNewStatusMask,
  552.                         &ulOldStatus  );
  553.         wsprintf(m_szLogBuf,"m_lpFolder->SetMessageStatus(%lu,0x%X,%lu%lu,&ulOldStatus)\t SC: %s",
  554.                         ulEntryID,lpEntryID,ulNewStatus,ulNewStatusMask,
  555.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  556.  
  557.         if( HR_FAILED(m_hResult))
  558.         {
  559.             MessageBox( m_E.SzError("m_lpFolder->SetMessageStatus()", m_hResult),
  560.                             "Client", MBS_ERROR );
  561.             goto Cleanup;
  562.         }
  563.         wsprintf(szBuff,"ulOldStatus == %#04X, %s%s%s%s",ulOldStatus,
  564.           ((ulOldStatus & MSGSTATUS_HIGHLIGHTED)    ? "MSGSTATUS_HIGHLIGHTED | ": ""),
  565.           ((ulOldStatus & MSGSTATUS_TAGGED)         ? "MSGSTATUS_TAGGED | "     : ""),
  566.           ((ulOldStatus & MSGSTATUS_HIDDEN)         ? "MSGSTATUS_HIDDEN | "     : ""),
  567.           ((ulOldStatus & MSGSTATUS_DELMARKED)      ? "MSGSTATUS_DELMARKED | "  : ""));
  568.  
  569.         MessageBox( szBuff,"Client", MBS_INFO );
  570.     }
  571.  
  572.     goto Cleanup;
  573.  
  574. Associated:
  575.  
  576.  
  577.     lCurSelect  = -1;
  578.  
  579.     // initalize data for dialog box
  580.     if( (lCurSelect = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  581.     {
  582.             MessageBox("Select Only One Message in Listbox to Set Status", "OnSetMessageStatus", MBS_ERROR );
  583.             goto Cleanup;
  584.     }
  585.  
  586.     // ASSOCIATED MESSAGES
  587.     m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  588.  
  589.     wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  590.                         rgItems[0],
  591.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  592.  
  593.     if( HR_FAILED(m_hResult))
  594.     {
  595.         MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  596.                             "Client", MBS_ERROR );
  597.         goto Cleanup;
  598.     }
  599.  
  600.  
  601.     m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  602.     wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  603.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  604.  
  605.     if( HR_FAILED(m_hResult))
  606.     {
  607.         MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  608.                             "Client", MBS_ERROR );
  609.         goto Cleanup;
  610.     }
  611.  
  612.     // rip out info
  613.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  614.         SetMessageStatusDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  615.  
  616.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  617.     {
  618.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  619.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  620.  
  621.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  622.         dRet = SetMessageStatusDlg.m_CBContents1.Add(szBuff);
  623.     }
  624.  
  625.     // bring up modal dialog box, and if user hits OK, process operation
  626.     if( SetMessageStatusDlg.DoModal() == IDOK )
  627.     {
  628.         if( SetMessageStatusDlg.m_bFlag1 )
  629.             ulNewStatus |= MSGSTATUS_HIGHLIGHTED;
  630.  
  631.         if( SetMessageStatusDlg.m_bFlag2 )
  632.             ulNewStatus |= MSGSTATUS_TAGGED;
  633.  
  634.         if( SetMessageStatusDlg.m_bFlag3 )
  635.             ulNewStatus |= MSGSTATUS_HIDDEN;
  636.  
  637.         if( SetMessageStatusDlg.m_bFlag4 )
  638.             ulNewStatus |= MSGSTATUS_DELMARKED;
  639.  
  640.         // now logical or this with the ulNewStatus from the Edit Control
  641.         ulTemp = strtoul( SetMessageStatusDlg.m_szEdit2 , &szEnd,16);
  642.         ulNewStatus |= ulTemp;
  643.  
  644.         ulNewStatusMask = strtoul( SetMessageStatusDlg.m_szEdit3 , &szEnd,16);
  645.  
  646.         // m_lpFolder is global variable
  647.         m_hResult = m_lpFolder->SetMessageStatus(
  648.                         (ULONG)     ulEntryID,
  649.                         (LPENTRYID) lpEntryID,
  650.                         ulNewStatus,
  651.                         ulNewStatusMask,
  652.                         &ulOldStatus  );
  653.         wsprintf(m_szLogBuf,"m_lpFolder->SetMessageStatus(%lu,0x%X,%lu%lu,&ulOldStatus)\t SC: %s",
  654.                         ulEntryID,lpEntryID,ulNewStatus,ulNewStatusMask,
  655.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  656.  
  657.         if( HR_FAILED(m_hResult))
  658.         {
  659.             MessageBox( m_E.SzError("m_lpFolder->SetMessageStatus()", m_hResult),
  660.                             "Client", MBS_ERROR );
  661.             goto Cleanup;
  662.         }
  663.  
  664.         wsprintf(szBuff,"ulOldStatus == %#04X, %s%s%s%s",ulOldStatus,
  665.           ((ulOldStatus & MSGSTATUS_HIGHLIGHTED)    ? "MSGSTATUS_HIGHLIGHTED | ": ""),
  666.           ((ulOldStatus & MSGSTATUS_TAGGED)         ? "MSGSTATUS_TAGGED | "     : ""),
  667.           ((ulOldStatus & MSGSTATUS_HIDDEN)         ? "MSGSTATUS_HIDDEN | "     : ""),
  668.           ((ulOldStatus & MSGSTATUS_DELMARKED)      ? "MSGSTATUS_DELMARKED | "  : ""));
  669.  
  670.         MessageBox( szBuff,"Client", MBS_INFO );
  671.  
  672.  
  673.     }
  674.  
  675.  
  676. Cleanup:
  677.  
  678.     FreeRowSet(lpRows);
  679. }
  680.  
  681.  
  682. /********************************************************************/
  683. /*
  684.  -  CFolderDlg::
  685.  -  OnGetMsgStatus
  686.  -
  687.  *  Purpose:
  688.  *
  689.  /********************************************************************/
  690.  
  691. void CFolderDlg::OnGetMsgStatus()
  692. {
  693.     char            szBuff[512];
  694.     ULONG           ulFlags     = 0;
  695.     LPENTRYID       lpEntryID   = NULL;
  696.     ULONG           ulEntryID   = 0;
  697.     LONG            lCurSelect  = -1;
  698.     LPSRowSet       lpRows      = NULL;
  699.     LONG            lRowsSeeked = 0;
  700.     int max=500;
  701.     int rgItems[500];
  702.     ULONG           ulMessageStatus = 0;
  703.  
  704.  
  705.  
  706.     if( (lCurSelect = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  707.             goto Associated;
  708.  
  709.     m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  710.  
  711.     wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  712.                         rgItems[0],
  713.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  714.  
  715.     if( HR_FAILED(m_hResult))
  716.     {
  717.         MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  718.                             "Client", MBS_ERROR );
  719.         goto Cleanup;
  720.     }
  721.  
  722.  
  723.     m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  724.     wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  725.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  726.  
  727.     if( HR_FAILED(m_hResult))
  728.     {
  729.         MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  730.                             "Client", MBS_ERROR );
  731.         goto Cleanup;
  732.     }
  733.  
  734.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  735.     {
  736.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  737.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  738.     }
  739.  
  740.  
  741.     m_hResult = m_lpFolder->GetMessageStatus(
  742.                         (ULONG)     ulEntryID,
  743.                         (LPENTRYID) lpEntryID,
  744.                         ulFlags,
  745.                         &ulMessageStatus  );
  746.     wsprintf(m_szLogBuf,"lpFolder->GetMessageStatus(%lu,0x%X,%lu,&ulMsgStatus)\t SC: %s",
  747.                         ulEntryID,lpEntryID,ulFlags,
  748.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  749.  
  750.     if( HR_FAILED(m_hResult))
  751.     {
  752.         MessageBox( m_E.SzError("lpFolder->GetMessageStatus()", m_hResult),
  753.                 "Client", MBS_ERROR );
  754.         goto Cleanup;
  755.     }
  756.  
  757.     wsprintf(szBuff,"ulMsgStatus == %#04X, %s%s%s%s",ulMessageStatus,
  758.       ((ulMessageStatus & MSGSTATUS_HIGHLIGHTED)    ? "MSGSTATUS_HIGHLIGHTED | ": ""),
  759.       ((ulMessageStatus & MSGSTATUS_TAGGED)         ? "MSGSTATUS_TAGGED | "     : ""),
  760.       ((ulMessageStatus & MSGSTATUS_HIDDEN)         ? "MSGSTATUS_HIDDEN | "     : ""),
  761.       ((ulMessageStatus & MSGSTATUS_DELMARKED)      ? "MSGSTATUS_DELMARKED | "  : ""));
  762.  
  763.     MessageBox( szBuff,"Client", MBS_INFO );
  764.  
  765.     goto Cleanup;
  766.  
  767. Associated:
  768.  
  769.  
  770.     lCurSelect  = -1;
  771.  
  772.     // initalize data for dialog box
  773.     if( (lCurSelect = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  774.     {
  775.             MessageBox("Select Only One Message in Listbox to GetMessageStatus", "OnGetMessageStatus", MBS_ERROR );
  776.             goto Cleanup;
  777.     }
  778.  
  779.     // ASSOCIATED MESSAGES
  780.  
  781.     m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  782.  
  783.     wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  784.                         rgItems[0],
  785.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  786.  
  787.     if( HR_FAILED(m_hResult))
  788.     {
  789.         MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  790.                             "Client", MBS_ERROR );
  791.         goto Cleanup;
  792.     }
  793.  
  794.  
  795.     m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  796.     wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  797.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  798.  
  799.     if( HR_FAILED(m_hResult))
  800.     {
  801.         MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  802.                             "Client", MBS_ERROR );
  803.         goto Cleanup;
  804.     }
  805.  
  806.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  807.     {
  808.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  809.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  810.     }
  811.  
  812.     m_hResult = m_lpFolder->GetMessageStatus(
  813.                         (ULONG)     ulEntryID,
  814.                         (LPENTRYID) lpEntryID,
  815.                         ulFlags,
  816.                         &ulMessageStatus  );
  817.     wsprintf(m_szLogBuf,"lpFolder->GetMessageStatus(%lu,0x%X,%lu,&ulMsgStatus)\t SC: %s",
  818.                         ulEntryID,lpEntryID,ulFlags,
  819.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  820.  
  821.     if( HR_FAILED(m_hResult))
  822.     {
  823.         MessageBox( m_E.SzError("lpFolder->GetMessageStatus()", m_hResult),
  824.                 "Client", MBS_ERROR );
  825.         goto Cleanup;
  826.     }
  827.  
  828.     wsprintf(szBuff,"ulMsgStatus == %#04X, %s%s%s%s",ulMessageStatus,
  829.       ((ulMessageStatus & MSGSTATUS_HIGHLIGHTED)    ? "MSGSTATUS_HIGHLIGHTED | ": ""),
  830.       ((ulMessageStatus & MSGSTATUS_TAGGED)         ? "MSGSTATUS_TAGGED | "     : ""),
  831.       ((ulMessageStatus & MSGSTATUS_HIDDEN)         ? "MSGSTATUS_HIDDEN | "     : ""),
  832.       ((ulMessageStatus & MSGSTATUS_DELMARKED)      ? "MSGSTATUS_DELMARKED | "  : ""));
  833.  
  834.     MessageBox( szBuff,"Client", MBS_INFO );
  835.  
  836. Cleanup:
  837.  
  838.     FreeRowSet(lpRows);
  839.  
  840. }
  841.  
  842.  
  843. /********************************************************************/
  844. /*
  845.  -  CFolderDlg::
  846.  -  OnMDBProp
  847.  -
  848.  *  Purpose:
  849.  *
  850.  /********************************************************************/
  851.  
  852. void CFolderDlg::OnMDBProp()
  853. {
  854.     PROPVUViewMapiProp("MDB Properties",
  855.             (LPMAPIPROP FAR *)&lpMDB, lpvCopyToDest, (HWND)this->m_hWnd );
  856. }
  857.  
  858. /********************************************************************/
  859. /*
  860.  -  CFolderDlg::
  861.  -  OnContTable
  862.  -
  863.  *  Purpose:
  864.  *
  865.  /********************************************************************/
  866.  
  867. void CFolderDlg::OnContTable()
  868. {
  869.     COperation      GetContentsDlg(this);
  870.     ULONG           ulFlags         = 0;
  871.     LPSPropTagArray lpsptaAll       = NULL;
  872.     LONG            lRowsSeeked     = 0;
  873.  
  874.     // determine the most common properties in messages for
  875.     // contents table.  
  876.  
  877.     SizedSPropTagArray(21,sptaMessage) =
  878.     {
  879.         21,
  880.         {
  881.             PR_SUBJECT,
  882.             PR_NORMALIZED_SUBJECT,
  883.             PR_ENTRYID,
  884.             PR_OBJECT_TYPE,
  885.             PR_MESSAGE_CLASS,
  886.             PR_MESSAGE_FLAGS,
  887.             PR_MESSAGE_SIZE,            
  888.             PR_CLIENT_SUBMIT_TIME,
  889.             PR_MESSAGE_DELIVERY_TIME,
  890.             PR_SENDER_NAME,
  891.             PR_SENDER_ENTRYID,
  892.             PR_PRIORITY,
  893.             PR_IMPORTANCE,
  894.             PR_DISPLAY_TO,
  895.             PR_DISPLAY_CC,
  896.             PR_BODY,
  897.             PR_HASATTACH,
  898.             PR_RECORD_KEY,
  899.             PR_SEARCH_KEY,
  900.             PR_STORE_ENTRYID,
  901.             PR_STORE_RECORD_KEY,
  902.         }
  903.     };
  904.  
  905.     GetContentsDlg.m_CurrentOperation= "lpFld->GetContentsTable()";
  906.     GetContentsDlg.m_FlagText1       = "MAPI_ASSOCIATED";
  907.     GetContentsDlg.m_FlagText2       = "Invalid Flag";
  908.  
  909.     if( GetContentsDlg.DoModal() == IDOK )
  910.     {
  911.         if( GetContentsDlg.m_bFlag2 )
  912.             ulFlags |= TEST_INVALID_FLAG;
  913.  
  914.         if( GetContentsDlg.m_bFlag1 )
  915.         {
  916.             // assocated messages in folder
  917.             ulFlags |= MAPI_ASSOCIATED;
  918.  
  919.             m_hResult = m_lpAssociatedTable->SetColumns( (LPSPropTagArray) &sptaMessage, 0);
  920.             wsprintf(m_szLogBuf,"lpAssociatedTable->SetColumns( &sptaMessage, 0)\t SC: %s",
  921.                                   GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  922.  
  923.             if( HR_FAILED(m_hResult))
  924.             {
  925.                 MessageBox( m_E.SzError("m_lpAssociatedTable->SetColumns", m_hResult),
  926.                                     "Client", MBS_ERROR );
  927.                 return;
  928.             }
  929.  
  930.             m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  931.  
  932.             wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  933.                                 GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  934.  
  935.             if( HR_FAILED(m_hResult))
  936.             {
  937.                 MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  938.                                     "Client", MBS_ERROR );
  939.                 return;
  940.             }
  941.  
  942.             TBLVUViewMapiTable( (LPMAPITABLE FAR *)&m_lpAssociatedTable, (HWND)this->m_hWnd );
  943.  
  944.             // set which columns are important to see in table
  945.             m_hResult = m_lpAssociatedTable->SetColumns( (LPSPropTagArray) &sptaSubject, 0);
  946.             wsprintf(m_szLogBuf,"lpAssociatedTable->SetColumns( &sptaSubject, 0)\t SC: %s",
  947.                                 GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  948.  
  949.             if( HR_FAILED(m_hResult))
  950.             {
  951.                 MessageBox( m_E.SzError("m_lpAssociatedTable->SetColumns", m_hResult),
  952.                             "Client", MBS_ERROR );
  953.                 return;
  954.             }
  955.  
  956.  
  957.         }
  958.         else
  959.         {
  960.  
  961.             // set columns all columns
  962.             m_hResult = m_lpMessageTable->SetColumns( (LPSPropTagArray) &sptaMessage, 0);
  963.             wsprintf(m_szLogBuf,"lpMessageTable->SetColumns( &sptaMessage, 0)\t SC: %s",
  964.                                 GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  965.  
  966.             if( HR_FAILED(m_hResult))
  967.             {
  968.                 MessageBox( m_E.SzError("m_lpMessageTable->SetColumns", m_hResult),
  969.                                     "Client", MBS_ERROR );
  970.                 return;
  971.             }
  972.  
  973.             m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  974.  
  975.             wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  976.                                 GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  977.  
  978.             if( HR_FAILED(m_hResult))
  979.             {
  980.                 MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  981.                                     "Client", MBS_ERROR );
  982.                 return;
  983.             }
  984.  
  985.             TBLVUViewMapiTable( (LPMAPITABLE FAR *)&m_lpMessageTable, (HWND)this->m_hWnd );
  986.  
  987.  
  988.             // set which columns are important to see in table
  989.             m_hResult = m_lpMessageTable->SetColumns( (LPSPropTagArray) &sptaSubject, 0);
  990.             wsprintf(m_szLogBuf,"lpMessageTable->SetColumns( &sptaSubject, 0)\t SC: %s",
  991.                                 GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  992.  
  993.             if( HR_FAILED(m_hResult))
  994.             {
  995.                 MessageBox( m_E.SzError("m_lpMessageTable->SetColumns", m_hResult),
  996.                             "Client", MBS_ERROR );
  997.                 return;
  998.             }
  999.  
  1000.         }
  1001.     }
  1002. }
  1003.  
  1004. /********************************************************************/
  1005. /*
  1006.  -  CFolderDlg::
  1007.  -  OnHeirTable
  1008.  -
  1009.  *  Purpose:
  1010.  *
  1011.  /********************************************************************/
  1012.  
  1013. void CFolderDlg::OnHeirTable()
  1014. {
  1015.     LPSPropTagArray lpsptaAll       = NULL;
  1016.     LONG            lRowsSeeked     = 0;
  1017.  
  1018.     // PropTag Array for getting displayname and entryid
  1019.     SizedSPropTagArray(2,sptaDisplayName) =
  1020.     {
  1021.         2,
  1022.         {
  1023.             PR_DISPLAY_NAME,
  1024.             PR_ENTRYID
  1025.         }
  1026.     };
  1027.  
  1028.  
  1029.     // query all columns
  1030.     m_hResult = m_lpChildTable->QueryColumns(TBL_ALL_COLUMNS, &lpsptaAll);
  1031.     wsprintf(m_szLogBuf,"lpChildTable->QueryColumns(TBL_ALL_COLUMNS, &lpsptaAll)\t SC: %s",
  1032.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1033.  
  1034.     if( HR_FAILED(m_hResult))
  1035.     {
  1036.         MessageBox( m_E.SzError("m_lpChildTable->QueryColumns", m_hResult),
  1037.                             "Client", MBS_ERROR );
  1038.         goto Error;
  1039.     }
  1040.  
  1041.     // set columns all columns
  1042.     m_hResult = m_lpChildTable->SetColumns( (LPSPropTagArray) lpsptaAll, 0);
  1043.     wsprintf(m_szLogBuf,"lpChildTable->SetColumns( &sptaAll, 0)\t SC: %s",
  1044.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1045.  
  1046.     if( HR_FAILED(m_hResult))
  1047.     {
  1048.         MessageBox( m_E.SzError("m_lpChildTable->SetColumns", m_hResult),
  1049.                             "Client", MBS_ERROR );
  1050.         goto Error;
  1051.     }
  1052.  
  1053.     m_hResult = m_lpChildTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  1054.  
  1055.     wsprintf(m_szLogBuf,"lpChildTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  1056.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1057.  
  1058.     if( HR_FAILED(m_hResult))
  1059.     {
  1060.         MessageBox( m_E.SzError("m_lpChildTable->SeekRow", m_hResult),
  1061.                             "Client", MBS_ERROR );
  1062.         goto Error;
  1063.     }
  1064.  
  1065.     TBLVUViewMapiTable( (LPMAPITABLE FAR *)&m_lpChildTable, (HWND)this->m_hWnd );
  1066.  
  1067.     // set which columns are important to see in table
  1068.     m_hResult = m_lpChildTable->SetColumns( (LPSPropTagArray) &sptaDisplayName, 0);
  1069.     wsprintf(m_szLogBuf,"lpChildTable->SetColumns( &sptaDisplayName, 0)\t SC: %s",
  1070.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1071.  
  1072.     if( HR_FAILED(m_hResult))
  1073.     {
  1074.         MessageBox( m_E.SzError("m_lpChildTable->SetColumns", m_hResult),
  1075.                             "Client", MBS_ERROR );
  1076.         goto Error;
  1077.     }
  1078.  
  1079. Error:
  1080.  
  1081.     // free Memory allocated
  1082.     if(lpsptaAll)
  1083.         MAPIFreeBuffer(lpsptaAll);
  1084. }
  1085.  
  1086. /********************************************************************/
  1087. /*
  1088.  -  CFolderDlg::
  1089.  -  OnInitFldDialog
  1090.  -
  1091.  *  Purpose:
  1092.  *
  1093.  /********************************************************************/
  1094.  
  1095. BOOL CFolderDlg::InitFldDialog()
  1096. {
  1097.     DWORD           dwIndex         = 0;
  1098.     DWORD           dwReturn        = 0;
  1099.     LPSPropValue    lpspvaEID       = NULL;
  1100.     ULONG           ulValuesEID     = 0;
  1101.     LPSPropValue    lpspvaFldType   = NULL;
  1102.     ULONG           ulValuesFldType = 0;
  1103.  
  1104.     SizedSPropTagArray(1,sptaEID) =
  1105.     {
  1106.         1,
  1107.         {
  1108.             PR_ENTRYID,
  1109.         }
  1110.     };
  1111.  
  1112.  
  1113.     SizedSPropTagArray(1,sptaFldType) =
  1114.     {
  1115.         1,
  1116.         {
  1117.             PR_FOLDER_TYPE,
  1118.         }
  1119.     };
  1120.  
  1121.     // PropTag Array for getting displayname and entryid
  1122.     SizedSPropTagArray(2,sptaDisplayName) =
  1123.     {
  1124.         2,
  1125.         {
  1126.             PR_DISPLAY_NAME,
  1127.             PR_ENTRYID
  1128.         }
  1129.     };
  1130.  
  1131.  
  1132.  
  1133.     SetWindowText( m_CurrentFolder.GetBuffer(15) );
  1134.  
  1135.     // load current folder string into Current Folder Listbox
  1136. //    dwIndex = SendDlgItemMessage(IDC_FLDCURRENT,LB_RESETCONTENT,0,0);
  1137. //    dwIndex = SendDlgItemMessage(IDC_FLDCURRENT,LB_ADDSTRING,0,
  1138. //                        (LPARAM)m_CurrentFolder.GetBuffer(20) );
  1139.  
  1140.     // disable the system menu close item
  1141.     //  this is done because there is a MFC 2.0 bug that
  1142.     //  makes you capture several PostNcDestroy messages etc.
  1143.     GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE, MF_GRAYED);
  1144.  
  1145.  
  1146.     // FLD OBJECT NOTIFICATION
  1147.     m_hResult = m_lpFolder->GetProps( (LPSPropTagArray) &sptaEID,0, &ulValuesEID, &lpspvaEID);
  1148.     wsprintf(m_szLogBuf,"lpFolder->GetProps( &sptaEID,0, &ulValuesEID, &lpspvaEID)\t SC: %s",
  1149.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1150.  
  1151.     if( HR_FAILED(m_hResult))
  1152.     {
  1153.         MessageBox( m_E.SzError("lpFolder->GetProps(&sptaEID)",m_hResult),
  1154.                      "Client", MBS_ERROR );
  1155.         return FALSE;
  1156.     }
  1157.  
  1158.     // notif window
  1159.     wsprintf(m_szFldContextCritical,"fnevCriticalError, lpFolder %s, lpMDB",
  1160.                     m_CurrentFolder.GetBuffer(15));
  1161.  
  1162. #ifdef XVPORT
  1163.     AdviseObj(  lpMDB,
  1164.                 MAPI_STORE,
  1165.                 LogNotifToXVPLog,
  1166.                 fnevCriticalError,
  1167.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1168.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1169.                 m_szFldContextCritical,
  1170.                 NULL,
  1171.                 &m_lpNotifFld);
  1172.  
  1173.     wsprintf(m_szFldContextCreated,"fnevObjectCreated, lpFolder %s, lpMDB",
  1174.                     m_CurrentFolder.GetBuffer(15));
  1175.  
  1176.     AdviseObj(  lpMDB,
  1177.                 MAPI_STORE,
  1178.                 LogNotifToXVPLog,
  1179.                 fnevObjectCreated,
  1180.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1181.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1182.                 m_szFldContextCreated,
  1183.                 NULL,
  1184.                 &m_lpNotifFld);
  1185.  
  1186.     wsprintf(m_szFldContextDeleted,"fnevObjectDeleted, lpFolder %s, lpMDB",
  1187.                     m_CurrentFolder.GetBuffer(15));
  1188.  
  1189.     AdviseObj(  lpMDB,
  1190.                 MAPI_STORE,
  1191.                 LogNotifToXVPLog,
  1192.                 fnevObjectDeleted,
  1193.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1194.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1195.                 m_szFldContextDeleted,
  1196.                 NULL,
  1197.                 &m_lpNotifFld);
  1198.  
  1199.     wsprintf(m_szFldContextModified,"fnevObjectModified, lpFolder %s, lpMDB",
  1200.                     m_CurrentFolder.GetBuffer(15));
  1201.  
  1202.     AdviseObj(  lpMDB,
  1203.                 MAPI_STORE,
  1204.                 LogNotifToXVPLog,
  1205.                 fnevObjectModified,
  1206.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1207.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1208.                 m_szFldContextModified,
  1209.                 NULL,
  1210.                 &m_lpNotifFld);
  1211.  
  1212.     wsprintf(m_szFldContextMoved,"fnevObjectMoved, lpFolder %s, lpMDB",
  1213.                     m_CurrentFolder.GetBuffer(15));
  1214.  
  1215.     AdviseObj(  lpMDB,
  1216.                 MAPI_STORE,
  1217.                 LogNotifToXVPLog,
  1218.                 fnevObjectMoved,
  1219.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1220.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1221.                 m_szFldContextMoved,
  1222.                 NULL,
  1223.                 &m_lpNotifFld);
  1224.  
  1225.     wsprintf(m_szFldContextCopied,"fnevObjectCopied, lpFolder %s, lpMDB",
  1226.                     m_CurrentFolder.GetBuffer(15));
  1227.  
  1228.     AdviseObj(  lpMDB,
  1229.                 MAPI_STORE,
  1230.                 LogNotifToXVPLog,
  1231.                 fnevObjectCopied,
  1232.                 (ULONG)     lpspvaEID[0].Value.bin.cb,
  1233.                 (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1234.                 m_szFldContextCopied,
  1235.                 NULL,
  1236.                 &m_lpNotifFld);
  1237.  
  1238. #endif
  1239.  
  1240.     // SEARCH FOLDER NOTIFICATION
  1241.     m_hResult = m_lpFolder->GetProps( (LPSPropTagArray) &sptaFldType,0, &ulValuesFldType, &lpspvaFldType);
  1242.     wsprintf(m_szLogBuf,"lpFolder->GetProps( &sptaFldType,0, &ulValuesFldType, &lpspvaFldType)\t SC: %s",
  1243.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1244.  
  1245.     if( HR_FAILED(m_hResult))
  1246.     {
  1247.         MessageBox( m_E.SzError("lpFolder->GetProps(&sptaFldType)",m_hResult),
  1248.                      "Client", MBS_ERROR );
  1249.     }
  1250.  
  1251.     if(lpspvaFldType[0].Value.l == FOLDER_SEARCH )
  1252.     {
  1253.         wsprintf(m_szSearchFldContext,"fnevSearchComplete, lpFolder %s,lpMDB",
  1254.                             m_CurrentFolder.GetBuffer(15));
  1255. #ifdef XVPORT
  1256.         AdviseObj(  lpMDB,
  1257.                     MAPI_STORE,
  1258.                     LogNotifToXVPLog,
  1259.                     fnevSearchComplete,
  1260.                     (ULONG)     lpspvaEID[0].Value.bin.cb,
  1261.                     (LPENTRYID) lpspvaEID[0].Value.bin.lpb,
  1262.                     m_szSearchFldContext,
  1263.                     NULL,
  1264.                     &m_lpNotifFld);
  1265.  
  1266. #endif
  1267.     }
  1268.  
  1269.     if(lpspvaFldType)
  1270.         MAPIFreeBuffer(lpspvaFldType);
  1271.  
  1272.     if(lpspvaEID)
  1273.         MAPIFreeBuffer(lpspvaEID);
  1274.  
  1275.     // **** CHILD FOLDERS
  1276.  
  1277.     m_hResult = m_lpFolder->GetHierarchyTable( 0, &m_lpChildTable );
  1278.     wsprintf(m_szLogBuf,"lpFolder->GetHierarchyTable( 0, &m_lpChildTable )\t SC: %s",
  1279.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1280.  
  1281.     if( HR_FAILED(m_hResult))
  1282.     {
  1283.         MessageBox( m_E.SzError("m_lpFolder->GetHierarchyTable", m_hResult), "Client", MBS_ERROR );
  1284.         goto Contents;
  1285.  
  1286.     }
  1287.  
  1288.     // redraw routine
  1289.     AdviseObj(  m_lpChildTable,
  1290.                 MAPI_TABLE,
  1291.                 RedrawHeirarchyTable,
  1292.                 fnevTableModified,
  1293.                 0,
  1294.                 NULL,
  1295.                 "Folder Heirarchy Redraw",
  1296.                 this,
  1297.                 &m_lpNotifHeirTbl);
  1298.  
  1299.     // notif window
  1300.     wsprintf(m_szHeirContext,"fnevTableModified, HeirarchyTable of Folder %s, lpTable",
  1301.                             m_CurrentFolder.GetBuffer(15));
  1302.  
  1303. #ifdef XVPORT
  1304.  
  1305.     AdviseObj(  m_lpChildTable,
  1306.                 MAPI_TABLE,
  1307.                 LogNotifToXVPLog,
  1308.                 fnevTableModified,
  1309.                 0,
  1310.                 NULL,
  1311.                 m_szHeirContext,
  1312.                 NULL,
  1313.                 &m_lpNotifHeirTbl);
  1314.  
  1315. #endif
  1316.     // set which columns are important to see in table
  1317.     m_hResult = m_lpChildTable->SetColumns( (LPSPropTagArray) &sptaDisplayName, 0);
  1318.     wsprintf(m_szLogBuf,"lpChildTable->SetColumns( &sptaDisplayName, 0)\t SC: %s",
  1319.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1320.  
  1321.     if( HR_FAILED(m_hResult))
  1322.     {
  1323.         MessageBox( m_E.SzError("m_lpChildTable->SetColumns", m_hResult),
  1324.                             "Client", MBS_ERROR );
  1325.     }
  1326.  
  1327.     RedrawFolderTable();
  1328.  
  1329.     // **** MESSAGES
  1330.  
  1331. Contents:
  1332.  
  1333.     // find all Messages of this folder
  1334.     m_hResult = m_lpFolder->GetContentsTable( 0, &m_lpMessageTable );
  1335.     wsprintf(m_szLogBuf,"lpFolder->GetContentsTable( 0, &m_lpMessageTable )\t SC: %s",
  1336.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1337.  
  1338.     if( HR_FAILED(m_hResult))
  1339.     {
  1340.         MessageBox( m_E.SzError("m_lpFolder->GetContentsTable", m_hResult), "Client", MBS_ERROR );
  1341.         goto Associated;
  1342.     }
  1343.  
  1344.     // redraw routine
  1345.     AdviseObj(  m_lpMessageTable,
  1346.                 MAPI_TABLE,
  1347.                 RedrawContentsTable,
  1348.                 fnevTableModified,
  1349.                 0,
  1350.                 NULL,
  1351.                 "Folder Contents Redraw",
  1352.                 this,
  1353.                 &m_lpNotifContTbl);
  1354.  
  1355.     wsprintf(m_szContContext,"fnevTableModified, ContentsTable of Folder %s, lpTable",
  1356.                             m_CurrentFolder.GetBuffer(15));
  1357.  
  1358. #ifdef XVPORT
  1359.  
  1360.     AdviseObj(  m_lpMessageTable,
  1361.                 MAPI_TABLE,
  1362.                 LogNotifToXVPLog,
  1363.                 fnevTableModified,
  1364.                 0,
  1365.                 NULL,
  1366.                 m_szContContext,
  1367.                 NULL,
  1368.                 &m_lpNotifContTbl);
  1369.  
  1370. #endif
  1371.     // set which columns are important to see in table
  1372.     m_hResult = m_lpMessageTable->SetColumns( (LPSPropTagArray) &sptaSubject, 0);
  1373.     wsprintf(m_szLogBuf,"lpMessageTable->SetColumns( &sptaSubject, 0)\t SC: %s",
  1374.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1375.  
  1376.     if( HR_FAILED(m_hResult))
  1377.     {
  1378.         MessageBox( m_E.SzError("m_lpMessageTable->SetColumns", m_hResult),
  1379.                     "Client", MBS_ERROR );
  1380.     }
  1381.  
  1382.     RedrawMessageTable();
  1383.  
  1384.  
  1385. Associated:
  1386.  
  1387.     // **** ASSOCIATED MESSAGES
  1388.  
  1389.     // find all Messages of this folder
  1390.     m_hResult = m_lpFolder->GetContentsTable( MAPI_ASSOCIATED , &m_lpAssociatedTable );
  1391.     wsprintf(m_szLogBuf,"lpFolder->GetContentsTable( 0, &m_lpAssociatedTable )\t SC: %s",
  1392.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1393.  
  1394.     if( HR_FAILED(m_hResult))
  1395.     {
  1396.         MessageBox( m_E.SzError("m_lpFolder->GetContentsTable", m_hResult), "Client", MBS_ERROR );
  1397.         goto Setup;
  1398.     }
  1399.  
  1400.     // redraw routine
  1401.     AdviseObj(  m_lpAssociatedTable,
  1402.                 MAPI_TABLE,
  1403.                 RedrawAssMsgTable,
  1404.                 fnevTableModified,
  1405.                 0,
  1406.                 NULL,
  1407.                 "Folder Associated Contents Redraw",
  1408.                 this,
  1409.                 &m_lpNotifAssTbl);
  1410.  
  1411.     // notif window
  1412.     wsprintf(m_szAssContext,"fnevTableModified, Associated ContentsTable of Folder %s, lpTable",
  1413.                             m_CurrentFolder.GetBuffer(15));
  1414.  
  1415. #ifdef XVPORT
  1416.  
  1417.     AdviseObj(  m_lpAssociatedTable,
  1418.                 MAPI_TABLE,
  1419.                 LogNotifToXVPLog,
  1420.                 fnevTableModified,
  1421.                 0,
  1422.                 NULL,
  1423.                 m_szAssContext,
  1424.                 NULL,
  1425.                 &m_lpNotifAssTbl);
  1426. #endif
  1427.  
  1428.     // set which columns are important to see in table
  1429.     m_hResult = m_lpAssociatedTable->SetColumns( (LPSPropTagArray) &sptaSubject, 0);
  1430.     wsprintf(m_szLogBuf,"lpAssociatedTable->SetColumns( &sptaSubject, 0)\t SC: %s",
  1431.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1432.  
  1433.     if( HR_FAILED(m_hResult))
  1434.     {
  1435.         MessageBox( m_E.SzError("m_lpAssociatedTable->SetColumns", m_hResult),
  1436.                     "Client", MBS_ERROR );
  1437.     }
  1438.  
  1439.     RedrawAssociatedTable();
  1440.  
  1441.  
  1442. Setup:
  1443.  
  1444.  
  1445.     ResetPropButtons();
  1446.  
  1447.     RedrawPropTable();
  1448.  
  1449.  
  1450.     // set focus of the listboxs
  1451.     dwIndex = SendDlgItemMessage(IDC_FLDCHILD,      LB_SETCURSEL,(WPARAM) -1 ,0 );
  1452.     dwIndex = SendDlgItemMessage(IDC_PROPS,         LB_SETCURSEL,(WPARAM) -1 ,0 );
  1453.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,   LB_SETSEL,   (WPARAM)FALSE ,(LPARAM) -1);
  1454.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,       LB_SETSEL,   (WPARAM)FALSE ,(LPARAM) -1);
  1455.  
  1456.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,   LB_SETHORIZONTALEXTENT,
  1457.                                 (WPARAM) MSG_LISTBOX_HORIZONTAL_SIZE ,0 );
  1458.  
  1459.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,   LB_SETHORIZONTALEXTENT,
  1460.                                 (WPARAM) MSG_LISTBOX_HORIZONTAL_SIZE ,0 );
  1461.  
  1462.  
  1463.  
  1464. //NOTICE: THIS PRESENTS A PROBLEM !!!!!
  1465.  
  1466.  
  1467.     //***** Add Strings to call function combo box *****
  1468.     //***** Add Strings to call function combo box *****
  1469.  
  1470.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1471.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "Folder Properties" );
  1472.  
  1473.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1474.     {
  1475.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1476.         return FALSE;
  1477.     }            
  1478.  
  1479.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1480.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->GetContentsTable()" );
  1481.  
  1482.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1483.     {
  1484.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1485.         return FALSE;
  1486.     }            
  1487.  
  1488.  
  1489.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1490.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->GetHeirarchyTable()" );
  1491.  
  1492.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1493.     {
  1494.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1495.         return FALSE;
  1496.     }            
  1497.  
  1498.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1499.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->OpenEntry() -- Child Folder        (ON SELECTED FLD)" );
  1500.  
  1501.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1502.     {
  1503.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1504.         return FALSE;
  1505.     }            
  1506.                      
  1507.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1508.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->OpenEntry() -- Message             (ON SELECTED MSG)" );
  1509.  
  1510.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1511.     {
  1512.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1513.         return FALSE;
  1514.     }            
  1515.     
  1516.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1517.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->OpenEntry() -- Associated Msg      (ON SELECTED MSG)" );
  1518.  
  1519.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1520.     {
  1521.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1522.         return FALSE;
  1523.     }            
  1524.     
  1525.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1526.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->CreateMessage()" );
  1527.  
  1528.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1529.     {
  1530.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1531.         return FALSE;
  1532.     }            
  1533.  
  1534.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1535.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->CreateFolder()" );
  1536.  
  1537.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1538.     {
  1539.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1540.         return FALSE;
  1541.     }            
  1542.  
  1543.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1544.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->CopyFolder()                       (ON SELECTED FLD)" );
  1545.  
  1546.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1547.     {
  1548.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1549.         return FALSE;
  1550.     }            
  1551.  
  1552.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1553.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->CopyMessages()                     (ON SELECTED MSGS)" );
  1554.  
  1555.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1556.     {
  1557.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1558.         return FALSE;
  1559.     }            
  1560.        
  1561.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1562.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->DeleteFolder()                     (ON SELECTED FLD)" );
  1563.  
  1564.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1565.     {
  1566.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1567.         return FALSE;
  1568.     }            
  1569.        
  1570.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1571.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->DeleteMessages()                   (ON SELECTED MSGS)" );
  1572.  
  1573.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1574.     {
  1575.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1576.         return FALSE;
  1577.     }            
  1578.  
  1579.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1580.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->EmptyFolder()" );
  1581.  
  1582.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1583.     {
  1584.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1585.         return FALSE;
  1586.     }            
  1587.  
  1588.  
  1589.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1590.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->GetSearchCriteria()" );
  1591.  
  1592.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1593.     {
  1594.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1595.         return FALSE;
  1596.     }            
  1597.  
  1598.  
  1599.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1600.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->SetSearchCriteria()" );
  1601.  
  1602.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1603.     {
  1604.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1605.         return FALSE;
  1606.     }            
  1607.  
  1608.  
  1609.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1610.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->SetMsgStatus()                     (ON SELECTED MSG)" );
  1611.  
  1612.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1613.     {
  1614.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1615.         return FALSE;
  1616.     }            
  1617.  
  1618.  
  1619.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1620.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->GetMsgStatus()                     (ON SELECTED MSG)" );
  1621.  
  1622.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1623.     {
  1624.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1625.         return FALSE;
  1626.     }            
  1627.  
  1628.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1629.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpMDB->AbortSubmit()                      (ON SELECTED MSG)" );
  1630.  
  1631.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1632.     {
  1633.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1634.         return FALSE;
  1635.     }            
  1636.  
  1637.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1638.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "Message Store Properties" );
  1639.  
  1640.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1641.     {
  1642.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1643.         return FALSE;
  1644.     }            
  1645.  
  1646.  
  1647.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1648.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpMDB->SetReceiveFolder()" );
  1649.  
  1650.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1651.     {
  1652.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1653.         return FALSE;
  1654.     }            
  1655.  
  1656.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1657.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpFld->Adivse() / UnAdvise                (NOTIFICATIONS)" );
  1658.  
  1659.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1660.     {
  1661.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1662.         return FALSE;
  1663.     }            
  1664.  
  1665.  
  1666.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1667.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpHeirTbl->Adivse() / UnAdvise            (NOTIFICATIONS)" );
  1668.  
  1669.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1670.     {
  1671.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1672.         return FALSE;
  1673.     }            
  1674.  
  1675.  
  1676.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1677.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpAssContTbl->Adivse() / UnAdvise         (NOTIFICATIONS)" );
  1678.  
  1679.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1680.     {
  1681.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1682.         return FALSE;
  1683.     }            
  1684.  
  1685.  
  1686.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1687.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "lpContTbl->Adivse() / UnAdvise            (NOTIFICATIONS)" );
  1688.  
  1689.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1690.     {
  1691.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1692.         return FALSE;
  1693.     }            
  1694.  
  1695.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1696.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "INTERNAL -- SET THIS FOLDER AS COPY DESTINATION" );
  1697.  
  1698.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1699.     {
  1700.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1701.         return FALSE;
  1702.     }            
  1703.  
  1704.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_ADDSTRING,
  1705.                                 (WPARAM) 0 , (LPARAM) (LPCTSTR) "INTERNAL -- SET THIS FOLDER TO BE IN LIST OF SEARCH FOLDERS" );
  1706.  
  1707.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1708.     {
  1709.         MessageBox( "CB_ADDSTRING functions returned Error", "Client", MBS_ERROR );
  1710.         return FALSE;
  1711.     }            
  1712.  
  1713.  
  1714.  
  1715.     // SET CURRENT SELECTION IN COMBO BOX TO 1ST ITEM
  1716.     dwIndex = SendDlgItemMessage(IDC_FUNCTIONS, CB_SETCURSEL,
  1717.                                 (WPARAM) 0 , (LPARAM) 0 );
  1718.  
  1719.     if( (dwIndex == CB_ERR ) || (dwIndex == CB_ERRSPACE) )
  1720.     {
  1721.         MessageBox( "CB_SETCURSEL functions returned Error", "Client", MBS_ERROR );
  1722.         return FALSE;
  1723.     }            
  1724.  
  1725.  
  1726.  
  1727.  
  1728.     return TRUE;
  1729. }
  1730.  
  1731. /********************************************************************/
  1732. /*
  1733.  -  CFolderDlg::
  1734.  -  RedrawFolderTable
  1735.  -
  1736.  *  Purpose:
  1737.  *      Refresh view of Hierarchytable in this folder
  1738.  *
  1739.  /********************************************************************/
  1740.  
  1741. void CFolderDlg::RedrawFolderTable()
  1742. {
  1743.     ULONG           cColumn         = 0;
  1744.     int             iRow            = 0;
  1745.     DWORD           dwIndex         = 0;
  1746.     LPSRowSet       lpRows          = NULL;
  1747.     LONG            lRowsSeeked     = 0;
  1748.     ULONG           ulRowCount      = 0;
  1749.  
  1750.     // PropTag Array for getting displayname and entryid
  1751.     SizedSPropTagArray(2,sptaDisplayName) =
  1752.     {
  1753.         2,
  1754.         {
  1755.             PR_DISPLAY_NAME,
  1756.             PR_ENTRYID
  1757.         }
  1758.     };
  1759.  
  1760.  
  1761.     dwIndex = SendDlgItemMessage(IDC_FLDCHILD,LB_RESETCONTENT,0,0);
  1762.  
  1763.     m_hResult = m_lpChildTable->GetRowCount(0,&ulRowCount);
  1764.     wsprintf(m_szLogBuf,"lpChildTable->GetRowCount(0,&ulRowCount)\t SC: %s",
  1765.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1766.  
  1767.     if( HR_FAILED(m_hResult))
  1768.     {
  1769.         MessageBox( m_E.SzError("m_lpChildTable->GetRowCount()", m_hResult), "Client", MBS_ERROR );
  1770.         goto Error;
  1771.     }
  1772.  
  1773.     if( !ulRowCount)
  1774.         return;
  1775.  
  1776.     m_hResult = m_lpChildTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  1777.  
  1778.     wsprintf(m_szLogBuf,"lpChildTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  1779.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1780.  
  1781.     if( HR_FAILED(m_hResult))
  1782.     {
  1783.         MessageBox( m_E.SzError("m_lpChildTable->SeekRow", m_hResult),
  1784.                             "Client", MBS_ERROR );
  1785.         goto Error;
  1786.     }
  1787.  
  1788.     m_hResult = m_lpChildTable->QueryRows( ulRowCount, 0, &lpRows );
  1789.     wsprintf(m_szLogBuf,"lpChildTable->QueryRows( %lu, 0, &lpRows )\t SC: %s",
  1790.                         ulRowCount,
  1791.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1792.  
  1793.     if( !HR_FAILED(m_hResult) )
  1794.     {
  1795.         for(iRow = 0; iRow < lpRows->cRows; iRow++)
  1796.         {
  1797.             if(lpRows->aRow[iRow].lpProps[0].ulPropTag == PR_DISPLAY_NAME )
  1798.             {
  1799.                 dwIndex = SendDlgItemMessage(IDC_FLDCHILD,LB_ADDSTRING,0,
  1800.                             (LPARAM)lpRows->aRow[iRow].lpProps[0].Value.lpszA);
  1801.             }
  1802.         }
  1803.     }
  1804.  
  1805.     FreeRowSet(lpRows);
  1806.  
  1807.     return;
  1808.  
  1809. Error:
  1810.     FreeRowSet(lpRows);
  1811.  
  1812.     MessageBox( "RedrawFolderTable Failed","Client", MBS_ERROR );
  1813.  
  1814. }
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820. /********************************************************************/
  1821. /*
  1822.  -  CFolderDlg::
  1823.  -  RedrawMessageTable
  1824.  -
  1825.  *  Purpose:
  1826.  *      Refresh view of ContentsTable in this folder
  1827.  *
  1828.  /********************************************************************/
  1829.  
  1830. void CFolderDlg::RedrawMessageTable()
  1831. {
  1832.     ULONG           cColumn         = 0;
  1833.     int             iRow            = 0;
  1834.     DWORD           dwIndex         = 0;
  1835.     LPSRowSet       lpRows          = NULL;
  1836.     ULONG           ulRowCount      = 0;
  1837.     char            szBuffer[256];
  1838.     LONG            lRowsSeeked     = 0;
  1839.  
  1840.     // NORMAL MESSAGES
  1841.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_RESETCONTENT,0,0);
  1842.  
  1843.     m_hResult = m_lpMessageTable->GetRowCount(0,&ulRowCount);
  1844.     wsprintf(m_szLogBuf,"lpMessageTable->GetRowCount(0,&ulRowCount)\t SC: %s",
  1845.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1846.  
  1847.     if( HR_FAILED(m_hResult))
  1848.     {
  1849.         MessageBox( m_E.SzError("m_lpMessageTable->GetRowCount()", m_hResult), "Client", MBS_ERROR );
  1850.         goto Error;
  1851.     }
  1852.  
  1853.     if( !ulRowCount)
  1854.         return;
  1855.     m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  1856.  
  1857.     wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  1858.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1859.  
  1860.     if( HR_FAILED(m_hResult))
  1861.     {
  1862.         MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  1863.                             "Client", MBS_ERROR );
  1864.         goto Error;
  1865.     }
  1866.  
  1867.     m_hResult = m_lpMessageTable->QueryRows( ulRowCount, 0, &lpRows );
  1868.  
  1869.     wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( %lu, 0, &lpRows )\t SC: %s",
  1870.                         ulRowCount,
  1871.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1872.  
  1873.     if( GetScode(m_hResult) == S_OK )
  1874.     {
  1875.         for(iRow = 0; iRow < lpRows->cRows; iRow++)
  1876.         {
  1877.             // if there is a subject
  1878.             if( (PROP_TYPE(lpRows->aRow[iRow].lpProps[0].ulPropTag) != PT_ERROR) &&
  1879.                 (PROP_TYPE(lpRows->aRow[iRow].lpProps[0].ulPropTag) != PT_NULL ) )
  1880.             {
  1881.                 dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_ADDSTRING,0,
  1882.                         (LPARAM)lpRows->aRow[iRow].lpProps[0].Value.lpszA);
  1883.             }
  1884.             else
  1885.             {
  1886.                 // no PR_SUBJECT, use EntryID
  1887.                 SzGetPropValue(szBuffer, &(lpRows->aRow[iRow].lpProps[1]) );
  1888.  
  1889.                 dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_ADDSTRING,0,
  1890.                         (LPARAM)szBuffer);
  1891.             }
  1892.         }
  1893.     }
  1894.  
  1895.     FreeRowSet(lpRows);
  1896.  
  1897.     return;
  1898.  
  1899. Error:
  1900.  
  1901.     FreeRowSet(lpRows);
  1902.  
  1903.     MessageBox( "RedrawMessageTable Failed","Client", MBS_ERROR );
  1904.  
  1905. }
  1906.  
  1907.  
  1908.  
  1909. /********************************************************************/
  1910. /*
  1911.  -  CFolderDlg::
  1912.  -  RedrawAssociatedTable
  1913.  -
  1914.  *  Purpose:
  1915.  *      Refresh view of ContentsTable in this folder
  1916.  *
  1917. /********************************************************************/
  1918.  
  1919. void CFolderDlg::RedrawAssociatedTable()
  1920. {
  1921.     ULONG           cColumn         = 0;
  1922.     int             iRow            = 0;
  1923.     DWORD           dwIndex         = 0;
  1924.     LPSRowSet       lpRows          = NULL;
  1925.     ULONG           ulRowCount      = 0;
  1926.     char            szBuffer[256];
  1927.     LONG            lRowsSeeked     = 0;
  1928.  
  1929.     // NORMAL MESSAGES
  1930.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,LB_RESETCONTENT,0,0);
  1931.  
  1932.     m_hResult = m_lpAssociatedTable->GetRowCount(0,&ulRowCount);
  1933.     wsprintf(m_szLogBuf,"lpAssociatedTable->GetRowCount(0,&ulRowCount)\t SC: %s",
  1934.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1935.  
  1936.     if( HR_FAILED(m_hResult))
  1937.     {
  1938.         MessageBox( m_E.SzError("m_lpAssociatedTable->GetRowCount()", m_hResult), "Client", MBS_ERROR );
  1939.         goto Error;
  1940.     }
  1941.  
  1942.     if( !ulRowCount)
  1943.         return;
  1944.  
  1945.     m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked);
  1946.  
  1947.     wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,0,&lRowsSeeked)\t SC: %s",
  1948.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1949.  
  1950.     if( HR_FAILED(m_hResult))
  1951.     {
  1952.         MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  1953.                             "Client", MBS_ERROR );
  1954.         goto Error;
  1955.     }
  1956.  
  1957.     m_hResult = m_lpAssociatedTable->QueryRows( ulRowCount, 0, &lpRows );
  1958.  
  1959.     wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( %lu, 0, &lpRows )\t SC: %s",
  1960.                         ulRowCount,
  1961.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  1962.  
  1963.     if( GetScode(m_hResult) == S_OK )
  1964.     {
  1965.         for(iRow = 0; iRow < lpRows->cRows; iRow++)
  1966.         {
  1967.             // if there is a subject
  1968.             if( (PROP_TYPE(lpRows->aRow[iRow].lpProps[0].ulPropTag) != PT_ERROR) &&
  1969.                 (PROP_TYPE(lpRows->aRow[iRow].lpProps[0].ulPropTag) != PT_NULL ) )
  1970.             {
  1971.                 dwIndex = SendDlgItemMessage(IDC_FLD_ASS,LB_ADDSTRING,0,
  1972.                         (LPARAM)lpRows->aRow[iRow].lpProps[0].Value.lpszA);
  1973.             }
  1974.             else
  1975.             {
  1976.                 // no PR_SUBJECT, use EntryID
  1977.                 SzGetPropValue(szBuffer, &(lpRows->aRow[iRow].lpProps[1]) );
  1978.  
  1979.                 dwIndex = SendDlgItemMessage(IDC_FLD_ASS,LB_ADDSTRING,0,
  1980.                         (LPARAM)szBuffer);
  1981.             }
  1982.         }
  1983.     }
  1984.  
  1985.     FreeRowSet(lpRows);
  1986.  
  1987.     return;
  1988.  
  1989. Error:
  1990.  
  1991.     FreeRowSet(lpRows);
  1992.  
  1993.     MessageBox( "RedrawAssociatedTable Failed","Client", MBS_ERROR );
  1994. }
  1995.  
  1996. /*******************************************************************/
  1997. /*
  1998.  -  CFolderDlg::
  1999.  -  OnSetSearchDestFlds
  2000.  *
  2001.  *  Purpose:
  2002.  *      SetSearchEntryList folder list
  2003.  */
  2004. /*******************************************************************/
  2005.  
  2006. void CFolderDlg::OnSetSearchDestFlds()
  2007. {
  2008.     ULONG           ulValues        = 0;
  2009.     LPSPropValue    lpPropValue    = NULL;
  2010.     CEntryListDlg   SearchList(this);
  2011.  
  2012.     // PropTag Array for getting displayname and entryid
  2013.     SizedSPropTagArray(2,sptaDisplayName) =
  2014.     {
  2015.         2,
  2016.         {
  2017.             PR_DISPLAY_NAME,
  2018.             PR_ENTRYID
  2019.         }
  2020.     };
  2021.  
  2022.     // for SetsearchCriteria Folder Entrylist
  2023.  
  2024.     m_hResult = m_lpFolder->GetProps( (LPSPropTagArray) &sptaDisplayName,0,&ulValues,&lpPropValue);
  2025.     wsprintf(m_szLogBuf,"lpFolder->GetProps( &sptaDisplayName,0,&ulValues,&lpPropValue)\t SC: %s",
  2026.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2027.  
  2028.     if( HR_FAILED(m_hResult))
  2029.     {
  2030.         MessageBox( m_E.SzError("m_lpFolder->GetProps()", m_hResult),
  2031.                             "Client", MBS_ERROR );
  2032.         return;
  2033.     }
  2034.  
  2035.     if(cFolders == 0)
  2036.     {
  2037.         lpEntryListSearchFolder = (LPENTRYLIST) PvAlloc(sizeof(ENTRYLIST) );
  2038.         lpEntryListSearchFolder->lpbin      = (SBinary *) PvAllocMore(
  2039.                        ( 10 * sizeof(SBinary)) , lpEntryListSearchFolder);
  2040.         lpEntryListSearchFolder->cValues    = 1;
  2041.     }
  2042.     else
  2043.         lpEntryListSearchFolder->cValues++;
  2044.  
  2045.     cFolders++;
  2046.  
  2047.     lpEntryListSearchFolder->lpbin[cFolders - 1].cb  = lpPropValue[1].Value.bin.cb;
  2048.     lpEntryListSearchFolder->lpbin[cFolders - 1].lpb = (BYTE *)PvAllocMore(
  2049.                                     lpPropValue[1].Value.bin.cb,lpEntryListSearchFolder);
  2050.  
  2051.     memcpy(lpEntryListSearchFolder->lpbin[cFolders - 1].lpb,
  2052.                lpPropValue[1].Value.bin.lpb,
  2053.                (size_t) lpPropValue[1].Value.bin.cb);
  2054.  
  2055.     SearchList.m_List = "SearchFolder EntryList";
  2056.     SearchList.m_lppEntryList = &lpEntryListSearchFolder;
  2057.  
  2058.     SearchList.DoModal();
  2059.  
  2060.     // if cleared list, reset count
  2061.     if( !lpEntryListSearchFolder)
  2062.          cFolders = 0;
  2063.  
  2064.     if(lpPropValue)
  2065.     {
  2066.         MAPIFreeBuffer(lpPropValue);
  2067.         wsprintf(m_szLogBuf,"MAPIFreeBuffer(%s)", "lpPropValue from GetProps" );
  2068.     }
  2069. }
  2070.  
  2071.  
  2072. /*******************************************************************/
  2073. /*
  2074.  -  CFolderDlg::
  2075.  -  OnSetCopyToDest
  2076.  *
  2077.  *  Purpose:
  2078.  *      Set Destination object of CopyTo operation or CopyMessage
  2079.  *
  2080.  *  lpvCopyToDest and CopyToDest are global
  2081.  */
  2082. /*******************************************************************/
  2083.  
  2084. void CFolderDlg::OnSetCopyToDest()
  2085. {
  2086.     char    szBuffer[256];
  2087.  
  2088.     lpvCopyToDest   = (LPVOID) m_lpFolder;
  2089.  
  2090.     wsprintf(szBuffer,"%s is next Destination for CopyTo() or CopyMessage()",
  2091.                 m_CurrentFolder.GetBuffer(40) );
  2092.  
  2093.     MessageBox( szBuffer,"Client", MBS_INFO );
  2094.  
  2095. }
  2096.  
  2097. /*******************************************************************/
  2098. /*
  2099.  -  CFolderDlg::
  2100.  -  OnFldCreate
  2101.  *
  2102.  *  Purpose:
  2103.  *      Operation lpFolder->CreateFolder()
  2104.  *
  2105.  */
  2106. /*******************************************************************/
  2107.  
  2108. void CFolderDlg::OnFldCreate()
  2109. {
  2110.     COperation      FldCreateDlg(this);
  2111.     CFolderDlg      *lpDlgChildFld  = NULL;
  2112.     char            szBuff[80];
  2113.     CString         OperName;
  2114.     int             dRet            = 0;
  2115.     LONG            lCurSelect      = 0;
  2116.     LPIID           lpInterface     = NULL;
  2117.     LONG            lFolderType     = 0;
  2118.     ULONG           ulFlags         = 0;
  2119.     LPMAPIFOLDER        lpFolder        = NULL;
  2120.     ULONG           idx             = 0;
  2121.     LPWSTR          lpNewBuffer1    = NULL;
  2122.     LPWSTR          lpNewBuffer2    = NULL;
  2123.     SCODE           scResult        = S_OK;
  2124.     ULONG           ulRowCount      = 0;
  2125.     char            szBuffer[80];
  2126.  
  2127.     // initalize data for dialog box
  2128.  
  2129.     OperName  = m_CurrentFolder;
  2130.     OperName += "->CreateFolder()";
  2131.  
  2132.     FldCreateDlg.m_CurrentOperation= OperName;
  2133.     FldCreateDlg.m_CBText1         = "lpInterface";
  2134.     FldCreateDlg.m_CBText2         = "ulFolderType";
  2135.     FldCreateDlg.m_EditText1       = "lpszFolderName";
  2136.     FldCreateDlg.m_EditText2       = "lpszFolderComment";
  2137.     FldCreateDlg.m_FlagText1       = "MAPI_UNICODE";
  2138.     FldCreateDlg.m_FlagText2       = "MAPI_DEFERRED_ERRORS";
  2139.     FldCreateDlg.m_FlagText3       = "OPEN_IF_EXISTS";
  2140.     FldCreateDlg.m_FlagText4       = "Invalid Flag";
  2141.     FldCreateDlg.m_EditDefault1    = "New Folder Name";
  2142.     FldCreateDlg.m_EditDefault2    = "New Folder Comment";
  2143.  
  2144.     dRet = FldCreateDlg.m_CBContents1.Add("NULL");
  2145.     dRet = FldCreateDlg.m_CBContents1.Add("BadParam");
  2146.  
  2147.     ulRowCount = GetRowCount("FolderType");
  2148.     for( idx = 0; idx < ulRowCount ; idx++ )
  2149.     {
  2150.         if( !GetRowString("FolderType",idx,szBuff) )
  2151.              return;
  2152.  
  2153.         FldCreateDlg.m_CBContents2.Add(szBuff);
  2154.     }
  2155.  
  2156.     // bring up modal dialog box, and if user hits OK, process operation
  2157.     if( FldCreateDlg.DoModal() == IDOK )
  2158.     {
  2159.  
  2160.         // determine state/settings of data in dialog upon closing
  2161.         if( !lstrcmp(FldCreateDlg.m_szCB1,"NULL") )
  2162.             lpInterface = NULL;
  2163.         else
  2164.             lpInterface = (LPIID) &ulFlags;         // invalid
  2165.  
  2166.         GetID("FolderType",FldCreateDlg.m_szCB2,&lFolderType);
  2167.  
  2168.         if( FldCreateDlg.m_bFlag2 )
  2169.             ulFlags |= MAPI_DEFERRED_ERRORS;
  2170.  
  2171.         if( FldCreateDlg.m_bFlag3 )
  2172.             ulFlags |= OPEN_IF_EXISTS;
  2173.  
  2174.         if( FldCreateDlg.m_bFlag4)
  2175.             ulFlags |= TEST_INVALID_FLAG;
  2176.  
  2177.         if( FldCreateDlg.m_bFlag1 )
  2178.         {
  2179.             ulFlags |= MAPI_UNICODE;
  2180.  
  2181.             String8ToUnicode(FldCreateDlg.m_szEdit1, &lpNewBuffer1, NULL);
  2182.             String8ToUnicode(FldCreateDlg.m_szEdit2, &lpNewBuffer2, NULL);
  2183.  
  2184.  
  2185.             m_hResult = m_lpFolder->CreateFolder(
  2186.                         (ULONG)  lFolderType,
  2187.                         (LPTSTR) lpNewBuffer1,
  2188.                         (LPTSTR) lpNewBuffer2,
  2189.                         lpInterface,
  2190.                         ulFlags,
  2191.                         &lpFolder);
  2192.  
  2193.             wsprintf(m_szLogBuf,"lpFolder->CreateFolder(%lu,%s,%s,0x%X,%lu,&lpFolder)\t SC: %s",
  2194.                         lFolderType,FldCreateDlg.m_szEdit1,FldCreateDlg.m_szEdit2,
  2195.                         lpInterface,ulFlags,
  2196.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2197.  
  2198.             if( HR_FAILED(m_hResult))
  2199.             {
  2200.                 MessageBox( m_E.SzError("m_lpFolder->CreateFolder()", m_hResult),
  2201.                             "Client", MBS_ERROR );
  2202.                 PvFree(lpNewBuffer1);
  2203.                 PvFree(lpNewBuffer2);
  2204.                 return;
  2205.             }
  2206.  
  2207.             PvFree(lpNewBuffer1);
  2208.             PvFree(lpNewBuffer2);
  2209.         }
  2210.         else
  2211.         {
  2212.  
  2213.             m_hResult = m_lpFolder->CreateFolder(
  2214.                         (ULONG)  lFolderType,
  2215.                         (LPTSTR) FldCreateDlg.m_szEdit1,
  2216.                         (LPTSTR) FldCreateDlg.m_szEdit2,
  2217.                         lpInterface,
  2218.                         ulFlags,
  2219.                         &lpFolder);
  2220.  
  2221.  
  2222.             wsprintf(m_szLogBuf,"lpFolder->CreateFolder(%lu,%s,%s,0x%X,%lu,&lpFolder)\t SC: %s",
  2223.                         lFolderType,FldCreateDlg.m_szEdit1,FldCreateDlg.m_szEdit2,
  2224.                         lpInterface,ulFlags,
  2225.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2226.  
  2227.             if( HR_FAILED(m_hResult))
  2228.             {
  2229.                 MessageBox( m_E.SzError("m_lpFolder->CreateFolder()", m_hResult),
  2230.                                 "Client", MBS_ERROR );
  2231.                 return;
  2232.             }
  2233.  
  2234.         }
  2235.  
  2236.  
  2237.         wsprintf(szBuffer,"MAPI_FOLDER - %s",FldCreateDlg.m_szEdit1);
  2238.  
  2239.         lpDlgChildFld   =  new CFolderDlg(szBuffer,(LPMAPIFOLDER)lpFolder,this);
  2240.  
  2241.     }
  2242. }
  2243.  
  2244. /*******************************************************************/
  2245. /*
  2246.  -  CFolderDlg::
  2247.  -  OnGetSearchCriteria
  2248.  *
  2249.  *  Purpose:
  2250.  *      Operation lpFolder->GetSearchCriteria()
  2251.  *
  2252.  */
  2253. /*******************************************************************/
  2254.  
  2255. void CFolderDlg::OnGetSearchCriteria()
  2256. {
  2257.     CRestrictionDlg GetSearchRestrictionDlg(this);
  2258.     LPSRestriction  lpsRestriction      = NULL;
  2259.     LPENTRYLIST     lpEntryList         = NULL;
  2260.     ULONG           ulSearchState       = 0;
  2261.     CEntryListDlg   SearchList(this);
  2262.     char            szBuffer[128];
  2263.  
  2264.     m_hResult = m_lpFolder->GetSearchCriteria(
  2265.                         0,
  2266.                         &lpsRestriction,
  2267.                         &lpEntryList,
  2268.                         &ulSearchState);
  2269.  
  2270.     wsprintf(m_szLogBuf,"lpFolder->GetSearchCriteria(0,&lpsRes,&lpEntryList,&ulSearchState)\t SC: %s",
  2271.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2272.  
  2273.     if( HR_FAILED(m_hResult))
  2274.     {
  2275.         MessageBox( m_E.SzError("m_lpFolder->GetSearchCriteria()", m_hResult),
  2276.                     "Client", MBS_ERROR );
  2277.         goto End;
  2278.     }
  2279.  
  2280.     GetSearchRestrictionDlg.m_ulSearchState = ulSearchState;
  2281.     GetSearchRestrictionDlg.m_prest         = lpsRestriction;
  2282.     GetSearchRestrictionDlg.DoModal();
  2283.  
  2284.     SearchList.m_List = "GetSearchCriteria EntryList";
  2285.     SearchList.m_lppEntryList = &lpEntryList;
  2286.  
  2287.     SearchList.DoModal();
  2288.  
  2289.     wsprintf(szBuffer,"ulSearchState == %lu, %s%s%s%s",ulSearchState,
  2290.             ((ulSearchState & SEARCH_RUNNING)     ? "SEARCH_RUNNING     | "   : ""),
  2291.             ((ulSearchState & SEARCH_REBUILD)     ? "SEARCH_REBUILD     | "   : ""),
  2292.             ((ulSearchState & SEARCH_RECURSIVE)   ? "SEARCH_RECURSIVE   | "   : ""),
  2293.             ((ulSearchState & SEARCH_FOREGROUND)  ? "SEARCH_FOREGROUND  | "   : ""));
  2294.  
  2295.     MessageBox( szBuffer,"Client", MBS_INFO );
  2296.  
  2297.  
  2298. End:
  2299.  
  2300.     if(lpsRestriction)
  2301.     {
  2302.         MAPIFreeBuffer(lpsRestriction);
  2303.         wsprintf(m_szLogBuf,"MAPIFreeBuffer(%s)", "lpsRestriction from GetSearchCriteria" );
  2304.     }
  2305.  
  2306.     if(lpEntryList)
  2307.     {
  2308.         MAPIFreeBuffer(lpEntryList);
  2309.         wsprintf(m_szLogBuf,"MAPIFreeBuffer(%s)", "lpEntryList from GetSearchCriteria" );
  2310.     }
  2311. }
  2312.  
  2313.  
  2314.  
  2315. /*******************************************************************/
  2316. /*
  2317.  -  CFolderDlg::
  2318.  -  OnSetSearchCriteria
  2319.  *
  2320.  *  Purpose:
  2321.  *      Operation lpFolder->SetSearchCriteria()
  2322.  *
  2323.  */
  2324. /*******************************************************************/
  2325.  
  2326. void CFolderDlg::OnSetSearchCriteria()
  2327. {
  2328.     COperation      SetSearchDlg(this);
  2329.     char            szBuffer[512];
  2330.     char            szBuff[80];
  2331.     CString         OperName;
  2332.     ULONG           ulFlags         = 0;
  2333.     SCODE           sc              = S_OK;
  2334.     LPSRestriction  lpRes           = NULL;
  2335.     LPSPropTagArray lpsptaAll       = NULL;
  2336.     DWORD           dRet            = 0;
  2337.     ULONG           idx             = 0;
  2338.     ULONG           ulMax           = 0;
  2339.     ULONG           ulPropTag       = 0;
  2340.     CEntryListDlg   SearchList(this);
  2341.     ULONG           cb              = 0;
  2342.  
  2343.     ulMax =   GetRowCount("PropTags");
  2344.  
  2345.  
  2346.     cb = CbNewSPropTagArray(ulMax);
  2347.     lpsptaAll = (LPSPropTagArray) PvAlloc(cb);
  2348.     lpsptaAll->cValues = 0;
  2349.  
  2350.     for(idx = 0; idx < ulMax ; idx++)
  2351.     {
  2352.         ulPropTag = GetRowID("PropTags",idx);
  2353.  
  2354.         lpsptaAll->cValues++;
  2355.         lpsptaAll->aulPropTag[lpsptaAll->cValues - 1] = ulPropTag;
  2356.     }
  2357.  
  2358.     lpRes = (LPSRestriction)PvAlloc(sizeof(SRestriction));
  2359.  
  2360.     CResDlg         dlgBuildRes(lpsptaAll, lpRes);
  2361.     dlgBuildRes.DoModal();
  2362.  
  2363.     PvFree(lpsptaAll);
  2364.  
  2365.     // initalize data for dialog box
  2366.  
  2367.     OperName  = m_CurrentFolder;
  2368.     OperName += "->SetSearchCriteria()";
  2369.  
  2370.     SetSearchDlg.m_CurrentOperation= OperName;
  2371.     SetSearchDlg.m_CBText1         = "lpEntryList:";
  2372.     SetSearchDlg.m_CBText2         = "lpRestriction:";
  2373.     SetSearchDlg.m_FlagText1       = "STOP_SEARCH";
  2374.     SetSearchDlg.m_FlagText2       = "RESTART_SEARCH";
  2375.     SetSearchDlg.m_FlagText3       = "SHALLOW_SEARCH";
  2376.     SetSearchDlg.m_FlagText4       = "RECURSIVE_SEARCH";
  2377.     SetSearchDlg.m_FlagText5       = "FOREGROUND_SEARCH";
  2378.     SetSearchDlg.m_FlagText6       = "BACKGROUND_SEARCH";
  2379.  
  2380.     if(lpEntryListSearchFolder)
  2381.     {
  2382.         for( idx = 0 ; idx < lpEntryListSearchFolder->cValues ; idx++)
  2383.         {
  2384.             SzGetEntryID(   szBuffer,
  2385.                             (LPENTRYID) lpEntryListSearchFolder->lpbin[idx].lpb,
  2386.                             (ULONG)     lpEntryListSearchFolder->lpbin[idx].cb);
  2387.  
  2388.             dRet = SetSearchDlg.m_CBContents1.Add(szBuffer);
  2389.         }
  2390.     }
  2391.  
  2392.     wsprintf(szBuff,"Built Restriction == 0x%X",lpRes);
  2393.     dRet = SetSearchDlg.m_CBContents2.Add(szBuff);
  2394.     dRet = SetSearchDlg.m_CBContents2.Add("NULL");
  2395.  
  2396.      // bring up modal dialog box, and if user hits OK, process operation
  2397.     if( SetSearchDlg.DoModal() == IDOK )
  2398.     {
  2399.         if( SetSearchDlg.m_bFlag1 )
  2400.             ulFlags |= STOP_SEARCH;
  2401.  
  2402.         if( SetSearchDlg.m_bFlag2 )
  2403.             ulFlags |= RESTART_SEARCH;
  2404.  
  2405.         if( SetSearchDlg.m_bFlag3)
  2406.             ulFlags |= SHALLOW_SEARCH;
  2407.  
  2408.         if( SetSearchDlg.m_bFlag4)
  2409.             ulFlags |= RECURSIVE_SEARCH;
  2410.  
  2411.         if( SetSearchDlg.m_bFlag5)
  2412.             ulFlags |= FOREGROUND_SEARCH;
  2413.  
  2414.         if( SetSearchDlg.m_bFlag6 )
  2415.             ulFlags |= BACKGROUND_SEARCH;
  2416.  
  2417.  
  2418.         if( !lstrcmp(SetSearchDlg.m_szCB2,"NULL") )
  2419.         {
  2420.             PvFree(lpRes);
  2421.             lpRes = NULL;
  2422.         }
  2423.  
  2424.         SearchList.m_List = "SearchFolder EntryList";
  2425.         SearchList.m_lppEntryList = &lpEntryListSearchFolder;
  2426.  
  2427.         SearchList.DoModal();
  2428.  
  2429.         // if cleared list, reset count
  2430.         if( !lpEntryListSearchFolder)
  2431.              cFolders = 0;
  2432.  
  2433.  
  2434.         // else keep built restriction
  2435.         m_hResult = m_lpFolder->SetSearchCriteria(lpRes,
  2436.                         lpEntryListSearchFolder,
  2437.                         ulFlags);
  2438.         wsprintf(m_szLogBuf,"lpFolder->SetSearchCriteria(0x%X,0x%X,%lu)\t SC: %s",
  2439.                         lpRes,lpEntryListSearchFolder,ulFlags,
  2440.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2441.  
  2442.         if( HR_FAILED(m_hResult))
  2443.         {
  2444.             MessageBox( m_E.SzError("m_lpFolder->SetSearchCriteria()", m_hResult),
  2445.                             "Client", MBS_ERROR );
  2446.             return;
  2447.         }
  2448.         PvFree(lpRes);
  2449.     }
  2450. }
  2451.  
  2452. /*******************************************************************/
  2453. /*
  2454.  -  CFolderDlg::
  2455.  -  OnSetReceiveFolder
  2456.  *
  2457.  *  Purpose:
  2458.  *
  2459.  *  Comments:
  2460.  *      lpMDB is global pointer to open message store
  2461.  */
  2462. /*******************************************************************/
  2463.  
  2464. void CFolderDlg::OnSetReceiveFolder()
  2465. {
  2466.     COperation      SetReceiveFldDlg(this);
  2467.     char            szBuff[256];
  2468.     CString         OperName;
  2469.     LONG            lCurSelect      = 0;
  2470.     ULONG           ulFlags         = 0;
  2471.     ULONG           ulValues        = 0;
  2472.     LPSPropValue    lpPropValue     = NULL;
  2473.     LPWSTR          lpNewBuffer1    = NULL;
  2474.  
  2475.     // PropTag Array for getting displayname and entryid
  2476.     SizedSPropTagArray(2,sptaDisplayName) =
  2477.     {
  2478.         2,
  2479.         {
  2480.             PR_DISPLAY_NAME,
  2481.             PR_ENTRYID
  2482.         }
  2483.     };
  2484.  
  2485.     // initalize data for dialog box
  2486.  
  2487.     OperName  = "lpMDB->SetReceiveFolder()";
  2488.  
  2489.     SetReceiveFldDlg.m_CurrentOperation= OperName;
  2490.     SetReceiveFldDlg.m_EditText1       = "lpszMessageClass";
  2491.     SetReceiveFldDlg.m_EditText2       = "Folder Name:";
  2492.     SetReceiveFldDlg.m_EditText3       = "lpEntryID/cbEntryID:";
  2493.     SetReceiveFldDlg.m_FlagText1       = "MAPI_UNICODE";
  2494.     SetReceiveFldDlg.m_FlagText2       = "Invalid Flag";
  2495.     SetReceiveFldDlg.m_EditDefault1    = "IPM";
  2496.  
  2497.     m_hResult = m_lpFolder->GetProps( (LPSPropTagArray) &sptaDisplayName,0,&ulValues,&lpPropValue);
  2498.     wsprintf(m_szLogBuf,"lpFolder->GetProps( &sptaDisplayName,0,&ulValues,&lpPropValue)\t SC: %s",
  2499.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2500.  
  2501.     if( HR_FAILED(m_hResult))
  2502.     {
  2503.         MessageBox( m_E.SzError("m_lpFolder->GetProps()", m_hResult),
  2504.                             "Client", MBS_ERROR );
  2505.         goto Cleanup;
  2506.     }
  2507.  
  2508.     SzGetPropValue(szBuff, &lpPropValue[1]);
  2509.  
  2510.     SetReceiveFldDlg.m_EditDefault2    = lpPropValue[0].Value.lpszA;
  2511.     SetReceiveFldDlg.m_EditDefault3    = szBuff;
  2512.  
  2513.  
  2514.     // bring up modal dialog box, and if user hits OK, process operation
  2515.     if( SetReceiveFldDlg.DoModal() == IDOK )
  2516.     {
  2517.  
  2518.         if( SetReceiveFldDlg.m_bFlag2 )
  2519.             ulFlags |= TEST_INVALID_FLAG;
  2520.  
  2521.         if( SetReceiveFldDlg.m_bFlag1 )
  2522.         {
  2523.             ulFlags |= MAPI_UNICODE;
  2524.  
  2525.             String8ToUnicode(SetReceiveFldDlg.m_szEdit1,&lpNewBuffer1, NULL);
  2526.  
  2527.             m_hResult = lpMDB->SetReceiveFolder(
  2528.                         (LPTSTR) lpNewBuffer1,
  2529.                         ulFlags,
  2530.                         lpPropValue[1].Value.bin.cb,
  2531.                         (LPENTRYID) lpPropValue[1].Value.bin.lpb );
  2532.             wsprintf(m_szLogBuf,"lpMDB->SetReceiveFolder(%s,%lu,%lu,0x%X)\t SC: %s",
  2533.                         SetReceiveFldDlg.m_szEdit1,ulFlags,
  2534.                         lpPropValue[1].Value.bin.cb,
  2535.                         lpPropValue[1].Value.bin.lpb,
  2536.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2537.  
  2538.             if( HR_FAILED(m_hResult))
  2539.             {
  2540.                 MessageBox( m_E.SzError("lpMDB->SetReceiveFolder", m_hResult),
  2541.                                 "Client", MBS_ERROR );
  2542.                 PvFree(lpNewBuffer1);
  2543.                 goto Cleanup;
  2544.             }
  2545.  
  2546.             PvFree(lpNewBuffer1);
  2547.  
  2548.             wsprintf(szBuff,"%s set to receive %s Message Class",lpPropValue[0].Value.lpszA,
  2549.                                   (LPTSTR)SetReceiveFldDlg.m_szEdit1);
  2550.  
  2551.             MessageBox( szBuff,"Client", MBS_INFO );
  2552.         }
  2553.         else
  2554.         {
  2555.  
  2556.             m_hResult = lpMDB->SetReceiveFolder(
  2557.                         (LPTSTR)SetReceiveFldDlg.m_szEdit1,
  2558.                         ulFlags,
  2559.                         lpPropValue[1].Value.bin.cb,
  2560.                         (LPENTRYID) lpPropValue[1].Value.bin.lpb );
  2561.             wsprintf(m_szLogBuf,"lpMDB->SetReceiveFolder(%s,%lu,%lu,0x%X)\t SC: %s",
  2562.                         SetReceiveFldDlg.m_szEdit1,ulFlags,
  2563.                         lpPropValue[1].Value.bin.cb,
  2564.                         lpPropValue[1].Value.bin.lpb,
  2565.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2566.  
  2567.             if( HR_FAILED(m_hResult))
  2568.             {
  2569.                 MessageBox( m_E.SzError("lpMDB->SetReceiveFolder", m_hResult),
  2570.                             "Client", MBS_ERROR );
  2571.                 goto Cleanup;
  2572.             }
  2573.             wsprintf(szBuff,"%s set to receive %s Message Class",lpPropValue[0].Value.lpszA,
  2574.                                   (LPTSTR)SetReceiveFldDlg.m_szEdit1);
  2575.  
  2576.             MessageBox( szBuff,"Client", MBS_INFO );
  2577.         }
  2578.     }
  2579.  
  2580. Cleanup:
  2581.  
  2582.     // free memory from GetProps
  2583.     if(lpPropValue)
  2584.     {
  2585.         MAPIFreeBuffer(lpPropValue);
  2586.         wsprintf(m_szLogBuf,"MAPIFreeBuffer(%s)", "lpPropValue from GetProps" );
  2587.     }
  2588. }
  2589.  
  2590. /*******************************************************************/
  2591. /*
  2592.  -  CFolderDlg::
  2593.  -  OnCopyMessages
  2594.  *
  2595.  *  Purpose:
  2596.  *      Operation lpFolder->CopyMessages
  2597.  *
  2598.  */
  2599. /*******************************************************************/
  2600.  
  2601. void CFolderDlg::OnCopyMessages()
  2602. {
  2603.     COperation      CopyMessagesDlg(this);
  2604.     char            szBuff[80];
  2605.     char            szBuffer[80];
  2606.     CString         OperName;
  2607.     int             dRet            = 0;
  2608.     LPIID           lpInterface     = NULL;
  2609.     ULONG           ulFlags         = 0;
  2610.     LPENTRYLIST     lpEntryList     = NULL;
  2611.     ULONG           ulUIParam       = 0;
  2612.     LPSRowSet       lpRows          = NULL;
  2613.     LPENTRYID       lpEntryID       = NULL;
  2614.     ULONG           ulEntryID       = 0;
  2615.     ULONG           ulErrorIndex    = 0;
  2616.     LONG            lRowsSeeked     = 0;
  2617.     int max=500;
  2618.     int rgItems[500];
  2619.     int j;
  2620.     LONG            lNumSelect      = -1;
  2621.  
  2622.     //$ NYI, FIX UP LPMAPIPROGRESS
  2623.     LPMAPIPROGRESS  lpProgress       = NULL;
  2624.  
  2625.  
  2626.     // initalize data for dialog box
  2627.  
  2628.     OperName  = m_CurrentFolder;
  2629.     OperName += "->CopyMessages()";
  2630.  
  2631.     CopyMessagesDlg.m_CurrentOperation= OperName;
  2632.     CopyMessagesDlg.m_CBText1         = "lpInterface:";
  2633.     CopyMessagesDlg.m_CBText2         = "ulUIParam:";
  2634.     CopyMessagesDlg.m_CBText3         = "lpMsgList";
  2635.     CopyMessagesDlg.m_EditText2       = "lpDestFolder:";
  2636.     CopyMessagesDlg.m_EditText3       = "lpMsgList";
  2637.     CopyMessagesDlg.m_FlagText1       = "MESSAGE_MOVE";
  2638.     CopyMessagesDlg.m_FlagText2       = "MESSAGE_DIALOG";
  2639.     CopyMessagesDlg.m_FlagText3       = "MAPI_DECLINE_OK";
  2640.     CopyMessagesDlg.m_FlagText4       = "Invalid Flag";
  2641.  
  2642.     wsprintf(szBuffer,"0x%X",lpvCopyToDest);
  2643.     CopyMessagesDlg.m_EditDefault2    = szBuffer;
  2644.     CopyMessagesDlg.m_EditDefault3    = "";
  2645.  
  2646.     dRet = CopyMessagesDlg.m_CBContents1.Add("NULL");
  2647.     dRet = CopyMessagesDlg.m_CBContents1.Add("Bad Interface Param");
  2648.  
  2649.     dRet = CopyMessagesDlg.m_CBContents2.Add("NULL");
  2650.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  2651.     dRet = CopyMessagesDlg.m_CBContents2.Add(szBuff);
  2652.  
  2653.  
  2654.     // initalize data for dialog box
  2655.     if( (lNumSelect = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) < 1 )
  2656.     {
  2657.         goto Associated;
  2658.     }
  2659.  
  2660.     lpEntryList = (LPENTRYLIST) PvAlloc(sizeof(ENTRYLIST));
  2661.     lpEntryList->cValues    = lNumSelect;
  2662.     lpEntryList->lpbin      = (LPSBinary)PvAllocMore(lNumSelect * sizeof(SBinary), lpEntryList);
  2663.  
  2664.     for(j=0; j < lNumSelect; j++)
  2665.     {
  2666.         // set which columns are important to see in table
  2667.         m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[j],&lRowsSeeked);
  2668.  
  2669.         wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  2670.                         rgItems[j],
  2671.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2672.  
  2673.         if( HR_FAILED(m_hResult))
  2674.         {
  2675.             MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  2676.                                 "Client", MBS_ERROR );
  2677.             goto Cleanup;
  2678.         }
  2679.  
  2680.         m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  2681.         wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  2682.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2683.  
  2684.         if( HR_FAILED(m_hResult))
  2685.         {
  2686.             MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  2687.                                 "Client", MBS_ERROR );
  2688.             goto Cleanup;
  2689.         }
  2690.  
  2691.         // rip out info
  2692.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  2693.             dRet = CopyMessagesDlg.m_CBContents3.Add( lpRows->aRow[0].lpProps[0].Value.lpszA );
  2694.  
  2695.         if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  2696.         {
  2697.             lpEntryList->lpbin[j].cb  = (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb;
  2698.             lpEntryList->lpbin[j].lpb = (BYTE *)PvAllocMore(
  2699.                                         lpRows->aRow[0].lpProps[1].Value.bin.cb,
  2700.                                         lpEntryList);
  2701.  
  2702.             memcpy(lpEntryList->lpbin[j].lpb,
  2703.               (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb,
  2704.               (size_t) (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb);
  2705.             // _fmemcpy for 16 bit ??????
  2706.         }
  2707.  
  2708.         if(lpRows)
  2709.         {
  2710.              FreeRowSet(lpRows);
  2711.              lpRows=NULL;
  2712.         }
  2713.     }
  2714.  
  2715.  
  2716.     // bring up modal dialog box, and if user hits OK, process operation
  2717.     if( CopyMessagesDlg.DoModal() == IDOK )
  2718.     {
  2719.         // determine state/settings of data in dialog upon closing
  2720.         if( !lstrcmp(CopyMessagesDlg.m_szCB1,"NULL") )
  2721.             lpInterface = (LPIID) NULL;
  2722.         else if(!lstrcmp(CopyMessagesDlg.m_szCB1,"Bad Interface Param") )
  2723.             lpInterface = (LPIID) &ulFlags;         // invalid
  2724.  
  2725.         if( !lstrcmp(CopyMessagesDlg.m_szCB2,"NULL") )
  2726.             ulUIParam = (ULONG)NULL;
  2727.         else
  2728.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  2729.  
  2730.         if( CopyMessagesDlg.m_bFlag1 )
  2731.             ulFlags |= MESSAGE_MOVE;
  2732.  
  2733.         if( CopyMessagesDlg.m_bFlag2 )
  2734.             ulFlags |= MESSAGE_DIALOG;
  2735.  
  2736.         if( CopyMessagesDlg.m_bFlag3)
  2737.             ulFlags |= MAPI_DECLINE_OK;
  2738.  
  2739.         if( CopyMessagesDlg.m_bFlag4)
  2740.             ulFlags |= TEST_INVALID_FLAG;
  2741.  
  2742.         m_hResult = m_lpFolder->CopyMessages(lpEntryList,
  2743.                         lpInterface,
  2744.                         (LPVOID) lpvCopyToDest,
  2745.                         ulUIParam,
  2746.                         lpProgress,
  2747.                         ulFlags);
  2748.  
  2749.         wsprintf(m_szLogBuf,"lpFolder->CopyMessages(0x%X,0x%X,0x%X,%lu,0x%X,%lu,&ulErrorIndex)\t SC: %s",
  2750.                         lpEntryList,lpInterface,lpvCopyToDest,ulUIParam,lpProgress,ulFlags,
  2751.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2752.  
  2753.         if( HR_FAILED(m_hResult))
  2754.         {
  2755.             MessageBox( m_E.SzError("m_lpFolder->CopyMessages()", m_hResult),
  2756.                             "Client", MBS_ERROR );
  2757.             goto Cleanup;
  2758.         }
  2759.     }
  2760.  
  2761.     goto Cleanup;
  2762.  
  2763. Associated:
  2764.  
  2765.  
  2766.     // ASSOCIATED MESSAGES
  2767.  
  2768.     lNumSelect  = -1;
  2769.  
  2770.     // initalize data for dialog box
  2771.     if( (lNumSelect = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) < 1 )
  2772.     {
  2773.         MessageBox("Select one or several Messages in (Msg or Associated Msg)Listbox to Copy", "OnCopyMessages", MBS_ERROR );
  2774.         goto Cleanup;
  2775.     }
  2776.  
  2777.  
  2778.     lpEntryList = (LPENTRYLIST) PvAlloc(sizeof(ENTRYLIST));
  2779.     lpEntryList->cValues    = lNumSelect;
  2780.     lpEntryList->lpbin      = (LPSBinary)PvAllocMore(lNumSelect * sizeof(SBinary), lpEntryList);
  2781.  
  2782.     for(j=0; j < lNumSelect; j++)
  2783.     {
  2784.         // set which columns are important to see in table
  2785.         m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[j],&lRowsSeeked);
  2786.  
  2787.         wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  2788.                         rgItems[j],
  2789.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2790.  
  2791.         if( HR_FAILED(m_hResult))
  2792.         {
  2793.             MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  2794.                                 "Client", MBS_ERROR );
  2795.             goto Cleanup;
  2796.         }
  2797.  
  2798.         m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  2799.         wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  2800.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2801.  
  2802.         if( HR_FAILED(m_hResult))
  2803.         {
  2804.             MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  2805.                                 "Client", MBS_ERROR );
  2806.             goto Cleanup;
  2807.         }
  2808.  
  2809.         // rip out info
  2810.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  2811.             dRet = CopyMessagesDlg.m_CBContents3.Add( lpRows->aRow[0].lpProps[0].Value.lpszA );
  2812.  
  2813.         if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  2814.         {
  2815.             lpEntryList->lpbin[j].cb  = (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb;
  2816.             lpEntryList->lpbin[j].lpb = (BYTE *)PvAllocMore(
  2817.                                         lpRows->aRow[0].lpProps[1].Value.bin.cb,
  2818.                                         lpEntryList);
  2819.  
  2820.             memcpy(lpEntryList->lpbin[j].lpb,
  2821.               (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb,
  2822.               (size_t) (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb);
  2823.             // _fmemcpy for 16 bit ??????
  2824.         }
  2825.  
  2826.         if(lpRows)
  2827.         {
  2828.              FreeRowSet(lpRows);
  2829.              lpRows=NULL;
  2830.         }
  2831.     }
  2832.  
  2833.  
  2834.     // bring up modal dialog box, and if user hits OK, process operation
  2835.     if( CopyMessagesDlg.DoModal() == IDOK )
  2836.     {
  2837.         // determine state/settings of data in dialog upon closing
  2838.         if( !lstrcmp(CopyMessagesDlg.m_szCB1,"NULL") )
  2839.             lpInterface = (LPIID) NULL;
  2840.         else if(!lstrcmp(CopyMessagesDlg.m_szCB1,"Bad Interface Param") )
  2841.             lpInterface = (LPIID) &ulFlags;         // invalid
  2842.  
  2843.         if( !lstrcmp(CopyMessagesDlg.m_szCB2,"NULL") )
  2844.             ulUIParam = (ULONG)NULL;
  2845.         else
  2846.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  2847.  
  2848.         if( CopyMessagesDlg.m_bFlag1 )
  2849.             ulFlags |= MESSAGE_MOVE;
  2850.  
  2851.         if( CopyMessagesDlg.m_bFlag2 )
  2852.             ulFlags |= MESSAGE_DIALOG;
  2853.  
  2854.         if( CopyMessagesDlg.m_bFlag3)
  2855.             ulFlags |= TEST_INVALID_FLAG;
  2856.  
  2857.         m_hResult = m_lpFolder->CopyMessages(lpEntryList,
  2858.                         lpInterface,
  2859.                         (LPVOID) lpvCopyToDest,
  2860.                         ulUIParam,
  2861.                         lpProgress,
  2862.                         ulFlags);
  2863.  
  2864.         wsprintf(m_szLogBuf,"lpFolder->CopyMessages(0x%X,0x%X,%lu,0x%X,%lu,&ulErrorIndex)\t SC: %s",
  2865.                         lpEntryList,lpInterface,lpvCopyToDest,ulUIParam,lpProgress,ulFlags,
  2866.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2867.  
  2868.         if( HR_FAILED(m_hResult))
  2869.         {
  2870.             MessageBox( m_E.SzError("m_lpFolder->CopyMessages()", m_hResult),
  2871.                             "Client", MBS_ERROR );
  2872.             goto Cleanup;
  2873.         }
  2874.     }
  2875.  
  2876.  
  2877. Cleanup:
  2878.  
  2879.     // free memory allocated in this routine
  2880.  
  2881.     PvFree(lpEntryList);
  2882.  
  2883.     FreeRowSet(lpRows);
  2884. }
  2885.  
  2886.  
  2887. /*******************************************************************/
  2888. /*
  2889.  -  CFolderDlg::
  2890.  -  OnAbortSubmit
  2891.  *
  2892.  *  Purpose:
  2893.  *      Operation lpMDB->AbortSubmit,  lpMDB is global Message store object
  2894.  *
  2895.  */
  2896. /*******************************************************************/
  2897.  
  2898. void CFolderDlg::OnAbortSubmit()
  2899. {
  2900.     COperation      AbortSubmitDlg(this);
  2901.     CString         OperName;
  2902.     char            szBuff[512];
  2903.     ULONG           ulFlags     = 0;
  2904.     LPENTRYID       lpEntryID   = NULL;
  2905.     ULONG           ulEntryID   = 0;
  2906.     LONG            lCurSelect  = -1;
  2907.     LPSRowSet       lpRows      = NULL;
  2908.     LONG            lRowsSeeked = 0;
  2909.     int max=500;
  2910.     int rgItems[500];
  2911.  
  2912.     // initalize data for dialog box
  2913.  
  2914.     OperName = "lpMDB->AbortSubmit()";
  2915.  
  2916.     AbortSubmitDlg.m_CurrentOperation= OperName;
  2917.     AbortSubmitDlg.m_CBText1         = "";
  2918.     AbortSubmitDlg.m_CBText2         = "";
  2919.     AbortSubmitDlg.m_CBText3         = "";
  2920.     AbortSubmitDlg.m_EditText1       = "Message Subject";
  2921.     AbortSubmitDlg.m_EditText2       = "lpEntryID/cbEntryID";
  2922.     AbortSubmitDlg.m_EditText3       = "";
  2923.     AbortSubmitDlg.m_FlagText1       = "Invalid Flag";
  2924.     AbortSubmitDlg.m_FlagText2       = "";
  2925.     AbortSubmitDlg.m_FlagText3       = "";
  2926.     AbortSubmitDlg.m_FlagText4       = "";
  2927.     AbortSubmitDlg.m_EditDefault3    = "";
  2928.  
  2929.  
  2930.     // initalize data for dialog box
  2931.     if( (lCurSelect = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  2932.             goto Associated;
  2933.  
  2934.     m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  2935.  
  2936.     wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  2937.                         rgItems[0],
  2938.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2939.  
  2940.     if( HR_FAILED(m_hResult))
  2941.     {
  2942.         MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  2943.                             "Client", MBS_ERROR );
  2944.         goto Cleanup;
  2945.     }
  2946.  
  2947.  
  2948.     m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  2949.     wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  2950.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2951.  
  2952.     if( HR_FAILED(m_hResult))
  2953.     {
  2954.         MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  2955.                             "Client", MBS_ERROR );
  2956.         goto Cleanup;
  2957.     }
  2958.  
  2959.     // rip out info
  2960.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  2961.         AbortSubmitDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  2962.  
  2963.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  2964.     {
  2965.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  2966.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  2967.  
  2968.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  2969.         AbortSubmitDlg.m_EditDefault2    = szBuff;
  2970.     }
  2971.  
  2972.     // bring up modal dialog box, and if user hits OK, process operation
  2973.     if( AbortSubmitDlg.DoModal() == IDOK )
  2974.     {
  2975.  
  2976.         //$ NYI, should split up cbEntryID and lpEntryid and allow mofidication and then
  2977.         //     read out data to be passed into function
  2978.  
  2979.         if( AbortSubmitDlg.m_bFlag1)
  2980.             ulFlags |= TEST_INVALID_FLAG;
  2981.  
  2982.         // lpMDB is global variable
  2983.         m_hResult = lpMDB->AbortSubmit(
  2984.                         (ULONG)     ulEntryID,
  2985.                         (LPENTRYID) lpEntryID,
  2986.                         ulFlags  );
  2987.         wsprintf(m_szLogBuf,"lpMDB->AbortSubmit(%lu,0x%X,%lu)\t SC: %s",
  2988.                         ulEntryID,lpEntryID,ulFlags,
  2989.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  2990.  
  2991.         if( HR_FAILED(m_hResult))
  2992.         {
  2993.             MessageBox( m_E.SzError("lpMDB->AbortSubmit()", m_hResult),
  2994.                             "Client", MBS_ERROR );
  2995.             goto Cleanup;
  2996.         }
  2997.     }
  2998.  
  2999.     goto Cleanup;
  3000.  
  3001. Associated:
  3002.  
  3003.  
  3004.     lCurSelect  = -1;
  3005.  
  3006.     // initalize data for dialog box
  3007.     if( (lCurSelect = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  3008.     {
  3009.             MessageBox("Select Only One Message in Listbox to Abort", "OnAbortSubmit", MBS_ERROR );
  3010.             goto Cleanup;
  3011.     }
  3012.  
  3013.     // ASSOCIATED MESSAGES
  3014.  
  3015.     m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  3016.  
  3017.     wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  3018.                         rgItems[0],
  3019.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3020.  
  3021.     if( HR_FAILED(m_hResult))
  3022.     {
  3023.         MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  3024.                             "Client", MBS_ERROR );
  3025.         goto Cleanup;
  3026.     }
  3027.  
  3028.  
  3029.     m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  3030.     wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3031.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3032.  
  3033.     if( HR_FAILED(m_hResult))
  3034.     {
  3035.         MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  3036.                             "Client", MBS_ERROR );
  3037.         goto Cleanup;
  3038.     }
  3039.  
  3040.     // rip out info
  3041.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  3042.         AbortSubmitDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  3043.  
  3044.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3045.     {
  3046.         lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  3047.         ulEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  3048.  
  3049.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  3050.         AbortSubmitDlg.m_EditDefault2    = szBuff;
  3051.     }
  3052.  
  3053.     // bring up modal dialog box, and if user hits OK, process operation
  3054.     if( AbortSubmitDlg.DoModal() == IDOK )
  3055.     {
  3056.  
  3057.         //$ NYI, should split up cbEntryID and lpEntryid and allow mofidication and then
  3058.         //     read out data to be passed into function
  3059.  
  3060.         if( AbortSubmitDlg.m_bFlag1)
  3061.             ulFlags |= TEST_INVALID_FLAG;
  3062.  
  3063.         // lpMDB is global variable
  3064.         m_hResult = lpMDB->AbortSubmit(
  3065.                         (ULONG)     ulEntryID,
  3066.                         (LPENTRYID) lpEntryID,
  3067.                         ulFlags  );
  3068.         wsprintf(m_szLogBuf,"lpMDB->AbortSubmit(%lu,0x%X,%lu)\t SC: %s",
  3069.                         ulEntryID,lpEntryID,ulFlags,
  3070.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3071.  
  3072.         if( HR_FAILED(m_hResult))
  3073.         {
  3074.             MessageBox( m_E.SzError("lpMDB->AbortSubmit()", m_hResult),
  3075.                             "Client", MBS_ERROR );
  3076.             goto Cleanup;
  3077.         }
  3078.     }
  3079.  
  3080.  
  3081. Cleanup:
  3082.  
  3083.     FreeRowSet(lpRows);
  3084. }
  3085.  
  3086. /*******************************************************************/
  3087. /*
  3088.  -  CFolderDlg::
  3089.  -  OnFldDelete
  3090.  *
  3091.  *  Purpose:
  3092.  *      Operation lpFolder->DeleteFolder
  3093.  *
  3094.  */
  3095. /*******************************************************************/
  3096.  
  3097. void CFolderDlg::OnFldDelete()
  3098. {
  3099.     COperation      FldDeleteDlg(this);
  3100.     char            szBuff[512];
  3101.     CString         OperName;
  3102.     int             dRet            = 0;
  3103.     LONG            lCurSelect      = -1;
  3104.     LPIID           lpInterface     = NULL;
  3105.     LONG            lFolderType     = 0;
  3106.     ULONG           ulFlags         = 0;
  3107.     LPMAPIFOLDER        lpFolder        = NULL;
  3108.     ULONG           idx             = 0;
  3109.     LPENTRYID       lpChildEntryID  = NULL;
  3110.     ULONG           cbChildEntryID  = 0;
  3111.     LPSRowSet       lpRows          = NULL;
  3112.     ULONG           ulUIParam       = 0;
  3113.     LONG            lRowsSeeked     = 0;
  3114.  
  3115.     //$ NYI, FIX UP LPMAPIPROGRESS
  3116.     LPMAPIPROGRESS  lpProgress       = NULL;
  3117.  
  3118.     // PropTag Array for getting displayname and entryid
  3119.     SizedSPropTagArray(2,sptaDisplayName) =
  3120.     {
  3121.         2,
  3122.         {
  3123.             PR_DISPLAY_NAME,
  3124.             PR_ENTRYID
  3125.         }
  3126.     };
  3127.  
  3128.  
  3129.     // get selected item from child folder listbox
  3130.     if( (lCurSelect = SendDlgItemMessage(IDC_FLDCHILD,LB_GETCURSEL,0,0 )) < 0 )
  3131.     {
  3132.         MessageBox("Select a Folder in Listbox to Delete", "OnFldDelete", MBS_ERROR );
  3133.         goto Cleanup;
  3134.     }
  3135.  
  3136.     // initalize data for dialog box
  3137.  
  3138.     OperName  = m_CurrentFolder;
  3139.     OperName += "->DeleteFolder()";
  3140.  
  3141.     FldDeleteDlg.m_CurrentOperation= OperName;
  3142.     FldDeleteDlg.m_CBText2         = "ulUIParam";
  3143.     FldDeleteDlg.m_EditText1       = "Delete Folder";
  3144.     FldDeleteDlg.m_EditText2       = "lpEntryID/cbEntryID";
  3145.     FldDeleteDlg.m_FlagText1       = "DEL_MESSAGES";
  3146.     FldDeleteDlg.m_FlagText2       = "DEL_FOLDERS";
  3147.     FldDeleteDlg.m_FlagText3       = "FOLDER_DIALOG";
  3148.     FldDeleteDlg.m_FlagText4       = "Invalid Flag";
  3149.  
  3150.     m_hResult = m_lpChildTable->SeekRow( BOOKMARK_BEGINNING,lCurSelect,&lRowsSeeked);
  3151.  
  3152.     wsprintf(m_szLogBuf,"lpChildTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  3153.                         lCurSelect,
  3154.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3155.  
  3156.     if( HR_FAILED(m_hResult))
  3157.     {
  3158.         MessageBox( m_E.SzError("m_lpChildTable->SeekRow", m_hResult),
  3159.                             "Client", MBS_ERROR );
  3160.         goto Cleanup;
  3161.     }
  3162.  
  3163.  
  3164.     m_hResult = m_lpChildTable->QueryRows( 1, 0, &lpRows );
  3165.     wsprintf(m_szLogBuf,"lpChildTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3166.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3167.  
  3168.     if( HR_FAILED(m_hResult))
  3169.     {
  3170.         MessageBox( m_E.SzError("m_lpChildTable->QueryRows", m_hResult),
  3171.                             "Client", MBS_ERROR );
  3172.         goto Cleanup;
  3173.     }
  3174.  
  3175.     // rip out info
  3176.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_DISPLAY_NAME )
  3177.         FldDeleteDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  3178.  
  3179.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3180.     {
  3181.  
  3182.         lpChildEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  3183.         cbChildEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  3184.  
  3185.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  3186.         FldDeleteDlg.m_EditDefault2    = szBuff;
  3187.     }
  3188.  
  3189.     FldDeleteDlg.m_EditDefault3    = "";
  3190.  
  3191.  
  3192.     dRet = FldDeleteDlg.m_CBContents2.Add("NULL");
  3193.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  3194.     dRet = FldDeleteDlg.m_CBContents2.Add(szBuff);
  3195.  
  3196.     // bring up modal dialog box, and if user hits OK, process operation
  3197.     if( FldDeleteDlg.DoModal() == IDOK )
  3198.     {
  3199.  
  3200.         if( !lstrcmp(FldDeleteDlg.m_szCB2,"NULL") )
  3201.             ulUIParam = (ULONG)NULL;
  3202.         else
  3203.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  3204.  
  3205.         if( FldDeleteDlg.m_bFlag1 )
  3206.             ulFlags |= DEL_MESSAGES;
  3207.  
  3208.         if( FldDeleteDlg.m_bFlag2 )
  3209.             ulFlags |= DEL_FOLDERS;
  3210.  
  3211.         if( FldDeleteDlg.m_bFlag3)
  3212.             ulFlags |= FOLDER_DIALOG;
  3213.  
  3214.         if( FldDeleteDlg.m_bFlag4)
  3215.             ulFlags |= TEST_INVALID_FLAG;
  3216.  
  3217.         m_hResult = m_lpFolder->DeleteFolder(
  3218.                         cbChildEntryID,
  3219.                         lpChildEntryID,
  3220.                         ulUIParam,
  3221.                         lpProgress,
  3222.                         ulFlags);
  3223.         wsprintf(m_szLogBuf,"lpFolder->DeleteFolder(%lu,0x%X,%lu,0x%X,%lu)\t SC: %s",
  3224.                         cbChildEntryID,
  3225.                         lpChildEntryID,
  3226.                         ulUIParam,
  3227.                         lpProgress,
  3228.                         ulFlags,
  3229.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3230.  
  3231.         if( HR_FAILED(m_hResult))
  3232.         {
  3233.             MessageBox( m_E.SzError("m_lpFolder->DeleteFolder()", m_hResult),
  3234.                             "Client", MBS_ERROR );
  3235.             goto Cleanup;
  3236.         }
  3237.     }
  3238.  
  3239. Cleanup:
  3240.  
  3241.     FreeRowSet(lpRows);
  3242. }
  3243.  
  3244.  
  3245.  
  3246. /*******************************************************************/
  3247. /*
  3248.  -  CFolderDlg::
  3249.  -  OnCopyFolder
  3250.  *
  3251.  *  Purpose:
  3252.  *      Operation lpFolder->DeleteFolder
  3253.  *
  3254.  */
  3255. /*******************************************************************/
  3256.  
  3257. void CFolderDlg::OnCopyFolder()
  3258. {
  3259.     COperation      CopyFolderDlg(this);
  3260.     char            szBuff[512];
  3261.     CString         OperName;
  3262.     int             dRet            = 0;
  3263.     LONG            lCurSelect      = -1;
  3264.     LPIID           lpInterface     = NULL;
  3265.     LONG            lFolderType     = 0;
  3266.     ULONG           ulFlags         = 0;
  3267.     LPMAPIFOLDER    lpFolder        = NULL;
  3268.     ULONG           idx             = 0;
  3269.     LPENTRYID       lpChildEntryID  = NULL;
  3270.     ULONG           cbChildEntryID  = 0;
  3271.     LPSRowSet       lpRows          = NULL;
  3272.     ULONG           ulUIParam       = 0;
  3273.     LONG            lRowsSeeked     = 0;
  3274.     LPMAPIPROGRESS  lpProgress      = NULL;
  3275.  
  3276.     // PropTag Array for getting displayname and entryid
  3277.     SizedSPropTagArray(2,sptaDisplayName) =
  3278.     {
  3279.         2,
  3280.         {
  3281.             PR_DISPLAY_NAME,
  3282.             PR_ENTRYID
  3283.         }
  3284.     };
  3285.  
  3286.  
  3287.     // get selected item from child folder listbox
  3288.     if( (lCurSelect = SendDlgItemMessage(IDC_FLDCHILD,LB_GETCURSEL,0,0 )) < 0 )
  3289.     {
  3290.         MessageBox("Select a Source Folder in Listbox to Copy", "OnCopyFolder", MBS_ERROR );
  3291.         goto Cleanup;
  3292.     }
  3293.  
  3294.     // initalize data for dialog box
  3295.  
  3296.     OperName  = m_CurrentFolder;
  3297.     OperName += "->CopyFolder()";
  3298.  
  3299.     CopyFolderDlg.m_CurrentOperation= OperName;
  3300.     CopyFolderDlg.m_CBText1         = "lpvDestFld";
  3301.     CopyFolderDlg.m_CBText2         = "ulUIParam";
  3302.     CopyFolderDlg.m_EditText1       = "Copy Folder";
  3303.     CopyFolderDlg.m_EditText2       = "lpEntryID/cbEntryID";
  3304.     CopyFolderDlg.m_EditText3       = "lpszNewFolderName";
  3305.     CopyFolderDlg.m_FlagText1       = "FOLDER_MOVE";
  3306.     CopyFolderDlg.m_FlagText2       = "FOLDER_DIALOG";
  3307.     CopyFolderDlg.m_FlagText3       = "MAPI_DECLINE_OK";
  3308.     CopyFolderDlg.m_FlagText4       = "COPY_SUBFOLDERS";
  3309.     CopyFolderDlg.m_FlagText5       = "MAPI_UNICODE";
  3310.     CopyFolderDlg.m_FlagText6       = "Invalid Flag";
  3311.  
  3312.     wsprintf(szBuff,"0x%08X",lpvCopyToDest);
  3313.     dRet = CopyFolderDlg.m_CBContents1.Add(szBuff);
  3314.  
  3315.     CopyFolderDlg.m_EditDefault3 = "New Dest Folder Name";
  3316.  
  3317.     m_hResult = m_lpChildTable->SeekRow( BOOKMARK_BEGINNING,lCurSelect,&lRowsSeeked);
  3318.  
  3319.     wsprintf(m_szLogBuf,"lpChildTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  3320.                         lCurSelect,
  3321.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3322.  
  3323.     if( HR_FAILED(m_hResult))
  3324.     {
  3325.         MessageBox( m_E.SzError("m_lpChildTable->SeekRow", m_hResult),
  3326.                             "Client", MBS_ERROR );
  3327.         goto Cleanup;
  3328.     }
  3329.  
  3330.  
  3331.     m_hResult = m_lpChildTable->QueryRows( 1, 0, &lpRows );
  3332.     wsprintf(m_szLogBuf,"lpChildTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3333.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3334.  
  3335.     if( HR_FAILED(m_hResult))
  3336.     {
  3337.         MessageBox( m_E.SzError("m_lpChildTable->QueryRows", m_hResult),
  3338.                             "Client", MBS_ERROR );
  3339.         goto Cleanup;
  3340.     }
  3341.  
  3342.     // rip out info
  3343.     if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_DISPLAY_NAME )
  3344.         CopyFolderDlg.m_EditDefault1 = lpRows->aRow[0].lpProps[0].Value.lpszA;
  3345.  
  3346.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3347.     {
  3348.  
  3349.         lpChildEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  3350.         cbChildEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  3351.  
  3352.         SzGetPropValue(szBuff, &(lpRows->aRow[0].lpProps[1]));
  3353.         CopyFolderDlg.m_EditDefault2    = szBuff;
  3354.     }
  3355.  
  3356.     dRet = CopyFolderDlg.m_CBContents2.Add("NULL");
  3357.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  3358.     dRet = CopyFolderDlg.m_CBContents2.Add(szBuff);
  3359.  
  3360.     // bring up modal dialog box, and if user hits OK, process operation
  3361.     if( CopyFolderDlg.DoModal() == IDOK )
  3362.     {
  3363.  
  3364.         if( !lstrcmp(CopyFolderDlg.m_szCB2,"NULL") )
  3365.             ulUIParam = (ULONG)NULL;
  3366.         else
  3367.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  3368.  
  3369.         if( CopyFolderDlg.m_bFlag1 )
  3370.             ulFlags |= FOLDER_MOVE;
  3371.  
  3372.         if( CopyFolderDlg.m_bFlag2 )
  3373.             ulFlags |= FOLDER_DIALOG;
  3374.  
  3375.         if( CopyFolderDlg.m_bFlag3)
  3376.             ulFlags |= MAPI_DECLINE_OK;
  3377.  
  3378.         if( CopyFolderDlg.m_bFlag4)
  3379.             ulFlags |= COPY_SUBFOLDERS;
  3380.  
  3381.         if( CopyFolderDlg.m_bFlag5)
  3382.             ulFlags |= MAPI_UNICODE;
  3383.  
  3384.         if( CopyFolderDlg.m_bFlag6)
  3385.             ulFlags |= TEST_INVALID_FLAG;
  3386.  
  3387.         m_hResult = m_lpFolder->CopyFolder(
  3388.                         cbChildEntryID,
  3389.                         lpChildEntryID,
  3390.                         lpInterface,
  3391.                         lpvCopyToDest,
  3392.                         CopyFolderDlg.m_szEdit3,
  3393.                         ulUIParam,
  3394.                         lpProgress,
  3395.                         ulFlags);
  3396.         wsprintf(m_szLogBuf,"lpFolder->CopyFolder()\t SC: %s",
  3397.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3398.  
  3399.         if( HR_FAILED(m_hResult))
  3400.         {
  3401.             MessageBox( m_E.SzError("m_lpFolder->CopyFolder()", m_hResult),
  3402.                             "Client", MBS_ERROR );
  3403.             goto Cleanup;
  3404.         }
  3405.     }
  3406.  
  3407. Cleanup:
  3408.  
  3409.     FreeRowSet(lpRows);
  3410. }
  3411.  
  3412.  
  3413.  
  3414. /*******************************************************************/
  3415. /*
  3416.  -  CFolderDlg::
  3417.  -  OnEmptyFolder
  3418.  *
  3419.  *  Purpose:
  3420.  *      Operation lpFolder->EmptyFolder
  3421.  *
  3422.  *
  3423.  */
  3424. /*******************************************************************/
  3425.  
  3426. void CFolderDlg::OnEmptyFolder()
  3427. {
  3428.     COperation      EmptyFolderDlg(this);
  3429.     char            szBuff[512];
  3430.     CString         OperName;
  3431.     int             dRet            = 0;
  3432.     ULONG           ulFlags         = 0;
  3433.     ULONG           ulUIParam       = 0;
  3434.     LONG            lRowsSeeked     = 0;
  3435.  
  3436.  
  3437.     //$ FUTURE, FIX UP LPMAPIPROGRESS
  3438.     LPMAPIPROGRESS  lpProgress       = NULL;
  3439.  
  3440.  
  3441.     // initalize data for dialog box
  3442.     OperName  = m_CurrentFolder;
  3443.     OperName += "->EmptyFolder()";
  3444.  
  3445.     EmptyFolderDlg.m_CurrentOperation= OperName;
  3446.     EmptyFolderDlg.m_FlagText1       = "FOLDER_DIALOG";
  3447.     EmptyFolderDlg.m_FlagText2       = "DEL_ASSOCIATED";
  3448.     EmptyFolderDlg.m_FlagText5       = "Invalid Flag";
  3449.  
  3450.  
  3451.     dRet = EmptyFolderDlg.m_CBContents2.Add("NULL");
  3452.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  3453.     dRet = EmptyFolderDlg.m_CBContents2.Add(szBuff);
  3454.  
  3455.     // bring up modal dialog box, and if user hits OK, process operation
  3456.     if( EmptyFolderDlg.DoModal() == IDOK )
  3457.     {
  3458.  
  3459.         // determine state/settings of data in dialog upon closing
  3460.  
  3461.         if( !lstrcmp(EmptyFolderDlg.m_szCB2,"NULL") )
  3462.             ulUIParam = (ULONG)NULL;
  3463.         else
  3464.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  3465.  
  3466.         if( EmptyFolderDlg.m_bFlag1)
  3467.             ulFlags |= FOLDER_DIALOG;
  3468.  
  3469.         if( EmptyFolderDlg.m_bFlag2)
  3470.              ulFlags |= DEL_ASSOCIATED;
  3471.  
  3472.         if( EmptyFolderDlg.m_bFlag5)
  3473.             ulFlags |= TEST_INVALID_FLAG;
  3474.  
  3475.         m_hResult = m_lpFolder->EmptyFolder(
  3476.                         ulUIParam,
  3477.                         lpProgress,
  3478.                         ulFlags);
  3479.         wsprintf(m_szLogBuf,"lpFolder->EmptyFolder(%lu,0x%X,%lu)\t SC: %s",
  3480.                         ulUIParam,
  3481.                         lpProgress,
  3482.                         ulFlags,
  3483.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3484.  
  3485.         if( HR_FAILED(m_hResult))
  3486.         {
  3487.             MessageBox( m_E.SzError("m_lpFolder->EmptyFolder()", m_hResult),
  3488.                             "Client", MBS_ERROR );
  3489.         }
  3490.     }
  3491. }
  3492.  
  3493.  
  3494.  
  3495. /*******************************************************************/
  3496. /*
  3497.  -  CFolderDlg::
  3498.  -  OnMsgCreate
  3499.  *
  3500.  *  Purpose:
  3501.  *      Operation lpFolder->CreateMessage
  3502.  */
  3503. /*******************************************************************/
  3504.  
  3505. void CFolderDlg::OnMsgCreate()
  3506. {
  3507.     COperation      MsgCreateDlg(this);
  3508.     CString         OperName;
  3509.     int             dRet            = 0;
  3510.     LONG            lCurSelect      = 0;
  3511.     LPIID           lpInterface     = NULL;
  3512.     ULONG           ulFlags         = 0;
  3513.     LPMESSAGE       lpMessage       = NULL;
  3514.     ULONG           idx             = 0;
  3515.     CMessageDlg     *lpDlgChildMsg  = NULL;
  3516.  
  3517.     // initalize data for dialog box
  3518.  
  3519.     OperName  = m_CurrentFolder;
  3520.     OperName += "->CreateMessage()";
  3521.  
  3522.     MsgCreateDlg.m_CurrentOperation= OperName;
  3523.  
  3524.     MsgCreateDlg.m_CBText1         = "lpInterface";
  3525.  
  3526.     MsgCreateDlg.m_FlagText1       = "MAPI_ASSOCIATED";
  3527.     MsgCreateDlg.m_FlagText2       = "MAPI_DEFERRED_ERRORS";
  3528.     MsgCreateDlg.m_FlagText3       = "Invalid Flag";
  3529.  
  3530.     dRet = MsgCreateDlg.m_CBContents1.Add("NULL");
  3531.     dRet = MsgCreateDlg.m_CBContents1.Add("Bad Interface");
  3532.  
  3533.     // bring up modal dialog box, and if user hits OK, process operation
  3534.     if( MsgCreateDlg.DoModal() == IDOK )
  3535.     {
  3536.         // determine state/settings of data in dialog upon closing
  3537.         if( !lstrcmp(MsgCreateDlg.m_szCB1,"NULL") )
  3538.             lpInterface = NULL;
  3539.         else
  3540.             lpInterface = (LPIID) &ulFlags;         // invalid
  3541.  
  3542.         if( MsgCreateDlg.m_bFlag1 )
  3543.             ulFlags |= MAPI_ASSOCIATED;
  3544.  
  3545.         if( MsgCreateDlg.m_bFlag2 )
  3546.             ulFlags |= MAPI_DEFERRED_ERRORS;
  3547.  
  3548.         if( MsgCreateDlg.m_bFlag3)
  3549.             ulFlags |= TEST_INVALID_FLAG;
  3550.  
  3551.         m_hResult = m_lpFolder->CreateMessage(
  3552.                         lpInterface,
  3553.                         ulFlags,
  3554.                         &lpMessage);
  3555.         wsprintf(m_szLogBuf,"lpFolder->CreateMessage(0x%X,%lu,&lpMessage)\t SC: %s",
  3556.                         lpInterface,
  3557.                         ulFlags,
  3558.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3559.  
  3560.         if( HR_FAILED(m_hResult))
  3561.         {
  3562.             MessageBox( m_E.SzError("m_lpFolder->CreateMessage()", m_hResult),
  3563.                             "Client", MBS_ERROR );
  3564.             return;
  3565.         }
  3566.  
  3567.         lpDlgChildMsg   =  new CMessageDlg("MAPI_MESSAGE",(LPMESSAGE)lpMessage,this);
  3568.     }
  3569. }
  3570.  
  3571.  
  3572. /*******************************************************************/
  3573. /*
  3574.  -  CFolderDlg::
  3575.  -  OnMsgDelete
  3576.  *
  3577.  *  Purpose:
  3578.  *      Operation lpFolder->CreateMessage
  3579.  */
  3580. /*******************************************************************/
  3581.  
  3582. void CFolderDlg::OnMsgDelete()
  3583. {
  3584.     COperation      MsgDeleteDlg(this);
  3585.     char            szBuff[512];
  3586.     CString         OperName;
  3587.     int             dRet            = 0;
  3588.     ULONG           ulFlags         = 0;
  3589.     LPSRowSet       lpRows          = NULL;
  3590.     ULONG           ulUIParam       = 0;
  3591.     LPENTRYLIST     lpEntryList     = NULL;
  3592.     ULONG           ulErrorIndex    = 0;
  3593.     LONG            lRowsSeeked     = 0;
  3594.     int max=500;
  3595.     int rgItems[500];
  3596.     int j;
  3597.     LONG            lNumSelect      = -1;
  3598.  
  3599.  
  3600.     //$ FUTURE, FIX UP LPMAPIPROGRESS
  3601.     LPMAPIPROGRESS  lpProgress       = NULL;
  3602.  
  3603.     // initalize data for dialog box
  3604.  
  3605.     OperName  = m_CurrentFolder;
  3606.     OperName += "->DeleteMessages()";
  3607.  
  3608.     MsgDeleteDlg.m_CurrentOperation= OperName;
  3609.     MsgDeleteDlg.m_CBText2         = "ulUIParam";
  3610.     MsgDeleteDlg.m_CBText3         = "Delete Messages";
  3611.     MsgDeleteDlg.m_EditText1       = "";
  3612.     MsgDeleteDlg.m_FlagText1       = "MESSAGE_DIALOG";
  3613.     MsgDeleteDlg.m_FlagText2       = "Invalid Flag";
  3614.  
  3615.     // initalize data for dialog box
  3616.     if( (lNumSelect = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) < 1 )
  3617.         goto Associated;
  3618.  
  3619.     // NORMAL MESSAGES
  3620.  
  3621.     lpEntryList = (LPENTRYLIST) PvAlloc(sizeof(ENTRYLIST));
  3622.     lpEntryList->cValues    = lNumSelect;
  3623.     lpEntryList->lpbin      = (LPSBinary)PvAllocMore(lNumSelect * sizeof(SBinary), lpEntryList);
  3624.  
  3625.     for(j=0; j < lNumSelect; j++)
  3626.     {
  3627.         // set which columns are important to see in table
  3628.         m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[j],&lRowsSeeked);
  3629.  
  3630.         wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  3631.                         rgItems[j],
  3632.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3633.  
  3634.         if( HR_FAILED(m_hResult))
  3635.         {
  3636.             MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  3637.                                 "Client", MBS_ERROR );
  3638.             goto Cleanup;
  3639.         }
  3640.  
  3641.         m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  3642.         wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3643.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3644.  
  3645.         if( HR_FAILED(m_hResult))
  3646.         {
  3647.             MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  3648.                                 "Client", MBS_ERROR );
  3649.             goto Cleanup;
  3650.         }
  3651.  
  3652.         // rip out info
  3653.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  3654.             dRet = MsgDeleteDlg.m_CBContents3.Add( lpRows->aRow[0].lpProps[0].Value.lpszA );
  3655.  
  3656.         if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3657.         {
  3658.             lpEntryList->lpbin[j].cb  = (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb;
  3659.             lpEntryList->lpbin[j].lpb = (BYTE *)PvAllocMore(
  3660.                                         lpRows->aRow[0].lpProps[1].Value.bin.cb,
  3661.                                         lpEntryList);
  3662.  
  3663.             memcpy(lpEntryList->lpbin[j].lpb,
  3664.               (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb,
  3665.               (size_t) (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb);
  3666.             // _fmemcpy for 16 bit ??????
  3667.         }
  3668.  
  3669.         if(lpRows)
  3670.         {
  3671.              FreeRowSet(lpRows);
  3672.              lpRows=NULL;
  3673.         }
  3674.     }
  3675.  
  3676.  
  3677.     dRet = MsgDeleteDlg.m_CBContents2.Add("NULL");
  3678.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  3679.     dRet = MsgDeleteDlg.m_CBContents2.Add(szBuff);
  3680.  
  3681.     // bring up modal dialog box, and if user hits OK, process operation
  3682.     if( MsgDeleteDlg.DoModal() == IDOK )
  3683.     {
  3684.  
  3685.         // determine state/settings of data in dialog upon closing
  3686.  
  3687.         if( !lstrcmp(MsgDeleteDlg.m_szCB2,"NULL") )
  3688.             ulUIParam = (ULONG)NULL;
  3689.         else
  3690.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  3691.  
  3692.         if( MsgDeleteDlg.m_bFlag1 )
  3693.             ulFlags |= MESSAGE_DIALOG;
  3694.  
  3695.         if( MsgDeleteDlg.m_bFlag2 )
  3696.             ulFlags |= TEST_INVALID_FLAG;
  3697.  
  3698.         m_hResult = m_lpFolder->DeleteMessages(
  3699.                         lpEntryList,
  3700.                         ulUIParam,
  3701.                         lpProgress,
  3702.                         ulFlags);
  3703.  
  3704.         wsprintf(m_szLogBuf,"lpFolder->DeleteMessages(0x%X,%lu,0x%X,%lu,&ulErrorIndex)\t SC: %s",
  3705.                         lpEntryList,ulUIParam,lpProgress,ulFlags,
  3706.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3707.  
  3708.         if( HR_FAILED(m_hResult))
  3709.         {
  3710.             MessageBox( m_E.SzError("m_lpFolder->DeleteMessages()", m_hResult),
  3711.                             "Client", MBS_ERROR );
  3712.             goto Cleanup;
  3713.         }
  3714.     }
  3715.  
  3716.     goto Cleanup;
  3717.  
  3718. Associated:
  3719.  
  3720.  
  3721.     // ASSOCIATED MESSAGES
  3722.  
  3723.     lNumSelect  = -1;
  3724.  
  3725.     // initalize data for dialog box
  3726.     if( (lNumSelect = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) < 1 )
  3727.     {
  3728.         MessageBox("Select one or several Messages in (Msg or Associated Msg)Listbox to Delete", "OnMsgDelete", MBS_ERROR );
  3729.         goto Cleanup;
  3730.     }
  3731.  
  3732.     lpEntryList = (LPENTRYLIST) PvAlloc(sizeof(ENTRYLIST));
  3733.     lpEntryList->cValues    = lNumSelect;
  3734.     lpEntryList->lpbin      = (LPSBinary)PvAllocMore(lNumSelect * sizeof(SBinary), lpEntryList);
  3735.  
  3736.     for(j=0; j < lNumSelect; j++)
  3737.     {
  3738.          // set which columns are important to see in table
  3739.         m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[j],&lRowsSeeked);
  3740.  
  3741.         wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  3742.                         rgItems[j],
  3743.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3744.  
  3745.         if( HR_FAILED(m_hResult))
  3746.         {
  3747.             MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  3748.                                 "Client", MBS_ERROR );
  3749.             goto Cleanup;
  3750.         }
  3751.  
  3752.         m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  3753.         wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3754.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3755.  
  3756.         if( HR_FAILED(m_hResult))
  3757.         {
  3758.             MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  3759.                                 "Client", MBS_ERROR );
  3760.             goto Cleanup;
  3761.         }
  3762.  
  3763.         // rip out info
  3764.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  3765.             dRet = MsgDeleteDlg.m_CBContents3.Add( lpRows->aRow[0].lpProps[0].Value.lpszA );
  3766.  
  3767.         if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3768.         {
  3769.             lpEntryList->lpbin[j].cb  = (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb;
  3770.             lpEntryList->lpbin[j].lpb = (BYTE *)PvAllocMore(
  3771.                                         lpRows->aRow[0].lpProps[1].Value.bin.cb,
  3772.                                         lpEntryList);
  3773.  
  3774.             memcpy(lpEntryList->lpbin[j].lpb,
  3775.               (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb,
  3776.               (size_t) (ULONG) lpRows->aRow[0].lpProps[1].Value.bin.cb);
  3777.             // _fmemcpy for 16 bit ??????
  3778.         }
  3779.  
  3780.         if(lpRows)
  3781.         {
  3782.              FreeRowSet(lpRows);
  3783.              lpRows=NULL;
  3784.         }
  3785.     }
  3786.  
  3787.     dRet = MsgDeleteDlg.m_CBContents2.Add("NULL");
  3788.     wsprintf(szBuff,"Parent hWnd == %X",this->m_hWnd);
  3789.     dRet = MsgDeleteDlg.m_CBContents2.Add(szBuff);
  3790.  
  3791.     // bring up modal dialog box, and if user hits OK, process operation
  3792.     if( MsgDeleteDlg.DoModal() == IDOK )
  3793.     {
  3794.  
  3795.         // determine state/settings of data in dialog upon closing
  3796.  
  3797.         if( !lstrcmp(MsgDeleteDlg.m_szCB2,"NULL") )
  3798.             ulUIParam = (ULONG)NULL;
  3799.         else
  3800.             ulUIParam = (ULONG)(void *)this->m_hWnd;
  3801.  
  3802.         if( MsgDeleteDlg.m_bFlag1 )
  3803.             ulFlags |= MESSAGE_DIALOG;
  3804.  
  3805.         if( MsgDeleteDlg.m_bFlag2 )
  3806.             ulFlags |= TEST_INVALID_FLAG;
  3807.  
  3808.         m_hResult = m_lpFolder->DeleteMessages(
  3809.                         lpEntryList,
  3810.                         ulUIParam,
  3811.                         lpProgress,
  3812.                         ulFlags);
  3813.  
  3814.         wsprintf(m_szLogBuf,"lpFolder->DeleteMessages(0x%X,%lu,0x%X,%lu,&ulErrorIndex)\t SC: %s",
  3815.                         lpEntryList,ulUIParam,lpProgress,ulFlags,
  3816.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3817.  
  3818.         if( HR_FAILED(m_hResult))
  3819.         {
  3820.             MessageBox( m_E.SzError("m_lpFolder->DeleteMessages()", m_hResult),
  3821.                             "Client", MBS_ERROR );
  3822.             goto Cleanup;
  3823.         }
  3824.     }
  3825.  
  3826.  
  3827. Cleanup:
  3828.  
  3829.     PvFree(lpEntryList);
  3830.  
  3831.     if(lpRows)
  3832.         FreeRowSet(lpRows);
  3833. }
  3834.  
  3835. /*******************************************************************/
  3836. /*
  3837.  -  CFolderDlg::
  3838.  -  OnOpenChildFolder
  3839.  *
  3840.  *  Purpose:
  3841.  *      Allow user to Open a Child Folder with a double click or button
  3842.  *
  3843.  *  Parameters:
  3844.  *      None
  3845.  *
  3846.  *  Returns:
  3847.  *      Nothing
  3848.  *
  3849.  */
  3850. /*******************************************************************/
  3851.  
  3852. void CFolderDlg::OnOpenChildFolder()
  3853. {
  3854.     ULONG           ulObjType       = 0;
  3855.     LPMAPIPROP      lpChildFolder   = NULL;
  3856.     LPENTRYID       lpChildEntryID  = NULL;
  3857.     ULONG           ulChildEntryID  = 0;
  3858.     LONG            lSelection      = -1;
  3859.     LPSRowSet       lpRows          = NULL;
  3860.     CFolderDlg      *lpDlgChildFld  = NULL;
  3861.     char            szBuffer[80];
  3862.  
  3863.     // PropTag Array for getting displayname and entryid
  3864.     SizedSPropTagArray(2,sptaDisplayName) =
  3865.     {
  3866.         2,
  3867.         {
  3868.             PR_DISPLAY_NAME,
  3869.             PR_ENTRYID
  3870.         }
  3871.     };
  3872.  
  3873.  
  3874.     // get selected item from child folder listbox
  3875.     if( (lSelection = SendDlgItemMessage(IDC_FLDCHILD,LB_GETCURSEL,0,0 )) < 0 )
  3876.     {
  3877.         MessageBox("Select a Folder in Listbox to Open", "OnOpenChildFolder", MBS_ERROR );
  3878.         goto Error;
  3879.     }
  3880.  
  3881.     m_hResult = m_lpChildTable->SeekRow( BOOKMARK_BEGINNING,lSelection,NULL);
  3882.  
  3883.     wsprintf(m_szLogBuf,"lpChildTable->SeekRow( BOOKMARK_BEGINNING,%ld,NULL)\t SC: %s",
  3884.                         lSelection,
  3885.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3886.  
  3887.     if( HR_FAILED(m_hResult))
  3888.     {
  3889.         MessageBox( m_E.SzError("m_lpChildTable->SeekRow", m_hResult),
  3890.                             "Client", MBS_ERROR );
  3891.         goto Error;
  3892.     }
  3893.  
  3894.  
  3895.     m_hResult = m_lpChildTable->QueryRows( 1, 0, &lpRows );
  3896.     wsprintf(m_szLogBuf,"lpChildTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  3897.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3898.  
  3899.     if( HR_FAILED(m_hResult))
  3900.     {
  3901.         MessageBox( m_E.SzError("m_lpChildTable->QueryRows", m_hResult),
  3902.                             "Client", MBS_ERROR );
  3903.         goto Error;
  3904.     }
  3905.  
  3906.     // rip out info
  3907.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  3908.     {
  3909.         lpChildEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  3910.         ulChildEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  3911.     }
  3912.  
  3913.     // openentry on the entryid
  3914.     m_hResult = m_lpFolder->OpenEntry( ulChildEntryID , lpChildEntryID, NULL,
  3915.                          ulAccess, &ulObjType, (IUnknown**)&lpChildFolder);
  3916.     wsprintf(m_szLogBuf,"lpFolder->OpenEntry(%lu,0x%X,NULL,%lu,&ulObjType,&lpChildFolder)\t SC: %s",
  3917.                         ulChildEntryID,lpChildEntryID,ulAccess,
  3918.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  3919.  
  3920.     if( HR_FAILED(m_hResult))
  3921.     {
  3922.         MessageBox( m_E.SzError("OpenEntry on Folder", m_hResult), "Client", MBS_ERROR );
  3923.         goto Error;
  3924.     }
  3925.  
  3926.     // if it is a folder, find it's child folders
  3927.     if( ulObjType == MAPI_FOLDER )
  3928.     {
  3929.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_DISPLAY_NAME )
  3930.         {
  3931.             wsprintf(szBuffer,"%s - %s",
  3932.                     GetString("MAPIObjTypes",ulObjType,NULL),
  3933.                     lpRows->aRow[0].lpProps[0].Value.lpszA);
  3934.         }
  3935.         else
  3936.         {
  3937.             wsprintf(szBuffer,"%s - %s",
  3938.                     GetString("MAPIObjTypes",ulObjType,NULL),
  3939.                     "BUG BUG !Unknown Folder Name");
  3940.         }
  3941.         lpDlgChildFld   =  new CFolderDlg(szBuffer,(LPMAPIFOLDER)lpChildFolder,this);
  3942.     }
  3943.     else
  3944.     {
  3945.         MessageBox("ulObjType of OpenEntry on lpFolder != MAPI_FOLDER","Client",MBS_ERROR);
  3946.         goto Error;
  3947.     }
  3948.  
  3949.     FreeRowSet(lpRows);
  3950.  
  3951.     return;
  3952.  
  3953. Error:
  3954.  
  3955.     FreeRowSet(lpRows);
  3956. }
  3957.  
  3958. /*******************************************************************/
  3959. /*
  3960.  -  CFolderDlg::
  3961.  -  OnOpenMessage
  3962.  *
  3963.  *  Purpose:
  3964.  *      Allow user to Open a Message with a DoubleClick or button
  3965.  *
  3966.  *  Parameters:
  3967.  *      None
  3968.  *
  3969.  *  Returns:
  3970.  *      Nothing
  3971.  *
  3972.  */
  3973. /*******************************************************************/
  3974.  
  3975. void CFolderDlg::OnOpenMessage()
  3976. {
  3977.     ULONG           ulObjType       = 0;
  3978.     LPMAPIPROP      lpMessage       = NULL;
  3979.     LPENTRYID       lpChildEntryID  = NULL;
  3980.     ULONG           ulChildEntryID  = 0;
  3981.     int             iRow            = 0;
  3982.     LONG            lSelection      = -1;
  3983.     LPSRowSet       lpRows          = NULL;
  3984.     CMessageDlg     *lpMsgDlg       = NULL;
  3985.     char            szBuffer[256];
  3986.     LONG            lRowsSeeked     = 0;
  3987.     int max=500;
  3988.     int rgItems[500];
  3989.  
  3990.     // initalize data for dialog box
  3991.     if( (lSelection = SendDlgItemMessage(IDC_FLDMESSAGES,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  3992.     {
  3993.         MessageBox("Select ONLY one Message in Listbox to Open", "OnOpenMessage", MBS_ERROR );
  3994.         goto Error;
  3995.     }
  3996.  
  3997.     m_hResult = m_lpMessageTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  3998.  
  3999.     wsprintf(m_szLogBuf,"lpMessageTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  4000.                         rgItems[0],
  4001.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4002.  
  4003.     if( HR_FAILED(m_hResult))
  4004.     {
  4005.         MessageBox( m_E.SzError("m_lpMessageTable->SeekRow", m_hResult),
  4006.                             "Client", MBS_ERROR );
  4007.         goto Error;
  4008.     }
  4009.  
  4010.  
  4011.     m_hResult = m_lpMessageTable->QueryRows( 1, 0, &lpRows );
  4012.  
  4013.     wsprintf(m_szLogBuf,"lpMessageTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  4014.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4015.  
  4016.     if( HR_FAILED(m_hResult) )
  4017.     {
  4018.         MessageBox( m_E.SzError("m_lpMessageTable->QueryRows", m_hResult),
  4019.                             "Client", MBS_ERROR );
  4020.         goto Error;
  4021.     }
  4022.  
  4023.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  4024.     {
  4025.         lpChildEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  4026.         ulChildEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  4027.     }
  4028.  
  4029.     // openentry on the entryid
  4030.     m_hResult = m_lpFolder->OpenEntry( ulChildEntryID , lpChildEntryID, NULL,
  4031.                          ulAccess, &ulObjType, (IUnknown**)&lpMessage);
  4032.     wsprintf(m_szLogBuf,"lpFolder->OpenEntry(%lu,0x%X,NULL,%lu,&ulObjType,&lpMessage)\t SC: %s",
  4033.                         ulChildEntryID,lpChildEntryID,ulAccess,
  4034.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4035.  
  4036.     if( HR_FAILED(m_hResult))
  4037.     {
  4038.         MessageBox( m_E.SzError("OpenEntry on Folder", m_hResult), "Client", MBS_ERROR );
  4039.         goto Error;
  4040.     }
  4041.  
  4042.     // if it's a message display a dialog
  4043.     if( ulObjType == MAPI_MESSAGE )
  4044.     {
  4045.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  4046.         {
  4047.             wsprintf(szBuffer,"%s - %s",
  4048.                     GetString("MAPIObjTypes",ulObjType,NULL),
  4049.                     lpRows->aRow[0].lpProps[0].Value.lpszA);
  4050.         }
  4051.         else
  4052.         {
  4053.  
  4054.             wsprintf(szBuffer,"%s - %s",
  4055.                     GetString("MAPIObjTypes",ulObjType,NULL),
  4056.                     &(lpRows->aRow[0].lpProps[1]) );
  4057.         }
  4058.         lpMsgDlg   =  new CMessageDlg(szBuffer,(LPMESSAGE)lpMessage,this);
  4059.     }
  4060.     else
  4061.     {
  4062.         MessageBox("ulObjType of OpenEntry on lpMessage != MAPI_MESSAGE","Client",MBS_ERROR);
  4063.         goto Error;
  4064.     }
  4065.  
  4066.     FreeRowSet(lpRows);
  4067.  
  4068.     return;
  4069.  
  4070. Error:
  4071.  
  4072.     FreeRowSet(lpRows);
  4073.  
  4074.     if(lpMessage)
  4075.     {
  4076.         lpMessage->Release();
  4077.         lpMessage = NULL;
  4078.     }
  4079. }
  4080.  
  4081. /*******************************************************************/
  4082. /*
  4083.  -  CFolderDlg::
  4084.  -  OnOpenAssociated
  4085.  *
  4086.  *  Purpose:
  4087.  *      Allow user to Open a Message with a DoubleClick or button
  4088.  *
  4089.  *  Parameters:
  4090.  *      None
  4091.  *
  4092.  *  Returns:
  4093.  *      Nothing
  4094.  *
  4095.  */
  4096. /*******************************************************************/
  4097.  
  4098. void CFolderDlg::OnOpenAssociated()
  4099. {
  4100.     ULONG           ulObjType       = 0;
  4101.     LPMAPIPROP      lpMessage       = NULL;
  4102.     LPENTRYID       lpChildEntryID  = NULL;
  4103.     ULONG           ulChildEntryID  = 0;
  4104.     int             iRow            = 0;
  4105.     LONG            lSelection      = -1;
  4106.     LPSRowSet       lpRows          = NULL;
  4107.     CMessageDlg     *lpMsgDlg       = NULL;
  4108.     char            szBuffer[256];
  4109.     LONG            lRowsSeeked     = 0;
  4110.     int max=500;
  4111.     int rgItems[500];
  4112.  
  4113.     // initalize data for dialog box
  4114.     if( (lSelection = SendDlgItemMessage(IDC_FLD_ASS,LB_GETSELITEMS, (WPARAM)max, (LPARAM)(LPINT)rgItems )) != 1 )
  4115.     {
  4116.         MessageBox("Select ONLY one Message in Listbox to Open", "OnOpenMessage", MBS_ERROR );
  4117.         goto Error;
  4118.     }
  4119.  
  4120.     m_hResult = m_lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,rgItems[0],&lRowsSeeked);
  4121.  
  4122.     wsprintf(m_szLogBuf,"lpAssociatedTable->SeekRow( BOOKMARK_BEGINNING,%ld,&lRowsSeeked)\t SC: %s",
  4123.                         rgItems[0],
  4124.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4125.  
  4126.     if( HR_FAILED(m_hResult))
  4127.     {
  4128.         MessageBox( m_E.SzError("m_lpAssociatedTable->SeekRow", m_hResult),
  4129.                             "Client", MBS_ERROR );
  4130.         goto Error;
  4131.     }
  4132.  
  4133.  
  4134.     m_hResult = m_lpAssociatedTable->QueryRows( 1, 0, &lpRows );
  4135.  
  4136.     wsprintf(m_szLogBuf,"lpAssociatedTable->QueryRows( 1, 0, &lpRows )\t SC: %s",
  4137.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4138.  
  4139.     if( HR_FAILED(m_hResult) )
  4140.     {
  4141.         MessageBox( m_E.SzError("m_lpAssociatedTable->QueryRows", m_hResult),
  4142.                             "Client", MBS_ERROR );
  4143.         goto Error;
  4144.     }
  4145.  
  4146.  
  4147.     if( lpRows->aRow[0].lpProps[1].ulPropTag == PR_ENTRYID )
  4148.     {
  4149.         lpChildEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[1].Value.bin.lpb ;
  4150.         ulChildEntryID = (ULONG)     lpRows->aRow[0].lpProps[1].Value.bin.cb  ;
  4151.     }
  4152.  
  4153.     // openentry on the entryid
  4154.     m_hResult = m_lpFolder->OpenEntry( ulChildEntryID , lpChildEntryID, NULL,
  4155.                          ulAccess, &ulObjType, (IUnknown**)&lpMessage);
  4156.     wsprintf(m_szLogBuf,"lpFolder->OpenEntry(%lu,0x%X,NULL,%lu,&ulObjType,&lpMessage)\t SC: %s",
  4157.                         ulChildEntryID,lpChildEntryID,ulAccess,
  4158.                         GetString( "MAPIErrors", GetScode(m_hResult), m_szError ) );
  4159.  
  4160.     if( HR_FAILED(m_hResult))
  4161.     {
  4162.         MessageBox( m_E.SzError("OpenEntry on Folder", m_hResult), "Client", MBS_ERROR );
  4163.         goto Error;
  4164.     }
  4165.  
  4166.     // if it's a message display a dialog
  4167.     if( ulObjType == MAPI_MESSAGE )
  4168.     {
  4169.         if (lpRows->aRow[0].lpProps[0].ulPropTag == PR_SUBJECT )
  4170.         {
  4171.             wsprintf(szBuffer,"%s - %s",
  4172.                     GetString("MAPIObjTypes",ulObjType,NULL),
  4173.                     lpRows->aRow[0].lpProps[0].Value.lpszA);
  4174.         }
  4175.         else
  4176.         {
  4177.  
  4178.             wsprintf(szBuffer,"%s - %s",
  4179.                     GetString("MAPIObjTypes",ulObjType,NULL),
  4180.                     &(lpRows->aRow[0].lpProps[1]) );
  4181.         }
  4182.         lpMsgDlg   =  new CMessageDlg(szBuffer,(LPMESSAGE)lpMessage,this);
  4183.     }
  4184.     else
  4185.     {
  4186.         MessageBox("ulObjType of OpenEntry on lpMessage != MAPI_MESSAGE","Client",MBS_ERROR);
  4187.         goto Error;
  4188.     }
  4189.  
  4190.     FreeRowSet(lpRows);
  4191.  
  4192.     return;
  4193.  
  4194. Error:
  4195.  
  4196.     FreeRowSet(lpRows);
  4197.  
  4198.     if(lpMessage)
  4199.     {
  4200.         lpMessage->Release();
  4201.         lpMessage = NULL;
  4202.     }
  4203. }
  4204.  
  4205. /*******************************************************************/
  4206. /*
  4207.  -  CFolderDlg::
  4208.  -
  4209.  -  OnProperty
  4210.  -  OnMessage
  4211.  -  OnChildFolder
  4212.  -  OnCurrentFolder
  4213.  -  SetEnableState
  4214.  *
  4215.  *  Purpose:
  4216.  *      Enable/disable appropriate buttons, set focus of appropiate listboxs
  4217.  *
  4218.  */
  4219. /*******************************************************************/
  4220.  
  4221.  
  4222. void CFolderDlg::OnProperty()
  4223. {
  4224.  
  4225.     DWORD   dwIndex;
  4226.  
  4227.     // disable other listboxes
  4228.     dwIndex = SendDlgItemMessage(IDC_FLDCURRENT, LB_SETCURSEL,(WPARAM) -1 ,0 );
  4229.     dwIndex = SendDlgItemMessage(IDC_FLDCHILD,   LB_SETCURSEL,(WPARAM) -1 ,0 );
  4230.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4231.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,    LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4232.     
  4233. }
  4234.  
  4235.  
  4236. /*******************************************************************/
  4237.  
  4238.   
  4239. void CFolderDlg::OnMessage()
  4240. {
  4241.     DWORD   dwIndex;
  4242.  
  4243.  
  4244.     // disable other listboxes
  4245.     dwIndex = SendDlgItemMessage(IDC_FLDCURRENT, LB_SETCURSEL,(WPARAM) -1 ,0 );
  4246.     dwIndex = SendDlgItemMessage(IDC_FLDCHILD,   LB_SETCURSEL,(WPARAM) -1 ,0 );
  4247.     dwIndex = SendDlgItemMessage(IDC_PROPS,      LB_SETCURSEL,(WPARAM) -1 ,0 );
  4248.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,    LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4249.  
  4250. }
  4251.  
  4252.  
  4253. /*******************************************************************/
  4254.  
  4255. void CFolderDlg::OnAssociated()
  4256. {
  4257.     DWORD   dwIndex;
  4258.  
  4259.  
  4260.     // disable other listboxes
  4261.     dwIndex = SendDlgItemMessage(IDC_FLDCURRENT, LB_SETCURSEL,(WPARAM) -1 ,0 );
  4262.     dwIndex = SendDlgItemMessage(IDC_FLDCHILD,   LB_SETCURSEL,(WPARAM) -1 ,0 );
  4263.     dwIndex = SendDlgItemMessage(IDC_PROPS,      LB_SETCURSEL,(WPARAM) -1 ,0 );
  4264.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4265.  
  4266. }
  4267.  
  4268. /*******************************************************************/
  4269.  
  4270. void CFolderDlg::OnChildFolder()
  4271. {
  4272.     DWORD   dwIndex;
  4273.  
  4274.     // disable other listboxes
  4275.     dwIndex = SendDlgItemMessage(IDC_FLDCURRENT, LB_SETCURSEL,(WPARAM) -1 ,0 );
  4276.     dwIndex = SendDlgItemMessage(IDC_PROPS,      LB_SETCURSEL,(WPARAM) -1 ,0 );
  4277.     dwIndex = SendDlgItemMessage(IDC_FLDMESSAGES,LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4278.     dwIndex = SendDlgItemMessage(IDC_FLD_ASS,    LB_SETSEL,(WPARAM)FALSE ,(LPARAM) -1);
  4279. }
  4280.  
  4281.  
  4282. /*******************************************************************/
  4283. /*
  4284.  -  CFolderDlg::
  4285.  -  OnCancel
  4286.  -
  4287.  *  Purpose:
  4288.  *      Closes the Folder dialog.
  4289.  *
  4290.  */
  4291. /*******************************************************************/
  4292.  
  4293. void CFolderDlg::OnCancel()
  4294. {
  4295.     delete this;
  4296. }
  4297.  
  4298. /*******************************************************************/
  4299. /*
  4300.  -  CFolderDlg::
  4301.  -  Cleanup()
  4302.  -
  4303.  *  Purpose:
  4304.  *      Destructor for class CFolderDlg and CPropDlg call this
  4305.  *      function that releases and Frees memory
  4306.  *      allocated in class
  4307.  *
  4308.  */
  4309. /*******************************************************************/
  4310.  
  4311. void CFolderDlg::Cleanup()
  4312. {
  4313. #ifdef XVPORT
  4314.     UnadviseAll(m_lpChildTable,     MAPI_TABLE,"HeirarchyTable lpTable",    &m_lpNotifHeirTbl);
  4315.     UnadviseAll(m_lpMessageTable,   MAPI_TABLE,"ContentsTable lpTable",     &m_lpNotifContTbl);
  4316.     UnadviseAll(m_lpAssociatedTable,MAPI_TABLE,"AssociatedTable lpTable",   &m_lpNotifAssTbl);
  4317.     UnadviseAll(lpMDB,              MAPI_STORE,"Folder Objs lpMDB",         &m_lpNotifFld);
  4318.  
  4319. #endif
  4320.  
  4321.     // table obtained from GetHeirarchyTable
  4322.     if(m_lpChildTable)
  4323.     {
  4324.         m_lpChildTable->Release();
  4325.         m_lpChildTable = NULL;
  4326.     }
  4327.  
  4328.     // table obtained from GetContentsTable
  4329.     if(m_lpMessageTable)
  4330.     {
  4331.         m_lpMessageTable->Release();
  4332.         m_lpMessageTable = NULL;
  4333.     }
  4334.  
  4335.     // table obtained from GetContentsTable Associated
  4336.     if(m_lpAssociatedTable)
  4337.     {
  4338.         m_lpAssociatedTable->Release();
  4339.         m_lpAssociatedTable = NULL;
  4340.     }
  4341.  
  4342.     // folder object
  4343.     if(m_lpFolder)
  4344.     {
  4345.         m_lpFolder->Release();
  4346.         m_lpFolder = NULL;
  4347.     }
  4348. }
  4349.  
  4350. /*******************************************************************/
  4351. /*
  4352.  -  CFolderDlg::
  4353.  -  OnSpecialProps
  4354.  -
  4355.  *  Purpose:
  4356.  *      Closes the Folder dialog.
  4357.  *
  4358.  */
  4359. /*******************************************************************/
  4360.  
  4361. void CFolderDlg::OnSpecialProps()
  4362. {
  4363.     CFldSpecialDlg    FldSpecial(m_lpFolder,this);
  4364.     FldSpecial.DoModal();
  4365. }
  4366.  
  4367. /*******************************************************************/
  4368. /*********************** FldSpecial **************************/
  4369.  
  4370. /********************************************************************/
  4371. /*
  4372.  -  CFldSpecialDlg::
  4373.  -  OnInitDialog
  4374.  -
  4375.  *  Purpose:
  4376.  *
  4377.  */
  4378. /********************************************************************/
  4379.  
  4380. BOOL CFldSpecialDlg::OnInitDialog()
  4381. {
  4382.     CGetError       E;
  4383.     DWORD           dwReturn            = 0;
  4384.     HRESULT         hResult             = hrSuccess;
  4385.     char            szBuffer[300];
  4386.     ULONG           cVals               = 0;
  4387.     LPSPropValue    lpspva              = NULL;
  4388.     ULONG           i;
  4389.  
  4390.     
  4391.     SizedSPropTagArray(7,sptaFldSpecial) =
  4392.     {
  4393.         7,
  4394.         {
  4395.             PR_DISPLAY_NAME,
  4396.             PR_FOLDER_TYPE,
  4397.             PR_OBJECT_TYPE,
  4398.             PR_ACCESS,
  4399.             PR_ACCESS_LEVEL,
  4400.             PR_SUBFOLDERS,
  4401.             PR_STATUS,
  4402.         }
  4403.     };
  4404.  
  4405.  
  4406.  
  4407.     hResult = m_lpFolder->GetProps((LPSPropTagArray)&sptaFldSpecial,0,&cVals,&lpspva);
  4408.     if( HR_FAILED(hResult) )
  4409.     {
  4410.         MessageBox( E.SzError("lpMDB->GetProps(sptaFldSpecial)", hResult),
  4411.                  "Client", MBS_ERROR );
  4412.         return FALSE;
  4413.     }
  4414.  
  4415.     i = 0;
  4416.  
  4417.     // PR_DISPLAY_NAME
  4418.     if(lpspva[i].ulPropTag != PR_DISPLAY_NAME )
  4419.     {
  4420.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4421.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4422.         else
  4423.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4424.     }            
  4425.     else
  4426.         wsprintf(szBuffer,lpspva[i].Value.lpszA);
  4427.     SetDlgItemText(IDT_DISPLAY_NAME1,szBuffer);
  4428.     i++;
  4429.  
  4430.     // PR_FOLDER_TYPE
  4431.     if(lpspva[i].ulPropTag != PR_FOLDER_TYPE )
  4432.     {
  4433.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4434.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4435.         else
  4436.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4437.     }            
  4438.     else
  4439.         GetString( "FolderType", lpspva[i].Value.ul, szBuffer );
  4440.     SetDlgItemText(IDT_FOLDER_TYPE1,szBuffer);
  4441.     i++;
  4442.  
  4443.     // PR_OBJECT_TYPE
  4444.     if(lpspva[i].ulPropTag != PR_OBJECT_TYPE )
  4445.     {
  4446.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4447.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4448.         else
  4449.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4450.     }            
  4451.     else
  4452.         GetString( "MAPIObjTypes", lpspva[i].Value.ul, szBuffer );
  4453.     SetDlgItemText(IDT_OBJECT_TYPE1,szBuffer);
  4454.     i++;
  4455.  
  4456.  
  4457.     // PR_ACCESS
  4458.     if(lpspva[i].ulPropTag != PR_ACCESS )
  4459.     {
  4460.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4461.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4462.         else
  4463.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4464.         SetDlgItemText(IDT_ACCESS1,szBuffer);
  4465.     }
  4466.     else
  4467.     {
  4468.         if( (lpspva[i].Value.ul & MAPI_ACCESS_MODIFY) )
  4469.             SetDlgItemText(IDT_ACCESS1,"MAPI_ACCESS_MODIFY");
  4470.             
  4471.         if( (lpspva[i].Value.ul & MAPI_ACCESS_READ) )
  4472.             SetDlgItemText(IDT_ACCESS2,"MAPI_ACCESS_READ");
  4473.             
  4474.         if( (lpspva[i].Value.ul & MAPI_ACCESS_DELETE) )
  4475.             SetDlgItemText(IDT_ACCESS3,"MAPI_ACCESS_DELETE");
  4476.             
  4477.         if( (lpspva[i].Value.ul & MAPI_ACCESS_CREATE_HIERARCHY) )        
  4478.             SetDlgItemText(IDT_ACCESS4,"MAPI_ACCESS_CREATE_HIERARCHY");
  4479.             
  4480.         if( (lpspva[i].Value.ul & MAPI_ACCESS_CREATE_CONTENTS) )
  4481.             SetDlgItemText(IDT_ACCESS5,"MAPI_ACCESS_CREATE_CONTENTS");
  4482.             
  4483.         if( (lpspva[i].Value.ul & MAPI_ACCESS_CREATE_ASSOCIATED) )
  4484.             SetDlgItemText(IDT_ACCESS6,"MAPI_ACCESS_CREATE_ASSOCIATED");
  4485.     }
  4486.     i++;
  4487.  
  4488.     // PR_ACCESS_LEVEL
  4489.     if(lpspva[i].ulPropTag != PR_ACCESS_LEVEL )
  4490.     {
  4491.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4492.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4493.         else
  4494.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4495.     }            
  4496.     else
  4497.     {
  4498.         if(lpspva[i].Value.ul == MAPI_MODIFY )
  4499.             wsprintf(szBuffer,"MAPI_MODIFY");
  4500.         else
  4501.             wsprintf(szBuffer,"Read Only");
  4502.     }            
  4503.     SetDlgItemText(IDT_ACCESS_LEVEL1,szBuffer);
  4504.     i++;
  4505.  
  4506.     // PR_SUBFOLDERS
  4507.     if(lpspva[i].ulPropTag != PR_SUBFOLDERS )
  4508.     {
  4509.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4510.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4511.         else
  4512.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4513.     }            
  4514.     else
  4515.     {
  4516.         if(lpspva[i].Value.b == TRUE )
  4517.             wsprintf(szBuffer,"YES");
  4518.         else
  4519.             wsprintf(szBuffer,"NO");
  4520.     }            
  4521.     SetDlgItemText(IDT_SUBFOLDERS1,szBuffer);
  4522.     i++;
  4523.  
  4524.  
  4525.     // PR_STATUS (NOTE, should I call some other function to get this ?)
  4526.     if(lpspva[i].ulPropTag != PR_STATUS )
  4527.     {
  4528.         if( PROP_TYPE(lpspva[i].ulPropTag) == PT_ERROR)
  4529.             GetString( "MAPIErrors", lpspva[i].Value.err, szBuffer );
  4530.         else
  4531.             wsprintf(szBuffer,"PR_SUBJECT not available");
  4532.         SetDlgItemText(IDT_STATUS1,szBuffer);
  4533.     }
  4534.     else
  4535.     {
  4536.         if( (lpspva[i].Value.ul & FLDSTATUS_HIGHLIGHTED) )
  4537.             SetDlgItemText(IDT_STATUS1,"FLDSTATUS_HIGHLIGHTED");
  4538.  
  4539.         if( (lpspva[i].Value.ul & FLDSTATUS_TAGGED) )
  4540.             SetDlgItemText(IDT_STATUS2,"FLDSTATUS_TAGGED");
  4541.  
  4542.         if( (lpspva[i].Value.ul & FLDSTATUS_HIDDEN) )
  4543.             SetDlgItemText(IDT_STATUS3,"FLDSTATUS_HIDDEN");
  4544.  
  4545.         if( (lpspva[i].Value.ul & FLDSTATUS_DELMARKED) )
  4546.             SetDlgItemText(IDT_STATUS4,"FLDSTATUS_DELMARKED");
  4547.     }
  4548.     i++;
  4549.  
  4550.     MAPIFreeBuffer(lpspva);
  4551.  
  4552.     return TRUE;
  4553. }
  4554.  
  4555.  
  4556. /*******************************************************************/
  4557. /*
  4558.  -  CFldSpecialDlg::
  4559.  -  ~CFldSpecialDlg
  4560.  -
  4561.  *  Purpose:
  4562.  *      Destructor for class CFldSpecialDlg. Releases and Frees memory
  4563.  *      allocated in this class
  4564.  *
  4565.  */
  4566. /*******************************************************************/
  4567.  
  4568. CFldSpecialDlg::~CFldSpecialDlg()
  4569. {
  4570.  
  4571. }
  4572.  
  4573.  
  4574. /*******************************************************************/
  4575. /*
  4576.  -  CFldSpecialDlg::
  4577.  -  OnCancel
  4578.  -
  4579.  *  Purpose:
  4580.  *
  4581.  */
  4582. /*******************************************************************/
  4583.  
  4584. void CFldSpecialDlg::OnCancel()
  4585. {
  4586.     EndDialog(IDCANCEL);
  4587. }
  4588.  
  4589.