Click here to Skip to main content
15,905,419 members
Home / Discussions / ATL / WTL / STL
   

ATL / WTL / STL

 
QuestionUnable to drop a file on a new message in outlook 2007 Pin
sisrahul19-Jun-12 2:57
sisrahul19-Jun-12 2:57 
I am facing a strange issue.It is working well with outlook 2K3 but not anymore on outlook 2K7 and 2K10.

Problem - If I drag a file from my application and drop onto the message body in a new message in outlook 2007 nothing happens. Instead the expected behavior is - file should attach to the message. It work well in outlook 2003 and I haven't made any change in my code.
If I drag file from my application and drop on to windows desktop, it works without any problem. Now if I drag the same file from Windows desktop and drop onto the new message in outlook 2007, file gets attached. This leaves me guessing that there is something need to change in my code but I unable to figure out.

Investigation -

We have implemented the CFSTR_FILEDESCRIPTOR, CFSTR_FILECONTENTS and CF_TXT in the CDataObject::Getdata() method. I have noticed is that in case of outlook 2007, when I drop file(from my application) to message body in new message, only CFSTR_FILEDESCRIPTOR clipboard format is called. While in case of outlook 2003, if I drop file(from my application) to message body in new message CDataObject::GetData() is called two times, CFSTR_FILEDESCRIPTOR followed by CFSTR_FILECONTENTS clipboard formats.

In the second file contents are extracted since GetData is not called second time hence file is not attached to email. Following is the sample code.

Does anyone know what could be the reason ? Or what else i can try to narrow down the issue.


STDMETHODIMP CDataObject::GetData ( 
                LPFORMATETC                pFE, 
                LPSTGMEDIUM         pSTM) 
{ 
    HGLOBAL                                        hMem; 
        LPFILEGROUPDESCRIPTOR        pfgd; 
    UINT                                        uFormat, uBytes; 
        void*                                        p; 

        m_uFmtUsed = 0; 
        uFormat = pFE->cfFormat; 

        // FILEDESCRIPTOR format 
        if (uFormat == m_fe[0].cfFormat) 
        { 
                if (!(pFE->dwAspect & DVASPECT_CONTENT)) 
                        return DV_E_DVASPECT; 
        if (!(pFE->tymed & TYMED_HGLOBAL)) 
                        return DV_E_FORMATETC; 

            hMem=GlobalAlloc (GMEM_SHARE | GMEM_MOVEABLE, 
                                sizeof(FILEGROUPDESCRIPTOR)); 

                if (hMem == NULL) 
                        return STG_E_MEDIUMFULL; 

                pfgd = (LPFILEGROUPDESCRIPTOR)GlobalLock (hMem); 
                pfgd->cItems = 1; 
                pfgd->fgd[0].dwFlags = FD_ATTRIBUTES; 
                pfgd->fgd[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL; 
                lstrcpy (pfgd->fgd[0].cFileName, m_pszName); 

                GlobalUnlock (hMem); 

                pSTM->hGlobal = hMem; 
                pSTM->tymed = TYMED_HGLOBAL; 
                pSTM->pUnkForRelease = NULL; 
                m_uFmtUsed = uFormat; 
                return S_OK; 
        } 

        // FILECONTENTS clipboard format 
        else if (uFormat == m_fe[1].cfFormat) 
        { 
                if (!(pFE->dwAspect & DVASPECT_CONTENT)) 
                        return DV_E_DVASPECT; 
        if (!(pFE->tymed & TYMED_HGLOBAL)) 
                        return DV_E_FORMATETC; 

                if (!m_pData) 
                { 
                        m_pData = PKDropKeysGetData ( 
                                        (PPGPKEYSSTRUCT)m_pKeysStruct, FALSE, FALSE, &uBytes); 
                } 

            hMem = GlobalAlloc (GMEM_SHARE|GMEM_MOVEABLE, uBytes); 

                if (hMem == NULL) 
                        return STG_E_MEDIUMFULL; 

                p = GlobalLock (hMem); 
                memcpy (p, m_pData, uBytes); 
                GlobalUnlock (hMem); 

                pSTM->hGlobal = hMem; 
                pSTM->tymed = TYMED_HGLOBAL; 
                pSTM->pUnkForRelease = NULL; 
                m_uFmtUsed = uFormat; 
                return S_OK; 
        } 

.... 
..... 
.... 
    return DV_E_FORMATETC; 
} 

Rahul Sisondia

GeneralBug in ATL/MFC 8.0 CString Pin
XmlSeeker14-Jun-12 18:58
XmlSeeker14-Jun-12 18:58 
GeneralRe: Bug in ATL/MFC 8.0 CString Pin
Richard MacCutchan14-Jun-12 21:48
mveRichard MacCutchan14-Jun-12 21:48 
QuestionATL - Raise Event to all clients and acces to same variable Pin
ljubek7414-Jun-12 7:08
ljubek7414-Jun-12 7:08 
AnswerRe: ATL - Raise Event to all clients and acces to same variable Pin
barneyman17-Jun-12 14:51
barneyman17-Jun-12 14:51 
GeneralRe: ATL - Raise Event to all clients and acces to same variable Pin
ljubek7418-Jun-12 2:02
ljubek7418-Jun-12 2:02 
QuestionMFC exe to ATL service Pin
es196812-Jun-12 3:39
es196812-Jun-12 3:39 
AnswerRe: MFC exe to ATL service Pin
barneyman13-Jun-12 18:02
barneyman13-Jun-12 18:02 
QuestionAPI Decision Pin
Collin Biedenkapp11-Jun-12 18:53
Collin Biedenkapp11-Jun-12 18:53 
AnswerRe: API Decision Pin
Richard MacCutchan11-Jun-12 22:01
mveRichard MacCutchan11-Jun-12 22:01 
Questionhow to use an interface as a parameter in other atl objects? Pin
astupidboy31-May-12 20:41
astupidboy31-May-12 20:41 
AnswerRe: how to use an interface as a parameter in other atl objects? Pin
Richard MacCutchan31-May-12 21:26
mveRichard MacCutchan31-May-12 21:26 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
astupidboy31-May-12 22:29
astupidboy31-May-12 22:29 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
Richard MacCutchan31-May-12 22:35
mveRichard MacCutchan31-May-12 22:35 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
astupidboy31-May-12 22:56
astupidboy31-May-12 22:56 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
Richard MacCutchan31-May-12 23:08
mveRichard MacCutchan31-May-12 23:08 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
astupidboy31-May-12 23:24
astupidboy31-May-12 23:24 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
barneyman3-Jun-12 17:58
barneyman3-Jun-12 17:58 
GeneralRe: how to use an interface as a parameter in other atl objects? Pin
astupidboy31-May-12 22:35
astupidboy31-May-12 22:35 
QuestionSave a _RecordsetPtr into map Pin
MrKBA30-May-12 6:39
MrKBA30-May-12 6:39 
AnswerRe: Save a _RecordsetPtr into map Pin
barneyman3-Jun-12 18:04
barneyman3-Jun-12 18:04 
QuestionCOM_INTERFACE_ENTRY correct use ? Pin
MrKBA24-May-12 23:58
MrKBA24-May-12 23:58 
QuestionIE 10 Protected Mode issues with Winodws 8 x64 CP. Pin
birajendu21-May-12 23:47
birajendu21-May-12 23:47 
QuestionHow to do inheritance in ATL Pin
Rahul.RK21-May-12 0:19
Rahul.RK21-May-12 0:19 
SuggestionRe: How to do inheritance in ATL Pin
Pablo Aliskevicius21-May-12 2:41
Pablo Aliskevicius21-May-12 2:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.