diff options
Diffstat (limited to 'plugins/SendScreenshotPlus/src')
18 files changed, 1946 insertions, 1818 deletions
diff --git a/plugins/SendScreenshotPlus/src/CSend.cpp b/plugins/SendScreenshotPlus/src/CSend.cpp index 9386894343..24a2f3de56 100644 --- a/plugins/SendScreenshotPlus/src/CSend.cpp +++ b/plugins/SendScreenshotPlus/src/CSend.cpp @@ -31,30 +31,31 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- CSend::CSend(HWND /*Owner*/, MCONTACT hContact, bool bAsync, bool bSilent) : - m_bDeleteAfterSend(false), - m_bAsync(bAsync), - m_bSilent(bSilent), - m_pszFile(NULL), - m_pszFileDesc(NULL), - m_URL(NULL), - m_URLthumb(NULL), - m_pszSendTyp(NULL), - m_pszProto(NULL), +m_bDeleteAfterSend(false), +m_bAsync(bAsync), +m_bSilent(bSilent), +m_pszFile(NULL), +m_pszFileDesc(NULL), +m_URL(NULL), +m_URLthumb(NULL), +m_pszSendTyp(NULL), +m_pszProto(NULL), // m_hContact(hContact), // initialized below - m_EnableItem(0), - m_ChatRoom(0), +m_EnableItem(0), +m_ChatRoom(0), // m_PFflag(0), - m_cbEventMsg(0), - m_szEventMsg(NULL), - m_hSend(0), - m_hOnSend(0), - m_ErrorMsg(NULL), - m_ErrorTitle(NULL) +m_cbEventMsg(0), +m_szEventMsg(NULL), +m_hSend(0), +m_hOnSend(0), +m_ErrorMsg(NULL), +m_ErrorTitle(NULL) { SetContact(hContact); } -CSend::~CSend(){ +CSend::~CSend() +{ mir_free(m_pszFile); mir_free(m_pszFileDesc); mir_free(m_URL); @@ -62,13 +63,14 @@ CSend::~CSend(){ mir_free(m_szEventMsg); mir_free(m_ErrorMsg); mir_free(m_ErrorTitle); - if(m_hOnSend) UnhookEvent(m_hOnSend); + if (m_hOnSend) UnhookEvent(m_hOnSend); } //--------------------------------------------------------------------------- -void CSend::SetContact(MCONTACT hContact) { +void CSend::SetContact(MCONTACT hContact) +{ m_hContact = hContact; - if(hContact){ + if (hContact) { m_pszProto = GetContactProto(hContact); m_ChatRoom = db_get_b(hContact, m_pszProto, "ChatRoom", 0); /* @@ -81,139 +83,150 @@ void CSend::SetContact(MCONTACT hContact) { //--------------------------------------------------------------------------- /*bool CSend::hasCap(unsigned int Flag) { return (Flag & CallContactService(m_hContact, PS_GETCAPS, PFLAGNUM_1, NULL)) == Flag; -}// */ + }// */ //--------------------------------------------------------------------------- -INT_PTR CALLBACK CSend::ResultDialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){ - switch(uMsg){ - case WM_INITDIALOG:{ - SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(LPARAM)GetIcon(ICO_MAIN)); - CSend* self=(CSend*)lParam; - TCHAR* tmp=mir_tstrdup(TranslateT("Resulting URL from\n")); - mir_tstradd(tmp,self->m_pszSendTyp); - SetDlgItemText(hwndDlg,IDC_HEADERBAR,tmp); - mir_free(tmp); - SendDlgItemMessage(hwndDlg,IDC_HEADERBAR,WM_SETICON,ICON_BIG,(LPARAM)GetIconBtn(ICO_BTN_ARROWR)); - SetDlgItemTextA(hwndDlg,ID_edtURL,self->m_URL); - if(self->m_URLthumb){ - SetDlgItemTextA(hwndDlg,ID_edtURLthumb,self->m_URLthumb); - }else{ - SetDlgItemTextA(hwndDlg,ID_edtURLthumb,"-"); - for(int i=ID_btnThumbCopy; i<=ID_edtURLthumb; ++i){ - EnableWindow(GetDlgItem(hwndDlg,i),FALSE); +INT_PTR CALLBACK CSend::ResultDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + { + SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); + CSend* self = (CSend*)lParam; + TCHAR* tmp = mir_tstrdup(TranslateT("Resulting URL from\n")); + mir_tstradd(tmp, self->m_pszSendTyp); + SetDlgItemText(hwndDlg, IDC_HEADERBAR, tmp); + mir_free(tmp); + SendDlgItemMessage(hwndDlg, IDC_HEADERBAR, WM_SETICON, ICON_BIG, (LPARAM)GetIconBtn(ICO_BTN_ARROWR)); + SetDlgItemTextA(hwndDlg, ID_edtURL, self->m_URL); + if (self->m_URLthumb) { + SetDlgItemTextA(hwndDlg, ID_edtURLthumb, self->m_URLthumb); } - } - if(!self->m_pszFileDesc) - SetDlgItemText(hwndDlg,ID_bvlDesc,self->m_ErrorTitle); - else - SetDlgItemText(hwndDlg,ID_bvlDesc,self->m_pszFileDesc); - SendDlgItemMessage(hwndDlg,IDOK,BM_SETIMAGE,IMAGE_ICON,(LPARAM)GetIconBtn(ICO_BTN_COPY)); - SendDlgItemMessage(hwndDlg,IDOK,BUTTONTRANSLATE,0,0); - SendDlgItemMessage(hwndDlg,IDCANCEL,BM_SETIMAGE,IMAGE_ICON,(LPARAM)GetIconBtn(ICO_BTN_CANCEL)); - SendDlgItemMessage(hwndDlg,IDCANCEL,BUTTONTRANSLATE,0,0); - for(int i=ID_btnCopy; i<=ID_btnThumbBBC2; ++i){ - SendDlgItemMessage(hwndDlg,i,BUTTONSETASTHEMEDBTN,0,0); - SendDlgItemMessage(hwndDlg,i,BUTTONSETASFLATBTN,1,0); - switch(i){ - case ID_btnCopy: - case ID_btnThumbCopy: - SendDlgItemMessage(hwndDlg,i,BM_SETIMAGE,IMAGE_ICON,(LPARAM)GetIconBtn(ICO_BTN_COPY)); - SendDlgItemMessage(hwndDlg,i,BUTTONADDTOOLTIP,(WPARAM)LPGENT("Copy"),BATF_TCHAR); - break; - case ID_btnBBC: - case ID_btnThumbBBC: - SendDlgItemMessage(hwndDlg,i,BM_SETIMAGE,IMAGE_ICON,(LPARAM)GetIconBtn(ICO_BTN_BBC)); - SendDlgItemMessage(hwndDlg,i,BUTTONADDTOOLTIP,(WPARAM)LPGENT("Copy BBCode"),BATF_TCHAR); - break; - default: - SendDlgItemMessage(hwndDlg,i,BM_SETIMAGE,IMAGE_ICON,(LPARAM)GetIconBtn(ICO_BTN_BBCLNK)); - SendDlgItemMessage(hwndDlg,i,BUTTONADDTOOLTIP,(WPARAM)LPGENT("Copy BBCode w/ link"),BATF_TCHAR); + else { + SetDlgItemTextA(hwndDlg, ID_edtURLthumb, "-"); + for (int i = ID_btnThumbCopy; i <= ID_edtURLthumb; ++i) { + EnableWindow(GetDlgItem(hwndDlg, i), FALSE); + } + } + if (!self->m_pszFileDesc) + SetDlgItemText(hwndDlg, ID_bvlDesc, self->m_ErrorTitle); + else + SetDlgItemText(hwndDlg, ID_bvlDesc, self->m_pszFileDesc); + SendDlgItemMessage(hwndDlg, IDOK, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_COPY)); + SendDlgItemMessage(hwndDlg, IDOK, BUTTONTRANSLATE, 0, 0); + SendDlgItemMessage(hwndDlg, IDCANCEL, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_CANCEL)); + SendDlgItemMessage(hwndDlg, IDCANCEL, BUTTONTRANSLATE, 0, 0); + for (int i = ID_btnCopy; i <= ID_btnThumbBBC2; ++i) { + SendDlgItemMessage(hwndDlg, i, BUTTONSETASTHEMEDBTN, 0, 0); + SendDlgItemMessage(hwndDlg, i, BUTTONSETASFLATBTN, 1, 0); + switch (i) { + case ID_btnCopy: + case ID_btnThumbCopy: + SendDlgItemMessage(hwndDlg, i, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_COPY)); + SendDlgItemMessage(hwndDlg, i, BUTTONADDTOOLTIP, (WPARAM)LPGENT("Copy"), BATF_TCHAR); + break; + case ID_btnBBC: + case ID_btnThumbBBC: + SendDlgItemMessage(hwndDlg, i, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_BBC)); + SendDlgItemMessage(hwndDlg, i, BUTTONADDTOOLTIP, (WPARAM)LPGENT("Copy BBCode"), BATF_TCHAR); + break; + default: + SendDlgItemMessage(hwndDlg, i, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_BBCLNK)); + SendDlgItemMessage(hwndDlg, i, BUTTONADDTOOLTIP, (WPARAM)LPGENT("Copy BBCode w/ link"), BATF_TCHAR); + } } } - TranslateDialogDefault(hwndDlg); - return TRUE;} + return TRUE; + case WM_COMMAND: - switch(LOWORD(wParam)) { + switch (LOWORD(wParam)) { + case IDCANCEL: + DestroyWindow(hwndDlg); + return TRUE; + case IDOK: case ID_btnCopy: case ID_btnThumbCopy: case ID_btnBBC: case ID_btnThumbBBC: - case ID_btnThumbBBC2:{ + case ID_btnThumbBBC2: TCHAR tmp[2048]; - int edtID=ID_edtURL; - int bbc=0; - switch(LOWORD(wParam)){ + int edtID = ID_edtURL; + int bbc = 0; + switch (LOWORD(wParam)) { case ID_btnThumbBBC2: ++bbc; case ID_btnThumbBBC: ++bbc; case ID_btnThumbCopy: - edtID=ID_edtURLthumb; + edtID = ID_edtURLthumb; break; case ID_btnBBC: ++bbc; break; } size_t len; - if(bbc){ - if(bbc==1){ - memcpy(tmp,_T("[img]"),5*sizeof(TCHAR)); len=5; - len+=GetDlgItemText(hwndDlg,edtID,tmp+len,2048-11); - memcpy(tmp+len,_T("[/img]"),7*sizeof(TCHAR)); len+=7; - }else{ - memcpy(tmp,_T("[url="),5*sizeof(TCHAR)); len=5; - len+=GetDlgItemText(hwndDlg,ID_edtURL,tmp+len,1024); - memcpy(tmp+len,_T("][img]"),6*sizeof(TCHAR)); len+=6; - len+=GetDlgItemText(hwndDlg,edtID,tmp+len,1024); - memcpy(tmp+len,_T("[/img][/url]"),13*sizeof(TCHAR)); len+=12; + if (bbc) { + if (bbc == 1) { + memcpy(tmp, _T("[img]"), 5 * sizeof(TCHAR)); len = 5; + len += GetDlgItemText(hwndDlg, edtID, tmp + len, 2048 - 11); + memcpy(tmp + len, _T("[/img]"), 7 * sizeof(TCHAR)); len += 7; } - }else - len=GetDlgItemText(hwndDlg,edtID,tmp,_countof(tmp)); - int retries=3; - do{ - if(!OpenClipboard(hwndDlg)){ + else { + memcpy(tmp, _T("[url="), 5 * sizeof(TCHAR)); len = 5; + len += GetDlgItemText(hwndDlg, ID_edtURL, tmp + len, 1024); + memcpy(tmp + len, _T("][img]"), 6 * sizeof(TCHAR)); len += 6; + len += GetDlgItemText(hwndDlg, edtID, tmp + len, 1024); + memcpy(tmp + len, _T("[/img][/url]"), 13 * sizeof(TCHAR)); len += 12; + } + } + else + len = GetDlgItemText(hwndDlg, edtID, tmp, _countof(tmp)); + int retries = 3; + do { + if (!OpenClipboard(hwndDlg)) { Sleep(100); continue; } EmptyClipboard(); - HGLOBAL clipbuffer=GlobalAlloc(GMEM_MOVEABLE, len*sizeof(TCHAR)+sizeof(TCHAR)); - TCHAR* tmp2=(TCHAR*)GlobalLock(clipbuffer); - mir_tstrncpy(tmp2,tmp,len+1); tmp2[len]='\0'; + HGLOBAL clipbuffer = GlobalAlloc(GMEM_MOVEABLE, len*sizeof(TCHAR) + sizeof(TCHAR)); + TCHAR* tmp2 = (TCHAR*)GlobalLock(clipbuffer); + mir_tstrncpy(tmp2, tmp, len + 1); tmp2[len] = '\0'; GlobalUnlock(clipbuffer); - SetClipboardData(CF_UNICODETEXT,clipbuffer); + SetClipboardData(CF_UNICODETEXT, clipbuffer); CloseClipboard(); break; - }while(--retries); - if(LOWORD(wParam)==IDOK) + } while (--retries); + + if (LOWORD(wParam) == IDOK) DestroyWindow(hwndDlg); - return TRUE;} - case IDCANCEL: - DestroyWindow(hwndDlg); return TRUE; } } return FALSE; } -void CSend::svcSendMsgExit(const char* szMessage) { - if(m_bSilent){ + +void CSend::svcSendMsgExit(const char* szMessage) +{ + if (m_bSilent) { Exit(ACKRESULT_SUCCESS); return; } - if(!m_hContact){ - if(!m_pszFileDesc) - m_pszFileDesc=mir_a2t(szMessage); + if (!m_hContact) { + if (!m_pszFileDesc) + m_pszFileDesc = mir_a2t(szMessage); Exit(CSEND_DIALOG); return; } - if(m_ChatRoom){ + if (m_ChatRoom) { TCHAR* tmp = mir_a2t(szMessage); if (m_pszFileDesc) { mir_tstradd(tmp, _T("\r\n")); mir_tstradd(tmp, m_pszFileDesc); } - GC_INFO gci = {0}; + GC_INFO gci = { 0 }; int res = GC_RESULT_NOSESSION; int cnt = (int)CallService(MS_GC_GETSESSIONCOUNT, 0, (LPARAM)m_pszProto); //loop on all gc session to get the right (save) ptszID for the chatroom from m_hContact gci.pszModule = m_pszProto; - for (int i = 0; i < cnt ; i++ ) { + for (int i = 0; i < cnt; i++) { gci.iItem = i; gci.Flags = GCF_BYINDEX | GCF_HCONTACT | GCF_ID; CallService(MS_GC_GETINFO, 0, (LPARAM)&gci); @@ -231,17 +244,18 @@ void CSend::svcSendMsgExit(const char* szMessage) { } } Exit(res); return; - }else{ + } + else { mir_freeAndNil(m_szEventMsg); - m_cbEventMsg = (DWORD)mir_strlen(szMessage)+1; + m_cbEventMsg = (DWORD)mir_strlen(szMessage) + 1; m_szEventMsg = (char*)mir_realloc(m_szEventMsg, (sizeof(char) * m_cbEventMsg)); memset(m_szEventMsg, 0, (sizeof(char) * m_cbEventMsg)); - mir_strcpy(m_szEventMsg,szMessage); + mir_strcpy(m_szEventMsg, szMessage); if (m_pszFileDesc && m_pszFileDesc[0] != NULL) { char *temp = mir_t2a(m_pszFileDesc); mir_stradd(m_szEventMsg, "\r\n"); mir_stradd(m_szEventMsg, temp); - m_cbEventMsg = (DWORD)mir_strlen(m_szEventMsg)+1; + m_cbEventMsg = (DWORD)mir_strlen(m_szEventMsg) + 1; mir_free(temp); } //create a HookEventObj on ME_PROTO_ACK @@ -259,29 +273,30 @@ void CSend::svcSendMsgExit(const char* szMessage) { } } -void CSend::svcSendFileExit() { -//szMessage should be encoded as the File followed by the description, the -//separator being a single nul (\0). If there is no description, do not forget -//to end the File with two nuls. - if(m_bSilent){ +void CSend::svcSendFileExit() +{ + //szMessage should be encoded as the File followed by the description, the + //separator being a single nul (\0). If there is no description, do not forget + //to end the File with two nuls. + if (m_bSilent) { Exit(ACKRESULT_SUCCESS); return; } - if(!m_hContact){ + if (!m_hContact) { Error(LPGENT("%s requires a valid contact!"), m_pszSendTyp); Exit(ACKRESULT_FAILED); return; } mir_freeAndNil(m_szEventMsg); char* szFile = mir_t2a(m_pszFile); - m_cbEventMsg = (DWORD)mir_strlen(szFile)+2; - m_szEventMsg=(char*)mir_realloc(m_szEventMsg, (sizeof(char) * m_cbEventMsg)); + m_cbEventMsg = (DWORD)mir_strlen(szFile) + 2; + m_szEventMsg = (char*)mir_realloc(m_szEventMsg, (sizeof(char) * m_cbEventMsg)); memset(m_szEventMsg, 0, (sizeof(char) * m_cbEventMsg)); - mir_strcpy(m_szEventMsg,szFile); + mir_strcpy(m_szEventMsg, szFile); if (m_pszFileDesc && m_pszFileDesc[0] != NULL) { char* temp = mir_t2a(m_pszFileDesc); m_cbEventMsg += (DWORD)mir_strlen(temp); - m_szEventMsg=(char*)mir_realloc(m_szEventMsg, sizeof(char)*m_cbEventMsg); - mir_strcpy(m_szEventMsg+mir_strlen(szFile)+1,temp); - m_szEventMsg[m_cbEventMsg-1] = 0; + m_szEventMsg = (char*)mir_realloc(m_szEventMsg, sizeof(char)*m_cbEventMsg); + mir_strcpy(m_szEventMsg + mir_strlen(szFile) + 1, temp); + m_szEventMsg[m_cbEventMsg - 1] = 0; mir_free(temp); } mir_free(szFile); @@ -292,9 +307,9 @@ void CSend::svcSendFileExit() { } // Start miranda PSS_FILE based on mir ver (T) - TCHAR* ppFile[2]={0,0}; + TCHAR* ppFile[2] = { 0, 0 }; TCHAR* pDesc = mir_tstrdup(m_pszFileDesc); - ppFile[0] = mir_tstrdup (m_pszFile); + ppFile[0] = mir_tstrdup(m_pszFile); ppFile[1] = NULL; m_hSend = (HANDLE)CallContactService(m_hContact, PSS_FILE, (WPARAM)pDesc, (LPARAM)ppFile); mir_free(pDesc); @@ -309,17 +324,18 @@ void CSend::svcSendFileExit() { } //--------------------------------------------------------------------------- -int CSend::OnSend(void *obj, WPARAM wParam, LPARAM lParam){ - CSend* self=(CSend*)obj; - ACKDATA *ack=(ACKDATA*)lParam; - if(ack->hProcess!= self->m_hSend) return 0; - /* if(dat->waitingForAcceptance) { - SetTimer(hwndDlg,1,1000,NULL); - dat->waitingForAcceptance=0; +int CSend::OnSend(void *obj, WPARAM, LPARAM lParam) +{ + CSend* self = (CSend*)obj; + ACKDATA *ack = (ACKDATA*)lParam; + if (ack->hProcess != self->m_hSend) return 0; + /* if(dat->waitingForAcceptance) { + SetTimer(hwndDlg,1,1000,NULL); + dat->waitingForAcceptance=0; } - */ + */ - switch(ack->result) { + switch (ack->result) { case ACKRESULT_INITIALISING: //SetFtStatus(hwndDlg, LPGENT("Initialising..."), FTS_TEXT); break; case ACKRESULT_CONNECTING: //SetFtStatus(hwndDlg, LPGENT("Connecting..."), FTS_TEXT); break; case ACKRESULT_CONNECTPROXY: //SetFtStatus(hwndDlg, LPGENT("Connecting to proxy..."), FTS_TEXT); break; @@ -343,7 +359,7 @@ int CSend::OnSend(void *obj, WPARAM wParam, LPARAM lParam){ break; case ACKRESULT_SUCCESS: self->Unhook(); - switch(ack->type) { + switch (ack->type) { case ACKTYPE_CHAT: break; case ACKTYPE_MESSAGE: @@ -353,8 +369,8 @@ int CSend::OnSend(void *obj, WPARAM wParam, LPARAM lParam){ self->DB_EventAdd((WORD)EVENTTYPE_URL); break; case ACKTYPE_FILE: - self->m_szEventMsg = (char*) mir_realloc(self->m_szEventMsg, sizeof(DWORD) + self->m_cbEventMsg); - memmove(self->m_szEventMsg+sizeof(DWORD), self->m_szEventMsg, self->m_cbEventMsg); + self->m_szEventMsg = (char*)mir_realloc(self->m_szEventMsg, sizeof(DWORD) + self->m_cbEventMsg); + memmove(self->m_szEventMsg + sizeof(DWORD), self->m_szEventMsg, self->m_cbEventMsg); self->m_cbEventMsg += sizeof(DWORD); self->DB_EventAdd((WORD)EVENTTYPE_FILE); break; @@ -373,16 +389,17 @@ void CSend::DB_EventAdd(WORD EventType) dbei.flags = DBEF_SENT; dbei.timestamp = time(NULL); dbei.flags |= DBEF_UTF; - dbei.cbBlob= m_cbEventMsg; + dbei.cbBlob = m_cbEventMsg; dbei.pBlob = (PBYTE)m_szEventMsg; db_event_add(m_hContact, &dbei); } //--------------------------------------------------------------------------- -void CSend::Error(LPCTSTR pszFormat, ...) { +void CSend::Error(LPCTSTR pszFormat, ...) +{ TCHAR tszMsg[MAX_SECONDLINE]; - mir_sntprintf(tszMsg, _countof(tszMsg),_T("%s - %s") ,_T(SZ_SENDSS), TranslateT("Error")); + mir_sntprintf(tszMsg, _countof(tszMsg), _T("%s - %s"), _T(SZ_SENDSS), TranslateT("Error")); mir_free(m_ErrorTitle), m_ErrorTitle = mir_tstrdup(tszMsg); va_list vl; @@ -392,377 +409,401 @@ void CSend::Error(LPCTSTR pszFormat, ...) { mir_free(m_ErrorMsg), m_ErrorMsg = mir_tstrdup(tszMsg); memset(&m_box, 0, sizeof(MSGBOX)); - m_box.cbSize = sizeof(MSGBOX); - m_box.hParent = NULL; - m_box.hiLogo = GetIcon(ICO_MAIN); - m_box.hiMsg = NULL; - m_box.ptszTitle = m_ErrorTitle; - m_box.ptszMsg = m_ErrorMsg; - m_box.uType = MB_OK|MB_ICON_ERROR; + m_box.cbSize = sizeof(MSGBOX); + m_box.hParent = NULL; + m_box.hiLogo = GetIcon(ICO_MAIN); + m_box.hiMsg = NULL; + m_box.ptszTitle = m_ErrorTitle; + m_box.ptszMsg = m_ErrorMsg; + m_box.uType = MB_OK | MB_ICON_ERROR; } //--------------------------------------------------------------------------- -void CSend::Exit(unsigned int Result) { - if(!m_bSilent){ +void CSend::Exit(unsigned int Result) +{ + if (!m_bSilent) { bool err = true; - switch(Result) { - case CSEND_DIALOG: - SkinPlaySound("FileDone"); - DialogBoxParam(g_hSendSS, MAKEINTRESOURCE(IDD_UResultForm),0, ResultDialogProc,(LPARAM)this); - err = false; - break; - case ACKRESULT_SUCCESS: - case GC_RESULT_SUCCESS: - SkinPlaySound("FileDone"); - err = false; - break; - case ACKRESULT_DENIED: - SkinPlaySound("FileDenied"); - Error(_T("%s (%i):\nFile transfer denied."),TranslateTS(m_pszSendTyp),Result); - MsgBoxService(NULL, (LPARAM)&m_box); - err = false; - break; - case GC_RESULT_WRONGVER: //.You appear to be using the wrong version of GC API. - Error(_T("%s (%i):\nYou appear to be using the wrong version of GC API"),TranslateT("GCHAT error"),Result); - break; - case GC_RESULT_ERROR: // An internal GC error occurred. - Error(_T("%s (%i):\nAn internal GC error occurred."),TranslateT("GCHAT error"),Result); - break; - case GC_RESULT_NOSESSION: // contact has no open GC session - Error(_T("%s (%i):\nContact has no open GC session."),TranslateT("GCHAT error"),Result); - break; - case ACKRESULT_FAILED: - default: - break; + switch (Result) { + case CSEND_DIALOG: + SkinPlaySound("FileDone"); + DialogBoxParam(g_hSendSS, MAKEINTRESOURCE(IDD_UResultForm), 0, ResultDialogProc, (LPARAM)this); + err = false; + break; + case ACKRESULT_SUCCESS: + case GC_RESULT_SUCCESS: + SkinPlaySound("FileDone"); + err = false; + break; + case ACKRESULT_DENIED: + SkinPlaySound("FileDenied"); + Error(_T("%s (%i):\nFile transfer denied."), TranslateTS(m_pszSendTyp), Result); + MsgBoxService(NULL, (LPARAM)&m_box); + err = false; + break; + case GC_RESULT_WRONGVER: //.You appear to be using the wrong version of GC API. + Error(_T("%s (%i):\nYou appear to be using the wrong version of GC API"), TranslateT("GCHAT error"), Result); + break; + case GC_RESULT_ERROR: // An internal GC error occurred. + Error(_T("%s (%i):\nAn internal GC error occurred."), TranslateT("GCHAT error"), Result); + break; + case GC_RESULT_NOSESSION: // contact has no open GC session + Error(_T("%s (%i):\nContact has no open GC session."), TranslateT("GCHAT error"), Result); + break; + case ACKRESULT_FAILED: + default: + break; } - if(err){ + if (err) { SkinPlaySound("FileFailed"); - if(m_ErrorMsg) MsgBoxService(NULL, (LPARAM)&m_box); + if (m_ErrorMsg) MsgBoxService(NULL, (LPARAM)&m_box); else MsgErr(NULL, LPGENT("An unknown error has occurred.")); } } - if(m_pszFile && *m_pszFile && m_bDeleteAfterSend && m_EnableItem&SS_DLG_DELETEAFTERSSEND) { - DeleteFile(m_pszFile), m_pszFile=NULL; + if (m_pszFile && *m_pszFile && m_bDeleteAfterSend && m_EnableItem&SS_DLG_DELETEAFTERSSEND) { + DeleteFile(m_pszFile), m_pszFile = NULL; } - if(m_bAsync) + if (m_bAsync) delete this;/// deletes derived class since destructor is virtual (which also auto-calls base dtor) } /// helper functions used for HTTP uploads //--------------------------------------------------------------------------- #define snprintf _snprintf -const char* CSend::GetHTMLContent(char* str, const char* startTag, const char* endTag) { - char* begin=strstr(str,startTag); - if(!begin) return NULL; - begin+=mir_strlen(startTag)-1; - for(; *begin!='>' && *begin; ++begin); - if(*begin){ - char* end=strstr(++begin,endTag); - if(end) *end=0; + +const char* CSend::GetHTMLContent(char* str, const char* startTag, const char* endTag) +{ + char* begin = strstr(str, startTag); + if (!begin) return NULL; + begin += mir_strlen(startTag) - 1; + for (; *begin != '>' && *begin; ++begin); + if (*begin) { + char* end = strstr(++begin, endTag); + if (end) *end = 0; } return begin; } -int JSON_ParseData_(const char** jsondata,size_t jsonlen,const char** rawdata){ - const char* c=*jsondata; - const char* jsonend=*jsondata+jsonlen; - int len=0; - *rawdata=NULL; - if(c==jsonend) + +int JSON_ParseData_(const char** jsondata, size_t jsonlen, const char** rawdata) +{ + const char* c = *jsondata; + const char* jsonend = *jsondata + jsonlen; + int len = 0; + *rawdata = NULL; + if (c == jsonend) return 0; - if(*c=='{'){ // scope (object) - *rawdata=c; - do{ - if(*c=='{') ++len; - else if(*c=='}') --len; - if(++c==jsonend) + if (*c == '{') { // scope (object) + *rawdata = c; + do { + if (*c == '{') ++len; + else if (*c == '}') --len; + if (++c == jsonend) return 0; - }while(len>0); - len=c-*rawdata; - if(*c==',') ++c; - }else if(*c=='"' || *c=='\''){ // string - char needle=*c; - if(++c==jsonend) + } while (len > 0); + len = c - *rawdata; + if (*c == ',') ++c; + } + else if (*c == '"' || *c == '\'') { // string + char needle = *c; + if (++c == jsonend) return 0; - *rawdata=c; - do{ - if(c==jsonend || (*c=='\\' && ++c==jsonend)) + *rawdata = c; + do { + if (c == jsonend || (*c == '\\' && ++c == jsonend)) return 0; - }while(*c++!=needle); - len=c-*rawdata-1; - if(*c==',') ++c; - }else{ // other - for(*rawdata=c; c<jsonend && *c++!=','; ); - len=c-*rawdata; - if(c[-1]==',') --len; + } while (*c++ != needle); + len = c - *rawdata - 1; + if (*c == ',') ++c; + } + else { // other + for (*rawdata = c; c < jsonend && *c++ != ',';); + len = c - *rawdata; + if (c[-1] == ',') --len; } - *jsondata=c; + *jsondata = c; return len; } -int JSON_Get_(const char* json, size_t jsonlen, const char* variable, const char** value) { + +int JSON_Get_(const char* json, size_t jsonlen, const char* variable, const char** value) +{ char needle[32]; const char* needlechild; char var[32]; char* tmp; const char* c; - const char* jsonend=json+jsonlen; + const char* jsonend = json + jsonlen; /// get needle - if(!jsonlen || *json!='{') + if (!jsonlen || *json != '{') return 0; - for(tmp=needle,c=*variable=='['?variable+1:variable; *c!='[' && *c!=']'; ++c){ - if(c==jsonend) + for (tmp = needle, c = *variable == '[' ? variable + 1 : variable; *c != '[' && *c != ']'; ++c) { + if (c == jsonend) return 0; - if(tmp<needle+sizeof(needle)-1) *tmp++=*c; + if (tmp < needle + sizeof(needle) - 1) *tmp++ = *c; } - *tmp='\0'; + *tmp = '\0'; /// get child needle (if any) - if(*c==']') ++c; - if(c==jsonend) + if (*c == ']') ++c; + if (c == jsonend) return 0; - needlechild=c; + needlechild = c; /// parse JSON - for(c=json+1; c<jsonend && (*c=='"' || *c=='\''); ){ - for(++c,tmp=var; c<jsonend && (*c!='"' && *c!='\''); ++c) - if(tmp<var+sizeof(var)-1) *tmp++=*c; - *tmp='\0'; - if(c+2>=jsonend || *++c!=':') break; + for (c = json + 1; c < jsonend && (*c == '"' || *c == '\'');) { + for (++c, tmp = var; c < jsonend && (*c != '"' && *c != '\''); ++c) + if (tmp < var + sizeof(var) - 1) *tmp++ = *c; + *tmp = '\0'; + if (c + 2 >= jsonend || *++c != ':') break; /// read data ++c; - if(!mir_strcmp(var,needle)){ - int datalen=JSON_ParseData_(&c,jsonend-c,value); - if(!datalen) + if (!mir_strcmp(var, needle)) { + int datalen = JSON_ParseData_(&c, jsonend - c, value); + if (!datalen) return 0; - if(*needlechild && **value=='{'){ // we need a child value, parse child object - return JSON_Get_(*value,datalen,needlechild,value); + if (*needlechild && **value == '{') { // we need a child value, parse child object + return JSON_Get_(*value, datalen, needlechild, value); } return datalen; - }else{ - JSON_ParseData_(&c,jsonend-c,value); + } + else { + JSON_ParseData_(&c, jsonend - c, value); } } - *value=NULL; + *value = NULL; return 0; } -int CSend::GetJSONString(const char* json, size_t jsonlen, const char* variable, char* value, size_t valuesize) { - if(!jsonlen || !valuesize) + +int CSend::GetJSONString(const char* json, size_t jsonlen, const char* variable, char* value, size_t valuesize) +{ + if (!jsonlen || !valuesize) return 0; const char* rawvalue; - int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); - if(rawlen){ - size_t out=0; + int rawlen = JSON_Get_(json, jsonlen, variable, &rawvalue); + if (rawlen) { + size_t out = 0; --valuesize; /// copy & parse escape sequences - for(int in=0; in<rawlen && out<valuesize; ++in,++out){ - if(rawvalue[in]=='\\'){ - if(++in==rawlen) + for (int in = 0; in < rawlen && out < valuesize; ++in, ++out) { + if (rawvalue[in] == '\\') { + if (++in == rawlen) break; - switch(rawvalue[in]){ - case 's': value[out]=' '; break; - case 't': value[out]='\t'; break; - case 'n': value[out]='\n'; break; - case 'r': value[out]='\r'; break; - default: value[out]=rawvalue[in]; + switch (rawvalue[in]) { + case 's': value[out] = ' '; break; + case 't': value[out] = '\t'; break; + case 'n': value[out] = '\n'; break; + case 'r': value[out] = '\r'; break; + default: value[out] = rawvalue[in]; } continue; } - value[out]=rawvalue[in]; + value[out] = rawvalue[in]; } - value[out]='\0'; + value[out] = '\0'; return 1; } - *value='\0'; + *value = '\0'; return 0; } -int CSend::GetJSONInteger(const char* json, size_t jsonlen, const char* variable,int defvalue) { + +int CSend::GetJSONInteger(const char* json, size_t jsonlen, const char* variable, int defvalue) +{ const char* rawvalue; - int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); - if(rawlen){ - defvalue=0; - for(int offset=0; offset<rawlen; ++offset){ - if(rawvalue[offset]<'0' || rawvalue[offset]>'9') break; - defvalue*=10; - defvalue+=rawvalue[offset]-'0'; + int rawlen = JSON_Get_(json, jsonlen, variable, &rawvalue); + if (rawlen) { + defvalue = 0; + for (int offset = 0; offset < rawlen; ++offset) { + if (rawvalue[offset]<'0' || rawvalue[offset]>'9') break; + defvalue *= 10; + defvalue += rawvalue[offset] - '0'; } } return defvalue; } -bool CSend::GetJSONBool(const char* json, size_t jsonlen, const char* variable) { + +bool CSend::GetJSONBool(const char* json, size_t jsonlen, const char* variable) +{ const char* rawvalue; - int rawlen=JSON_Get_(json,jsonlen,variable,&rawvalue); - if(rawlen){ - if(rawlen==4 && !memcmp(rawvalue,"true",4)) + int rawlen = JSON_Get_(json, jsonlen, variable, &rawvalue); + if (rawlen) { + if (rawlen == 4 && !memcmp(rawvalue, "true", 4)) return true; - if(*rawvalue>'0' && *rawvalue<='9') + if (*rawvalue > '0' && *rawvalue <= '9') return true; } return false; } -static void HTTPFormAppendData(NETLIBHTTPREQUEST* nlhr, size_t* dataMax, char** dataPos, const char* data,size_t len){ - nlhr->dataLength=(*dataPos-nlhr->pData); - if(nlhr->dataLength+len >= *dataMax){ - *dataPos=nlhr->pData; - *dataMax+=0x1000+0x1000*(len>>12); - nlhr->pData=(char*)mir_realloc(nlhr->pData,*dataMax); - if(!nlhr->pData) mir_free(*dataPos); - *dataPos=nlhr->pData; - if(!*dataPos) +static void HTTPFormAppendData(NETLIBHTTPREQUEST* nlhr, size_t* dataMax, char** dataPos, const char* data, size_t len) +{ + nlhr->dataLength = (*dataPos - nlhr->pData); + if (nlhr->dataLength + len >= *dataMax) { + *dataPos = nlhr->pData; + *dataMax += 0x1000 + 0x1000 * (len >> 12); + nlhr->pData = (char*)mir_realloc(nlhr->pData, *dataMax); + if (!nlhr->pData) mir_free(*dataPos); + *dataPos = nlhr->pData; + if (!*dataPos) return; - *dataPos+=nlhr->dataLength; + *dataPos += nlhr->dataLength; } - if(data){ - memcpy(*dataPos,data,sizeof(char)*len); *dataPos+=len; + if (data) { + memcpy(*dataPos, data, sizeof(char)*len); *dataPos += len; nlhr->dataLength += (int)len; // not necessary } } + void CSend::HTTPFormDestroy(NETLIBHTTPREQUEST* nlhr) { - mir_free(nlhr->headers[0].szValue), nlhr->headers[0].szValue=NULL; - mir_free(nlhr->headers), nlhr->headers=NULL; - mir_free(nlhr->pData), nlhr->pData=NULL; + mir_free(nlhr->headers[0].szValue), nlhr->headers[0].szValue = NULL; + mir_free(nlhr->headers), nlhr->headers = NULL; + mir_free(nlhr->pData), nlhr->pData = NULL; } -int CSend::HTTPFormCreate(NETLIBHTTPREQUEST* nlhr,int requestType,char* url,HTTPFormData* frm,size_t frmNum) + +int CSend::HTTPFormCreate(NETLIBHTTPREQUEST* nlhr, int requestType, char* url, HTTPFormData* frm, size_t frmNum) { char boundary[16]; - memcpy(boundary,"--M461C/",8); + memcpy(boundary, "--M461C/", 8); { - union{ + union + { DWORD num; unsigned char cr[4]; - };num=GetTickCount()^0x8000; - for(int i=0; i<4; ++i){ - unsigned char chcode=cr[i]>>4; - boundary[8+i*2]=(chcode<0x0a ? '0' : 'a'-0x0a)+chcode; - chcode=cr[i]&0x0f; - boundary[9+i*2]=(chcode<0x0a ? '0' : 'a'-0x0a)+chcode; + }; num = GetTickCount() ^ 0x8000; + for (int i = 0; i < 4; ++i) { + unsigned char chcode = cr[i] >> 4; + boundary[8 + i * 2] = (chcode < 0x0a ? '0' : 'a' - 0x0a) + chcode; + chcode = cr[i] & 0x0f; + boundary[9 + i * 2] = (chcode < 0x0a ? '0' : 'a' - 0x0a) + chcode; } } - nlhr->cbSize =sizeof(NETLIBHTTPREQUEST); - nlhr->requestType =requestType; - nlhr->flags =NLHRF_HTTP11; - if(!strncmp(url,"https://",8)) nlhr->flags|=NLHRF_SSL; - nlhr->szUrl =url; - nlhr->headersCount =3; - for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ - if(!(iter->flags&HTTPFF_HEADER)) break; + nlhr->cbSize = sizeof(NETLIBHTTPREQUEST); + nlhr->requestType = requestType; + nlhr->flags = NLHRF_HTTP11; + if (!strncmp(url, "https://", 8)) nlhr->flags |= NLHRF_SSL; + nlhr->szUrl = url; + nlhr->headersCount = 3; + for (HTTPFormData* iter = frm, *end = frm + frmNum; iter != end; ++iter) { + if (!(iter->flags&HTTPFF_HEADER)) break; ++nlhr->headersCount; } - nlhr->headers =(NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr->headersCount); + nlhr->headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr->headersCount); { - char* contenttype=(char*)mir_alloc(sizeof(char)*(30+1+sizeof(boundary))); - memcpy(contenttype,"multipart/form-data; boundary=",30); - memcpy(contenttype+30,boundary,sizeof(boundary)); - contenttype[30+sizeof(boundary)]='\0'; - nlhr->headers[0].szName ="Content-Type"; - nlhr->headers[0].szValue =contenttype; - nlhr->headers[1].szName ="User-Agent"; - nlhr->headers[1].szValue =__USER_AGENT_STRING; - nlhr->headers[2].szName ="Accept-Language"; - nlhr->headers[2].szValue ="en-us,en;q=0.8"; - int i=3; - for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ - if(!(iter->flags&HTTPFF_HEADER)) break; - nlhr->headers[i].szName=(char*)iter->name; - nlhr->headers[i++].szValue=(char*)iter->value_str; + char* contenttype = (char*)mir_alloc(sizeof(char)*(30 + 1 + sizeof(boundary))); + memcpy(contenttype, "multipart/form-data; boundary=", 30); + memcpy(contenttype + 30, boundary, sizeof(boundary)); + contenttype[30 + sizeof(boundary)] = '\0'; + nlhr->headers[0].szName = "Content-Type"; + nlhr->headers[0].szValue = contenttype; + nlhr->headers[1].szName = "User-Agent"; + nlhr->headers[1].szValue = __USER_AGENT_STRING; + nlhr->headers[2].szName = "Accept-Language"; + nlhr->headers[2].szValue = "en-us,en;q=0.8"; + int i = 3; + for (HTTPFormData* iter = frm, *end = frm + frmNum; iter != end; ++iter) { + if (!(iter->flags&HTTPFF_HEADER)) break; + nlhr->headers[i].szName = (char*)iter->name; + nlhr->headers[i++].szValue = (char*)iter->value_str; } } - char* dataPos=nlhr->pData; - size_t dataMax=0; - for(HTTPFormData* iter=frm,* end=frm+frmNum; iter!=end; ++iter){ - if(iter->flags&HTTPFF_HEADER) continue; - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,2+sizeof(boundary)+40); - memset(dataPos,'-',2); dataPos+=2; - memcpy(dataPos,boundary,sizeof(boundary)); dataPos+=sizeof(boundary); - memcpy(dataPos,"\r\nContent-Disposition: form-data; name=\"",40); dataPos+=40; - size_t namelen=mir_strlen(iter->name), valuelen; - if(!(iter->flags&HTTPFF_INT)) - valuelen=mir_strlen(iter->value_str); - if(iter->flags&HTTPFF_FILE){ - const char* filename =strrchr(iter->value_str,'\\'); - if(!filename) filename =strrchr(iter->value_str,'/'); - if(!filename) filename =iter->value_str; + char* dataPos = nlhr->pData; + size_t dataMax = 0; + for (HTTPFormData* iter = frm, *end = frm + frmNum; iter != end; ++iter) { + if (iter->flags&HTTPFF_HEADER) continue; + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, 2 + sizeof(boundary) + 40); + memset(dataPos, '-', 2); dataPos += 2; + memcpy(dataPos, boundary, sizeof(boundary)); dataPos += sizeof(boundary); + memcpy(dataPos, "\r\nContent-Disposition: form-data; name=\"", 40); dataPos += 40; + size_t namelen = mir_strlen(iter->name), valuelen = 0; + if (!(iter->flags&HTTPFF_INT)) + valuelen = mir_strlen(iter->value_str); + if (iter->flags&HTTPFF_FILE) { + const char* filename = strrchr(iter->value_str, '\\'); + if (!filename) filename = strrchr(iter->value_str, '/'); + if (!filename) filename = iter->value_str; else ++filename; - valuelen=mir_strlen(filename); - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,namelen+13+valuelen+17); - memcpy(dataPos,iter->name,namelen); dataPos+=namelen; - memcpy(dataPos,"\"; filename=\"",13); dataPos+=13; - memcpy(dataPos,filename,valuelen); dataPos+=valuelen; - memcpy(dataPos,"\"\r\nContent-Type: ",17); dataPos+=17; + valuelen = mir_strlen(filename); + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, namelen + 13 + valuelen + 17); + memcpy(dataPos, iter->name, namelen); dataPos += namelen; + memcpy(dataPos, "\"; filename=\"", 13); dataPos += 13; + memcpy(dataPos, filename, valuelen); dataPos += valuelen; + memcpy(dataPos, "\"\r\nContent-Type: ", 17); dataPos += 17; /// add mime type - const char* mime="application/octet-stream"; - const char* fileext=strrchr(filename,'.'); - if(fileext){ - if(!mir_strcmp(fileext,".jpg") || !mir_strcmp(fileext,".jpeg") || !mir_strcmp(fileext,".jpe")) - mime="image/jpeg"; - else if(!mir_strcmp(fileext,".bmp")) - mime="image/bmp"; - else if(!mir_strcmp(fileext,".png")) - mime="image/png"; - else if(!mir_strcmp(fileext,".gif")) - mime="image/gif"; - else if(!mir_strcmp(fileext,".tif") || !mir_strcmp(fileext,".tiff")) - mime="image/tiff"; + const char* mime = "application/octet-stream"; + const char* fileext = strrchr(filename, '.'); + if (fileext) { + if (!mir_strcmp(fileext, ".jpg") || !mir_strcmp(fileext, ".jpeg") || !mir_strcmp(fileext, ".jpe")) + mime = "image/jpeg"; + else if (!mir_strcmp(fileext, ".bmp")) + mime = "image/bmp"; + else if (!mir_strcmp(fileext, ".png")) + mime = "image/png"; + else if (!mir_strcmp(fileext, ".gif")) + mime = "image/gif"; + else if (!mir_strcmp(fileext, ".tif") || !mir_strcmp(fileext, ".tiff")) + mime = "image/tiff"; } - HTTPFormAppendData(nlhr,&dataMax,&dataPos,mime,mir_strlen(mime)); - HTTPFormAppendData(nlhr,&dataMax,&dataPos,"\r\n\r\n",4); + HTTPFormAppendData(nlhr, &dataMax, &dataPos, mime, mir_strlen(mime)); + HTTPFormAppendData(nlhr, &dataMax, &dataPos, "\r\n\r\n", 4); /// add file content - size_t filesize=0; - FILE* fp=fopen(iter->value_str,"rb"); - if(fp){ - fseek(fp,0,SEEK_END); - filesize=ftell(fp); fseek(fp,0,SEEK_SET); - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,filesize+2); - if(fread(dataPos,1,filesize,fp)!=filesize){ - fclose(fp), fp=NULL; + size_t filesize = 0; + FILE* fp = fopen(iter->value_str, "rb"); + if (fp) { + fseek(fp, 0, SEEK_END); + filesize = ftell(fp); fseek(fp, 0, SEEK_SET); + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, filesize + 2); + if (fread(dataPos, 1, filesize, fp) != filesize) { + fclose(fp), fp = NULL; } } - if(!fp){ + if (!fp) { HTTPFormDestroy(nlhr); Error(_T("Error occurred when opening local file.\nAborting file upload...")); Exit(ACKRESULT_FAILED); return 1; - }else + } + else fclose(fp); - dataPos+=filesize; - memcpy(dataPos,"\r\n",2); dataPos+=2; - }else if(iter->flags&HTTPFF_8BIT){ - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,namelen+38+valuelen+2); - memcpy(dataPos,iter->name,namelen); dataPos+=namelen; - memcpy(dataPos,"\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n",38); dataPos+=38; - memcpy(dataPos,iter->value_str,valuelen); dataPos+=valuelen; - memcpy(dataPos,"\r\n",2); dataPos+=2; - }else if(iter->flags&HTTPFF_INT){ - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,namelen+5+17/*max numbers*/+2); - memcpy(dataPos,iter->name,namelen); dataPos+=namelen; - memcpy(dataPos,"\"\r\n\r\n",5); dataPos+=5; - int ret=snprintf(dataPos,17,"%Id",iter->value_int); - if(ret<17 && ret>0) dataPos+=ret; - memcpy(dataPos,"\r\n",2); dataPos+=2; - }else{ - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,namelen+5+valuelen+2); - memcpy(dataPos,iter->name,namelen); dataPos+=namelen; - memcpy(dataPos,"\"\r\n\r\n",5); dataPos+=5; - memcpy(dataPos,iter->value_str,valuelen); dataPos+=valuelen; - memcpy(dataPos,"\r\n",2); dataPos+=2; + dataPos += filesize; + memcpy(dataPos, "\r\n", 2); dataPos += 2; + } + else if (iter->flags&HTTPFF_8BIT) { + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, namelen + 38 + valuelen + 2); + memcpy(dataPos, iter->name, namelen); dataPos += namelen; + memcpy(dataPos, "\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n", 38); dataPos += 38; + memcpy(dataPos, iter->value_str, valuelen); dataPos += valuelen; + memcpy(dataPos, "\r\n", 2); dataPos += 2; + } + else if (iter->flags&HTTPFF_INT) { + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, namelen + 5 + 17/*max numbers*/ + 2); + memcpy(dataPos, iter->name, namelen); dataPos += namelen; + memcpy(dataPos, "\"\r\n\r\n", 5); dataPos += 5; + int ret = snprintf(dataPos, 17, "%Id", iter->value_int); + if (ret < 17 && ret>0) dataPos += ret; + memcpy(dataPos, "\r\n", 2); dataPos += 2; + } + else { + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, namelen + 5 + valuelen + 2); + memcpy(dataPos, iter->name, namelen); dataPos += namelen; + memcpy(dataPos, "\"\r\n\r\n", 5); dataPos += 5; + memcpy(dataPos, iter->value_str, valuelen); dataPos += valuelen; + memcpy(dataPos, "\r\n", 2); dataPos += 2; } } - HTTPFormAppendData(nlhr,&dataMax,&dataPos,NULL,2+sizeof(boundary)+4); - memset(dataPos,'-',2); dataPos+=2; - memcpy(dataPos,boundary,sizeof(boundary)); dataPos+=sizeof(boundary); - memcpy(dataPos,"--\r\n",4); dataPos+=4; - nlhr->dataLength=dataPos-nlhr->pData; - #ifdef _DEBUG /// print request content to "_sendss_tmp" file for debugging + HTTPFormAppendData(nlhr, &dataMax, &dataPos, NULL, 2 + sizeof(boundary) + 4); + memset(dataPos, '-', 2); dataPos += 2; + memcpy(dataPos, boundary, sizeof(boundary)); dataPos += sizeof(boundary); + memcpy(dataPos, "--\r\n", 4); dataPos += 4; + nlhr->dataLength = dataPos - nlhr->pData; +#ifdef _DEBUG /// print request content to "_sendss_tmp" file for debugging { - FILE* fp=fopen("_sendss_tmp","wb"); - if(fp){ - fprintf(fp,"--Target-- %s\n",nlhr->szUrl); - for(int i=0; i<nlhr->headersCount; ++i){ - fprintf(fp,"%s: %s\n",nlhr->headers[i].szName,nlhr->headers[i].szValue); + FILE* fp = fopen("_sendss_tmp", "wb"); + if (fp) { + fprintf(fp, "--Target-- %s\n", nlhr->szUrl); + for (int i = 0; i < nlhr->headersCount; ++i) { + fprintf(fp, "%s: %s\n", nlhr->headers[i].szName, nlhr->headers[i].szValue); } - fprintf(fp,"\n\n"); - fwrite(nlhr->pData,1,nlhr->dataLength,fp); + fprintf(fp, "\n\n"); + fwrite(nlhr->pData, 1, nlhr->dataLength, fp); fclose(fp); } } - #endif // _DEBUG +#endif // _DEBUG return 0; } diff --git a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp index b6eaf6764f..507d61497a 100644 --- a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp +++ b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp @@ -31,18 +31,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- CSendDropbox::CSendDropbox(HWND Owner, MCONTACT hContact, bool bAsync) -: CSend(Owner, hContact, bAsync){ -/// @todo : re-enable SS_DLG_DELETEAFTERSSEND with full implemention of Dropbox upload with progress, msg and sounds + : CSend(Owner, hContact, bAsync) +{ + /// @todo : re-enable SS_DLG_DELETEAFTERSSEND with full implemention of Dropbox upload with progress, msg and sounds m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND/* | SS_DLG_DELETEAFTERSSEND*/; m_pszSendTyp = LPGENT("Dropbox transfer"); } -CSendDropbox::~CSendDropbox(){ +CSendDropbox::~CSendDropbox() +{ } //--------------------------------------------------------------------------- -int CSendDropbox::Send() { - if(!m_bAsync){ + +int CSendDropbox::Send() +{ + if (!m_bAsync) { SendThread(); return 1; } @@ -52,22 +56,23 @@ int CSendDropbox::Send() { //--------------------------------------------------------------------------- - -void CSendDropbox::SendThread() { -/// @todo : SS_DLG_DESCRIPTION and SS_DLG_DELETEAFTERSSEND are of no use as of now since we don't track upload progress - INT_PTR ret=0; - if(!m_hContact) +void CSendDropbox::SendThread() +{ + /// @todo : SS_DLG_DESCRIPTION and SS_DLG_DELETEAFTERSSEND are of no use as of now since we don't track upload progress + INT_PTR ret = 0; + if (!m_hContact) SetContact(db_find_first("Dropbox")); - if(m_hContact) + if (m_hContact) ret = CallService(MS_DROPBOX_SEND_FILE, (WPARAM)m_hContact, (LPARAM)m_pszFile); - if(!ret) { - Error(LPGENT("%s (%i):\nCould not add a share to the Dropbox plugin."),TranslateTS(m_pszSendTyp),ret); + if (!ret) { + Error(LPGENT("%s (%i):\nCould not add a share to the Dropbox plugin."), TranslateTS(m_pszSendTyp), ret); Exit(ACKRESULT_FAILED); return; } - m_bSilent=true; + m_bSilent = true; Exit(ACKRESULT_SUCCESS); } -void CSendDropbox::SendThreadWrapper(void * Obj) { +void CSendDropbox::SendThreadWrapper(void * Obj) +{ reinterpret_cast<CSendDropbox*>(Obj)->SendThread(); } diff --git a/plugins/SendScreenshotPlus/src/CSendEmail.cpp b/plugins/SendScreenshotPlus/src/CSendEmail.cpp index ee5628e420..548fa055cf 100644 --- a/plugins/SendScreenshotPlus/src/CSendEmail.cpp +++ b/plugins/SendScreenshotPlus/src/CSendEmail.cpp @@ -30,18 +30,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" //--------------------------------------------------------------------------- + CSendEmail::CSendEmail(HWND Owner, MCONTACT hContact, bool /*bAsync*/) -: CSend(Owner, hContact, true){ - m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_DELETEAFTERSSEND; // SS_DLG_AUTOSEND | ; - m_pszSendTyp = LPGENT("Email transfer"); - m_pszFileA = NULL; - m_pszFileName = NULL; - m_Email = NULL; - m_FriendlyName = NULL; - m_Subject = NULL; + : CSend(Owner, hContact, true) +{ + m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_DELETEAFTERSSEND; // SS_DLG_AUTOSEND | ; + m_pszSendTyp = LPGENT("Email transfer"); + m_pszFileA = NULL; + m_pszFileName = NULL; + m_Email = NULL; + m_FriendlyName = NULL; + m_Subject = NULL; } -CSendEmail::~CSendEmail(){ +CSendEmail::~CSendEmail() +{ mir_free(m_pszFileA); mir_free(m_pszFileName); mir_free(m_Email); @@ -50,9 +53,10 @@ CSendEmail::~CSendEmail(){ } //--------------------------------------------------------------------------- + int CSendEmail::Send() { - if(!m_hContact) return 1; + if (!m_hContact) return 1; mir_free(m_pszFileName); m_pszFileName = GetFileNameA(m_pszFile); @@ -60,19 +64,19 @@ int CSendEmail::Send() m_pszFileA = mir_t2a(m_pszFile); -// AnsiString Email, Subject, FriendlyName; - CONTACTINFO ci={0}; + // AnsiString Email, Subject, FriendlyName; + CONTACTINFO ci = { 0 }; ci.cbSize = sizeof(ci); ci.hContact = m_hContact; ci.szProto = m_pszProto; //ci.dwFlag = CNF_TCHAR; ci.dwFlag = CNF_EMAIL | CNF_TCHAR; - CallService(MS_CONTACT_GETCONTACTINFO,0,(LPARAM)&ci); + CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM)&ci); m_Email = mir_t2a(ci.pszVal); ci.dwFlag = CNF_DISPLAY | CNF_TCHAR; - CallService(MS_CONTACT_GETCONTACTINFO,0,(LPARAM)&ci); + CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM)&ci); m_FriendlyName = mir_t2a(ci.pszVal); mir_free(ci.pszVal); @@ -86,14 +90,15 @@ int CSendEmail::Send() return 0; } -void CSendEmail::SendThread() { +void CSendEmail::SendThread() +{ //This code based on SentTo.exe application. //The default mail client for Simple MAPI or MAPI calls is defined by the //HKLM\Software\Clients\Mail::(default) registry value. MapiFileDesc arrfileDesc[1]; - typedef ULONG (FAR PASCAL *MAPIFUNC)(LHANDLE,ULONG,lpMapiMessage,FLAGS,ULONG); + typedef ULONG(FAR PASCAL *MAPIFUNC)(LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG); MapiMessage Msg; MAPIFUNC lpMAPISendMail; @@ -131,7 +136,7 @@ void CSendEmail::SendThread() { recip.ulReserved = 0; recip.ulRecipClass = MAPI_TO; - if (m_FriendlyName && m_FriendlyName[0]!= NULL) { + if (m_FriendlyName && m_FriendlyName[0] != NULL) { recip.lpszName = m_FriendlyName; //friendly name set to contact's name } else { @@ -144,61 +149,62 @@ void CSendEmail::SendThread() { Msg.lpRecips = &recip; try { - int res = lpMAPISendMail(NULL, NULL, &Msg, MAPI_LOGON_UI|MAPI_DIALOG, 0); + int res = lpMAPISendMail(NULL, NULL, &Msg, MAPI_LOGON_UI | MAPI_DIALOG, 0); ::FreeLibrary(hMAPILib); TCHAR* err; switch (res) { - case SUCCESS_SUCCESS: - //The call succeeded and the message was sent. - Exit(ACKRESULT_SUCCESS); return; + case SUCCESS_SUCCESS: + //The call succeeded and the message was sent. + Exit(ACKRESULT_SUCCESS); return; // No message was sent - case MAPI_E_AMBIGUOUS_RECIPIENT: - err = LPGENT("A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set"); - break; - case MAPI_E_ATTACHMENT_NOT_FOUND: - err = LPGENT("The specified attachment was not found"); - break; - case MAPI_E_ATTACHMENT_OPEN_FAILURE: - err = LPGENT("The specified attachment could not be opened"); - break; - case MAPI_E_BAD_RECIPTYPE: - err = LPGENT("The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC"); - break; - case MAPI_E_FAILURE: - err = LPGENT("One or more unspecified errors occurred"); - break; - case MAPI_E_INSUFFICIENT_MEMORY: - err = LPGENT("There was insufficient memory to proceed"); - break; - case MAPI_E_INVALID_RECIPS: - err = LPGENT("One or more recipients were invalid or did not resolve to any address"); - break; - case MAPI_E_LOGIN_FAILURE: - err = LPGENT("There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed"); - break; - case MAPI_E_TEXT_TOO_LARGE: - err = LPGENT("The text in the message was too large"); - break; - case MAPI_E_TOO_MANY_FILES: - err = LPGENT("There were too many file attachments"); - break; - case MAPI_E_TOO_MANY_RECIPIENTS: - err = LPGENT("There were too many recipients"); - break; - case MAPI_E_UNKNOWN_RECIPIENT: - err = LPGENT("A recipient did not appear in the address list"); - break; - case MAPI_E_USER_ABORT: - err = LPGENT("The user canceled one of the dialog boxes"); - break; - default: - err = LPGENT("Unknown Error"); - break; + case MAPI_E_AMBIGUOUS_RECIPIENT: + err = LPGENT("A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set"); + break; + case MAPI_E_ATTACHMENT_NOT_FOUND: + err = LPGENT("The specified attachment was not found"); + break; + case MAPI_E_ATTACHMENT_OPEN_FAILURE: + err = LPGENT("The specified attachment could not be opened"); + break; + case MAPI_E_BAD_RECIPTYPE: + err = LPGENT("The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC"); + break; + case MAPI_E_FAILURE: + err = LPGENT("One or more unspecified errors occurred"); + break; + case MAPI_E_INSUFFICIENT_MEMORY: + err = LPGENT("There was insufficient memory to proceed"); + break; + case MAPI_E_INVALID_RECIPS: + err = LPGENT("One or more recipients were invalid or did not resolve to any address"); + break; + case MAPI_E_LOGIN_FAILURE: + err = LPGENT("There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed"); + break; + case MAPI_E_TEXT_TOO_LARGE: + err = LPGENT("The text in the message was too large"); + break; + case MAPI_E_TOO_MANY_FILES: + err = LPGENT("There were too many file attachments"); + break; + case MAPI_E_TOO_MANY_RECIPIENTS: + err = LPGENT("There were too many recipients"); + break; + case MAPI_E_UNKNOWN_RECIPIENT: + err = LPGENT("A recipient did not appear in the address list"); + break; + case MAPI_E_USER_ABORT: + err = LPGENT("The user canceled one of the dialog boxes"); + break; + default: + err = LPGENT("Unknown Error"); + break; } Error(SS_ERR_MAPI, res, err); Exit(ACKRESULT_FAILED); - } catch (...) { + } + catch (...) { ::FreeLibrary(hMAPILib); Error(SS_ERR_INIT, m_pszSendTyp); Exit(ACKRESULT_FAILED); @@ -206,7 +212,8 @@ void CSendEmail::SendThread() { } } -void CSendEmail::SendThreadWrapper(void * Obj) { +void CSendEmail::SendThreadWrapper(void * Obj) +{ reinterpret_cast<CSendEmail*>(Obj)->SendThread(); } diff --git a/plugins/SendScreenshotPlus/src/CSendFTPFile.cpp b/plugins/SendScreenshotPlus/src/CSendFTPFile.cpp index e1fa16f726..75dd81e1cb 100644 --- a/plugins/SendScreenshotPlus/src/CSendFTPFile.cpp +++ b/plugins/SendScreenshotPlus/src/CSendFTPFile.cpp @@ -29,23 +29,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- #include "stdafx.h" - //--------------------------------------------------------------------------- + CSendFTPFile::CSendFTPFile(HWND Owner, MCONTACT hContact, bool /*bAsync*/) -: CSend(Owner, hContact, true){ - m_EnableItem = 0 ; //SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; - m_pszSendTyp = LPGENT("FTPFile transfer"); - m_pszFileName = NULL; + : CSend(Owner, hContact, true) +{ + m_EnableItem = 0; //SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp = LPGENT("FTPFile transfer"); + m_pszFileName = NULL; } -CSendFTPFile::~CSendFTPFile(){ +CSendFTPFile::~CSendFTPFile() +{ mir_free(m_pszFileName); } //--------------------------------------------------------------------------- int CSendFTPFile::Send() { - if(!m_hContact) return 1; + if (!m_hContact) return 1; /********************************************************************************************* * Send file (files) to the FTP server and copy file URL * to message log or clipboard (according to plugin setting) @@ -58,20 +60,21 @@ int CSendFTPFile::Send() ********************************************************************************************/ mir_free(m_pszFileName); m_pszFileName = GetFileNameA(m_pszFile); - size_t size = sizeof(char)*(mir_strlen(m_pszFileName)+2); + size_t size = sizeof(char)*(mir_strlen(m_pszFileName) + 2); m_pszFileName = (char*)mir_realloc(m_pszFileName, size); - m_pszFileName[size-1] = NULL; + m_pszFileName[size - 1] = NULL; //start Send thread mir_forkthread(&CSendFTPFile::SendThreadWrapper, this); return 0; } -void CSendFTPFile::SendThread() { +void CSendFTPFile::SendThread() +{ - INT_PTR ret = FTPFileUploadA(m_hContact, FNUM_DEFAULT, FMODE_RAWFILE, &m_pszFileName,1); + INT_PTR ret = FTPFileUploadA(m_hContact, FNUM_DEFAULT, FMODE_RAWFILE, &m_pszFileName, 1); if (ret != 0) { - Error(LPGENT("%s (%i):\nCould not add a share to the FTP File plugin."),TranslateTS(m_pszSendTyp),ret); + Error(LPGENT("%s (%i):\nCould not add a share to the FTP File plugin."), TranslateTS(m_pszSendTyp), ret); Exit(ret); return; } @@ -84,7 +87,8 @@ void CSendFTPFile::SendThread() { Exit(ACKRESULT_FAILED); } -void CSendFTPFile::SendThreadWrapper(void * Obj) { +void CSendFTPFile::SendThreadWrapper(void * Obj) +{ reinterpret_cast<CSendFTPFile*>(Obj)->SendThread(); } diff --git a/plugins/SendScreenshotPlus/src/CSendFile.cpp b/plugins/SendScreenshotPlus/src/CSendFile.cpp index adaf83e63d..24e8bfb68f 100644 --- a/plugins/SendScreenshotPlus/src/CSendFile.cpp +++ b/plugins/SendScreenshotPlus/src/CSendFile.cpp @@ -31,16 +31,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- CSendFile::CSendFile(HWND Owner, MCONTACT hContact, bool /*bAsync*/) -: CSend(Owner, hContact, true){ - m_EnableItem = SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND | SS_DLG_DESCRIPTION; - m_pszSendTyp = LPGENT("File transfer"); + : CSend(Owner, hContact, true) +{ + m_EnableItem = SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND | SS_DLG_DESCRIPTION; + m_pszSendTyp = LPGENT("File transfer"); } -CSendFile::~CSendFile(){ +CSendFile::~CSendFile() +{ } //--------------------------------------------------------------------------- -int CSendFile::Send() { +int CSendFile::Send() +{ svcSendFileExit(); return 0; } diff --git a/plugins/SendScreenshotPlus/src/CSendHTTPServer.cpp b/plugins/SendScreenshotPlus/src/CSendHTTPServer.cpp index 2f50e7a6c5..8248afe514 100644 --- a/plugins/SendScreenshotPlus/src/CSendHTTPServer.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHTTPServer.cpp @@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- #include "stdafx.h" -INT_PTR (*g_MirCallService)(const char *, WPARAM, LPARAM)=NULL; +INT_PTR(*g_MirCallService)(const char *, WPARAM, LPARAM) = NULL; //INT_PTR (*CallService)(const char *,WPARAM,LPARAM); @@ -37,11 +37,11 @@ INT_PTR (*g_MirCallService)(const char *, WPARAM, LPARAM)=NULL; CSendHTTPServer::CSendHTTPServer(HWND Owner, MCONTACT hContact, bool /*bAsync*/) : CSend(Owner, hContact, true) { - m_EnableItem = SS_DLG_DESCRIPTION ; //| SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; - m_pszSendTyp = LPGENT("HTTPServer transfer"); - m_pszFileName = NULL; - m_fsi_pszSrvPath = NULL; - m_fsi_pszRealPath = NULL; + m_EnableItem = SS_DLG_DESCRIPTION; //| SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp = LPGENT("HTTPServer transfer"); + m_pszFileName = NULL; + m_fsi_pszSrvPath = NULL; + m_fsi_pszRealPath = NULL; } CSendHTTPServer::~CSendHTTPServer() @@ -54,7 +54,7 @@ CSendHTTPServer::~CSendHTTPServer() //--------------------------------------------------------------------------- int CSendHTTPServer::Send() { - if(!m_hContact) return 1; + if (!m_hContact) return 1; if (CallService(MS_HTTP_ACCEPT_CONNECTIONS, TRUE, 0) != 0) { Error(LPGENT("Could not start the HTTP Server plugin.")); Exit(ACKRESULT_FAILED); @@ -71,11 +71,10 @@ int CSendHTTPServer::Send() replaceStr(m_fsi_pszRealPath, _T2A(m_pszFile)); memset(&m_fsi, 0, sizeof(m_fsi)); - m_fsi.lStructSize = sizeof(STFileShareInfo); - m_fsi.pszSrvPath = m_fsi_pszSrvPath; - m_fsi.nMaxDownloads = -1; // -1 = infinite - m_fsi.pszRealPath = m_fsi_pszRealPath; - //m_fsi.dwOptions = NULL; //OPT_SEND_LINK only work on single chat; + m_fsi.lStructSize = sizeof(STFileShareInfo); + m_fsi.pszSrvPath = m_fsi_pszSrvPath; + m_fsi.nMaxDownloads = -1; // -1 = infinite + m_fsi.pszRealPath = m_fsi_pszRealPath; //start Send thread mir_forkthread(&CSendHTTPServer::SendThreadWrapper, this); @@ -96,14 +95,14 @@ void CSendHTTPServer::SendThread() } else { //original plugin - m_fsi.dwOptions = OPT_SEND_LINK; + m_fsi.dwOptions = OPT_SEND_LINK; //send DATA and wait for reply ret = CallService(MS_HTTP_ADD_CHANGE_REMOVE, (WPARAM)m_hContact, (LPARAM)&m_fsi); } if (ret != 0) { - Error(LPGENT("%s (%i):\nCould not add a share to the HTTP Server plugin."),TranslateTS(m_pszSendTyp),ret); + Error(LPGENT("%s (%i):\nCould not add a share to the HTTP Server plugin."), TranslateTS(m_pszSendTyp), ret); Exit(ret); return; } diff --git a/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp index a0f03d11eb..a1bdcc4fa1 100644 --- a/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHost_ImageShack.cpp @@ -31,36 +31,39 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- CSendHost_ImageShack::CSendHost_ImageShack(HWND Owner, MCONTACT hContact, bool bAsync) -: CSend(Owner, hContact, bAsync) { - m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; - m_pszSendTyp = LPGENT("Image upload"); + : CSend(Owner, hContact, bAsync) +{ + m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp = LPGENT("Image upload"); } -CSendHost_ImageShack::~CSendHost_ImageShack(){ +CSendHost_ImageShack::~CSendHost_ImageShack() +{ }; //--------------------------------------------------------------------------- -int CSendHost_ImageShack::Send() { - if(!g_hNetlibUser){ /// check Netlib +int CSendHost_ImageShack::Send() +{ + if (!g_hNetlibUser) { /// check Netlib Error(SS_ERR_INIT, m_pszSendTyp); Exit(ACKRESULT_FAILED); return !m_bAsync; } memset(&m_nlhr, 0, sizeof(m_nlhr)); - char* tmp; tmp=mir_t2a(m_pszFile); - HTTPFormData frm[]={ -// {"Referer",HTTPFORM_HEADER("http://www.imageshack.us/upload_api.php")}, - {"fileupload",HTTPFORM_FILE(tmp)}, + char* tmp; tmp = mir_t2a(m_pszFile); + HTTPFormData frm[] = { + // {"Referer",HTTPFORM_HEADER("http://www.imageshack.us/upload_api.php")}, + { "fileupload", HTTPFORM_FILE(tmp) }, //{"rembar","yes"},// no info bar on thumb - {"public","no"}, - {"key",HTTPFORM_8BIT(DEVKEY_IMAGESHACK)}, + { "public", "no" }, + { "key", HTTPFORM_8BIT(DEVKEY_IMAGESHACK) }, }; - int error=HTTPFormCreate(&m_nlhr,REQUEST_POST,"http://imageshack.us/upload_api.php",frm,sizeof(frm)/sizeof(HTTPFormData)); + int error = HTTPFormCreate(&m_nlhr, REQUEST_POST, "http://imageshack.us/upload_api.php", frm, sizeof(frm) / sizeof(HTTPFormData)); mir_free(tmp); - if(error) + if (error) return !m_bAsync; /// start upload thread - if(m_bAsync){ + if (m_bAsync) { mir_forkthread(&CSendHost_ImageShack::SendThreadWrapper, this); return 0; } @@ -68,52 +71,55 @@ int CSendHost_ImageShack::Send() { return 1; } -void CSendHost_ImageShack::SendThread() { +void CSendHost_ImageShack::SendThread() +{ /// send DATA and wait for m_nlreply - NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)g_hNetlibUser, (LPARAM)&m_nlhr); + NETLIBHTTPREQUEST* reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)g_hNetlibUser, (LPARAM)&m_nlhr); HTTPFormDestroy(&m_nlhr); - if(reply){ - if(reply->resultCode>=200 && reply->resultCode<300 && reply->dataLength){ - reply->pData[reply->dataLength-1]='\0';/// make sure its null terminated - const char* url=NULL; - url=GetHTMLContent(reply->pData,"<image_link>","</image_link>"); - if(url && *url){ - mir_free(m_URL), m_URL=mir_strdup(url); - mir_free(m_URLthumb), m_URLthumb=mir_strdup(m_URL); + if (reply) { + if (reply->resultCode >= 200 && reply->resultCode < 300 && reply->dataLength) { + reply->pData[reply->dataLength - 1] = '\0';/// make sure its null terminated + const char* url = NULL; + url = GetHTMLContent(reply->pData, "<image_link>", "</image_link>"); + if (url && *url) { + mir_free(m_URL), m_URL = mir_strdup(url); + mir_free(m_URLthumb), m_URLthumb = mir_strdup(m_URL); size_t extlen; - char* pos=strrchr(m_URLthumb,'.'); - if(pos && (extlen=mir_strlen(pos))>2){ - char* tmp=mir_strdup(pos); - memcpy(pos,".th",3); - memcpy(pos+3,tmp,extlen-3); - mir_stradd(m_URLthumb,tmp+extlen-3); + char* pos = strrchr(m_URLthumb, '.'); + if (pos && (extlen = mir_strlen(pos))>2) { + char* tmp = mir_strdup(pos); + memcpy(pos, ".th", 3); + memcpy(pos + 3, tmp, extlen - 3); + mir_stradd(m_URLthumb, tmp + extlen - 3); mir_free(tmp); - }else{ - mir_freeAndNil(m_URLthumb); } - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + else mir_freeAndNil(m_URLthumb); + + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); svcSendMsgExit(url); return; - }else{/// check error mess from server - url=GetHTMLContent(reply->pData,"<error ","</error>"); - TCHAR* err=NULL; - if(url) err=mir_a2t(url); - if (!err || !*err){/// fallback to server response mess + } + else {/// check error mess from server + url = GetHTMLContent(reply->pData, "<error ", "</error>"); + TCHAR* err = NULL; + if (url) err = mir_a2t(url); + if (!err || !*err) {/// fallback to server response mess mir_free(err); - err=mir_a2t(reply->pData); + err = mir_a2t(reply->pData); } - Error(_T("%s"),err); + Error(_T("%s"), err); mir_free(err); } - }else{ - Error(SS_ERR_RESPONSE,m_pszSendTyp,reply->resultCode); } - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); - }else{ - Error(SS_ERR_NORESPONSE,m_pszSendTyp,m_nlhr.resultCode); + else Error(SS_ERR_RESPONSE, m_pszSendTyp, reply->resultCode); + + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); } + else Error(SS_ERR_NORESPONSE, m_pszSendTyp, m_nlhr.resultCode); + Exit(ACKRESULT_FAILED); } -void CSendHost_ImageShack::SendThreadWrapper(void * Obj) { +void CSendHost_ImageShack::SendThreadWrapper(void * Obj) +{ reinterpret_cast<CSendHost_ImageShack*>(Obj)->SendThread(); } diff --git a/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp b/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp index 6b1b638083..d3fe40ce74 100644 --- a/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHost_imgur.cpp @@ -16,38 +16,39 @@ #include "stdafx.h" CSendHost_Imgur::CSendHost_Imgur(HWND Owner, MCONTACT hContact, bool bAsync) - : CSend(Owner,hContact,bAsync) + : CSend(Owner, hContact, bAsync) { - m_EnableItem=SS_DLG_DESCRIPTION|SS_DLG_AUTOSEND|SS_DLG_DELETEAFTERSSEND; - m_pszSendTyp=LPGENT("Image upload"); + m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp = LPGENT("Image upload"); } CSendHost_Imgur::~CSendHost_Imgur() -{} +{ +} //--------------------------------------------------------------------------- int CSendHost_Imgur::Send() { - if(!g_hNetlibUser){ /// check Netlib + if (!g_hNetlibUser) { /// check Netlib Error(SS_ERR_INIT, m_pszSendTyp); Exit(ACKRESULT_FAILED); return !m_bAsync; } memset(&m_nlhr, 0, sizeof(m_nlhr)); - char* tmp; tmp=mir_t2a(m_pszFile); - HTTPFormData frm[]={ - {"Authorization",HTTPFORM_HEADER("Client-ID 2a7303d78abe041")}, - {"image",HTTPFORM_FILE(tmp)}, -// {"name",""},// filename (detected if multipart / form-data) -// {"title",""}, -// {"description",""}, + char* tmp; tmp = mir_t2a(m_pszFile); + HTTPFormData frm[] = { + { "Authorization", HTTPFORM_HEADER("Client-ID 2a7303d78abe041") }, + { "image", HTTPFORM_FILE(tmp) }, + // {"name",""},// filename (detected if multipart / form-data) + // {"title",""}, + // {"description",""}, }; - int error=HTTPFormCreate(&m_nlhr,REQUEST_POST,"https://api.imgur.com/3/image",frm,sizeof(frm)/sizeof(HTTPFormData)); + int error = HTTPFormCreate(&m_nlhr, REQUEST_POST, "https://api.imgur.com/3/image", frm, sizeof(frm) / sizeof(HTTPFormData)); mir_free(tmp); - if(error) + if (error) return !m_bAsync; /// start upload thread - if(m_bAsync){ + if (m_bAsync) { mir_forkthread(&CSendHost_Imgur::SendThread, this); return 0; } @@ -57,39 +58,37 @@ int CSendHost_Imgur::Send() void CSendHost_Imgur::SendThread(void* obj) { - CSendHost_Imgur* self=(CSendHost_Imgur*)obj; + CSendHost_Imgur* self = (CSendHost_Imgur*)obj; /// send DATA and wait for m_nlreply - NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)g_hNetlibUser,(LPARAM)&self->m_nlhr); + NETLIBHTTPREQUEST* reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)g_hNetlibUser, (LPARAM)&self->m_nlhr); self->HTTPFormDestroy(&self->m_nlhr); - if(reply){ - if(reply->dataLength){ + if (reply) { + if (reply->dataLength) { char buf[128]; -// GetJSONInteger(reply->pData,reply->dataLength,"status",0) - if(GetJSONBool(reply->pData,reply->dataLength,"success")){ -// GetJSONString(reply->pData,reply->dataLength,"data[id]",buf,sizeof(buf)); - GetJSONString(reply->pData,reply->dataLength,"data[link]",buf,sizeof(buf)); -// GetJSONString(reply->pData,reply->dataLength,"[data][deletehash]",buf,sizeof(buf)); - mir_free(self->m_URL), self->m_URL=mir_strdup(buf); - char* ext=strrchr(self->m_URL,'.'); - if(ext){ - size_t thumblen=mir_strlen(self->m_URL)+2; - mir_free(self->m_URLthumb), self->m_URLthumb=(char*)mir_alloc(thumblen); - thumblen=ext-self->m_URL; - memcpy(self->m_URLthumb,self->m_URL,thumblen); - self->m_URLthumb[thumblen]='m'; // 320x320, see http://api.imgur.com/models/image - mir_strcpy(self->m_URLthumb+thumblen+1,self->m_URL+thumblen); + + if (GetJSONBool(reply->pData, reply->dataLength, "success")) { + GetJSONString(reply->pData, reply->dataLength, "data[link]", buf, sizeof(buf)); + + mir_free(self->m_URL), self->m_URL = mir_strdup(buf); + char* ext = strrchr(self->m_URL, '.'); + if (ext) { + size_t thumblen = mir_strlen(self->m_URL) + 2; + mir_free(self->m_URLthumb), self->m_URLthumb = (char*)mir_alloc(thumblen); + thumblen = ext - self->m_URL; + memcpy(self->m_URLthumb, self->m_URL, thumblen); + self->m_URLthumb[thumblen] = 'm'; // 320x320, see http://api.imgur.com/models/image + mir_strcpy(self->m_URLthumb + thumblen + 1, self->m_URL + thumblen); } - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); self->svcSendMsgExit(self->m_URL); return; - }else{ - self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,GetJSONInteger(reply->pData,reply->dataLength,"status",0)); } - }else{ - self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,reply->resultCode); + else self->Error(SS_ERR_RESPONSE, self->m_pszSendTyp, GetJSONInteger(reply->pData, reply->dataLength, "status", 0)); } - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); - }else{ - self->Error(SS_ERR_NORESPONSE,self->m_pszSendTyp,self->m_nlhr.resultCode); + else self->Error(SS_ERR_RESPONSE, self->m_pszSendTyp, reply->resultCode); + + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); } + else self->Error(SS_ERR_NORESPONSE, self->m_pszSendTyp, self->m_nlhr.resultCode); + self->Exit(ACKRESULT_FAILED); } diff --git a/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp index 68aae59b29..e1c44a831a 100644 --- a/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp +++ b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp @@ -16,30 +16,31 @@ #include "stdafx.h" CSendHost_UploadPie::CSendHost_UploadPie(HWND Owner, MCONTACT hContact, bool bAsync, int expire) - : m_expire(expire), CSend(Owner,hContact,bAsync) + : m_expire(expire), CSend(Owner, hContact, bAsync) { - m_EnableItem=SS_DLG_DESCRIPTION|SS_DLG_AUTOSEND|SS_DLG_DELETEAFTERSSEND; - m_pszSendTyp=LPGENT("Image upload"); + m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp = LPGENT("Image upload"); } CSendHost_UploadPie::~CSendHost_UploadPie() -{} +{ +} //--------------------------------------------------------------------------- int CSendHost_UploadPie::Send() { - if(!g_hNetlibUser){ /// check Netlib + if (!g_hNetlibUser) { /// check Netlib Error(SS_ERR_INIT, m_pszSendTyp); Exit(ACKRESULT_FAILED); return !m_bAsync; } memset(&m_nlhr, 0, sizeof(m_nlhr)); - char* tmp; tmp=mir_t2a(m_pszFile); - HTTPFormData frm[]={ - {"MAX_FILE_SIZE",HTTPFORM_INT(3145728)},// ?? - {"upload",HTTPFORM_INT(1)},// ?? - {"uploadedfile",HTTPFORM_FILE(tmp)}, - {"expire",HTTPFORM_INT(m_expire)},// 30m + char* tmp; tmp = mir_t2a(m_pszFile); + HTTPFormData frm[] = { + { "MAX_FILE_SIZE", HTTPFORM_INT(3145728) },// ?? + { "upload", HTTPFORM_INT(1) },// ?? + { "uploadedfile", HTTPFORM_FILE(tmp) }, + { "expire", HTTPFORM_INT(m_expire) },// 30m //{"expire",HTTPFORM_INT(2,},// 1h //{"expire",HTTPFORM_INT(3)},// 6h //{"expire",HTTPFORM_INT(4)},// 1d @@ -47,12 +48,12 @@ int CSendHost_UploadPie::Send() //{"x",HTTPFORM_INT(130)},// ?? //{"y",HTTPFORM_INT(17)},// ?? }; - int error=HTTPFormCreate(&m_nlhr,REQUEST_POST,"http://uploadpie.com/",frm,sizeof(frm)/sizeof(HTTPFormData)); + int error = HTTPFormCreate(&m_nlhr, REQUEST_POST, "http://uploadpie.com/", frm, sizeof(frm) / sizeof(HTTPFormData)); mir_free(tmp); - if(error) + if (error) return !m_bAsync; /// start upload thread - if(m_bAsync){ + if (m_bAsync) { mir_forkthread(&CSendHost_UploadPie::SendThread, this); return 0; } @@ -62,45 +63,47 @@ int CSendHost_UploadPie::Send() void CSendHost_UploadPie::SendThread(void* obj) { - CSendHost_UploadPie* self=(CSendHost_UploadPie*)obj; + CSendHost_UploadPie* self = (CSendHost_UploadPie*)obj; /// send DATA and wait for m_nlreply - NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)g_hNetlibUser,(LPARAM)&self->m_nlhr); + NETLIBHTTPREQUEST* reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)g_hNetlibUser, (LPARAM)&self->m_nlhr); self->HTTPFormDestroy(&self->m_nlhr); - if(reply){ - if(reply->resultCode>=200 && reply->resultCode<300 && reply->dataLength){ - reply->pData[reply->dataLength-1]='\0';/// make sure its null terminated - char* url=reply->pData; - do{ + if (reply) { + if (reply->resultCode >= 200 && reply->resultCode < 300 && reply->dataLength) { + reply->pData[reply->dataLength - 1] = '\0';/// make sure its null terminated + char* url = reply->pData; + do { char* pos; - if((url=strstr(url,"http://uploadpie.com/"))){ - for(pos=url+21; (*pos>='0'&&*pos<='9') || (*pos>='a'&&*pos<='z') || (*pos>='A'&&*pos<='Z') || *pos=='_' || *pos=='-' || *pos=='"' || *pos=='\''; ++pos){ - if(*pos=='"' || *pos=='\'') break; + if ((url = strstr(url, "http://uploadpie.com/"))) { + for (pos = url + 21; (*pos >= '0'&&*pos <= '9') || (*pos >= 'a'&&*pos <= 'z') || (*pos >= 'A'&&*pos <= 'Z') || *pos == '_' || *pos == '-' || *pos == '"' || *pos == '\''; ++pos) { + if (*pos == '"' || *pos == '\'') break; } - if(url+21!=pos && (*pos=='"' || *pos=='\'')){ - *pos='\0'; + if (url + 21 != pos && (*pos == '"' || *pos == '\'')) { + *pos = '\0'; break; } ++url; } - }while(url); - if(url){ - mir_free(self->m_URL), self->m_URL=mir_strdup(url); - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + } while (url); + + if (url) { + mir_free(self->m_URL), self->m_URL = mir_strdup(url); + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); self->svcSendMsgExit(url); return; - }else{/// check error mess from server - const char* err=GetHTMLContent(reply->pData,"<p id=\"error\"","</p>"); + } + else {/// check error mess from server + const char* err = GetHTMLContent(reply->pData, "<p id=\"error\"", "</p>"); TCHAR* werr; - if(err) werr=mir_a2t(err); - else werr=mir_a2t(reply->pData); - self->Error(_T("%s"),werr); + if (err) werr = mir_a2t(err); + else werr = mir_a2t(reply->pData); + self->Error(_T("%s"), werr); mir_free(werr); } - }else{ - self->Error(SS_ERR_RESPONSE,self->m_pszSendTyp,reply->resultCode); } - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); - }else{ - self->Error(SS_ERR_NORESPONSE,self->m_pszSendTyp,self->m_nlhr.resultCode); + else self->Error(SS_ERR_RESPONSE, self->m_pszSendTyp, reply->resultCode); + + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply); } + else self->Error(SS_ERR_NORESPONSE, self->m_pszSendTyp, self->m_nlhr.resultCode); + self->Exit(ACKRESULT_FAILED); } diff --git a/plugins/SendScreenshotPlus/src/Main.cpp b/plugins/SendScreenshotPlus/src/Main.cpp index 4474b47732..717cdfa04c 100644 --- a/plugins/SendScreenshotPlus/src/Main.cpp +++ b/plugins/SendScreenshotPlus/src/Main.cpp @@ -37,50 +37,54 @@ HANDLE g_hNetlibUser=0;//!< Netlib Register User FI_INTERFACE* FIP=NULL; int hLangpack;//Miranda NG langpack used by translate functions, filled by mir_getLP() -IconItem ICONS[ICO_END_]={ - {LPGEN("Main Icon"),"main",IDI_MAIN,32}, - {LPGEN("Main Icon"),"mainxs",IDI_MAIN}, - {LPGEN("Target Cursor"),"target",IDI_TARGET,32}, - {LPGEN("Target Desktop"),"monitor",IDI_MONITOR,32}, +IconItem ICONS[ICO_END_] = +{ + { LPGEN("Main Icon"), "main", IDI_MAIN, 32 }, + { LPGEN("Main Icon"), "mainxs", IDI_MAIN }, + { LPGEN("Target Cursor"), "target", IDI_TARGET, 32 }, + { LPGEN("Target Desktop"), "monitor", IDI_MONITOR, 32 }, }; -IconItem ICONS_BTN[ICO_BTN_END_]={ - {LPGEN("Help"),"help",IDI_HELP}, - {LPGEN("Open Folder"),"folder",IDI_FOLDER}, - {LPGEN("Description off"),"desc",IDI_DESC}, - {LPGEN("Description on"),"descon",IDI_DESCON}, - {LPGEN("Delete off"),"del",IDI_DEL}, - {LPGEN("Delete on"),"delon",IDI_DELON}, - {LPGEN("Prev"),"arrowl",IDI_ARROWL}, - {LPGEN("Next"),"arrowr",IDI_ARROWR}, - {LPGEN("Update"),"update",IDI_UPDATE}, - {LPGEN("OK"),"ok",IDI_OK}, - {LPGEN("Cancel"),"cancel",IDI_CANCEL}, -// {LPGEN("Apply"),"apply",IDI_APPLY}, - {LPGEN("Edit"),"edit",IDI_EDIT}, - {LPGEN("Edit on"),"editon",IDI_EDITON}, - {LPGEN("Copy"),"copy",IDI_COPY}, - {LPGEN("BBC"),"bbc",IDI_BBC}, - {LPGEN("BBC link"),"bbclnk",IDI_BBC2}, - {LPGEN("Down arrow"),"downarrow",IDI_DOWNARROW}, + +IconItem ICONS_BTN[ICO_BTN_END_] = +{ + { LPGEN("Help"), "help", IDI_HELP }, + { LPGEN("Open Folder"), "folder", IDI_FOLDER }, + { LPGEN("Description off"), "desc", IDI_DESC }, + { LPGEN("Description on"), "descon", IDI_DESCON }, + { LPGEN("Delete off"), "del", IDI_DEL }, + { LPGEN("Delete on"), "delon", IDI_DELON }, + { LPGEN("Prev"), "arrowl", IDI_ARROWL }, + { LPGEN("Next"), "arrowr", IDI_ARROWR }, + { LPGEN("Update"), "update", IDI_UPDATE }, + { LPGEN("OK"), "ok", IDI_OK }, + { LPGEN("Cancel"), "cancel", IDI_CANCEL }, + // {LPGEN("Apply"),"apply",IDI_APPLY}, + { LPGEN("Edit"), "edit", IDI_EDIT }, + { LPGEN("Edit on"), "editon", IDI_EDITON }, + { LPGEN("Copy"), "copy", IDI_COPY }, + { LPGEN("BBC"), "bbc", IDI_BBC }, + { LPGEN("BBC link"), "bbclnk", IDI_BBC2 }, + { LPGEN("Down arrow"), "downarrow", IDI_DOWNARROW }, }; -static HANDLE m_hFolderScreenshot=0; -TCHAR* GetCustomPath() { +static HANDLE m_hFolderScreenshot = 0; +TCHAR* GetCustomPath() +{ TCHAR* pszPath = Utils_ReplaceVarsT(_T("%miranda_userdata%\\Screenshots")); - if(m_hFolderScreenshot){ - TCHAR szPath[1024]={0}; + if (m_hFolderScreenshot) { + TCHAR szPath[1024] = { 0 }; FoldersGetCustomPathT(m_hFolderScreenshot, szPath, 1024, pszPath); mir_free(pszPath); pszPath = mir_tstrdup(szPath); } - if(!pszPath){ + if (!pszPath) { MessageBox(NULL, _T("Can not retrieve screenshot path."), _T("SendSS"), MB_OK | MB_ICONERROR | MB_APPLMODAL); return 0; } int result = CreateDirectoryTreeT(pszPath); - if(result){ + if (result) { TCHAR szError[MAX_PATH]; - mir_sntprintf(szError,MAX_PATH,TranslateT("Could not create screenshot folder (error code: %d):\n%s\nDo you have write permissions?"),result,pszPath); + mir_sntprintf(szError, MAX_PATH, TranslateT("Could not create screenshot folder (error code: %d):\n%s\nDo you have write permissions?"), result, pszPath); MessageBox(NULL, szError, _T("SendSS"), MB_OK | MB_ICONERROR | MB_APPLMODAL); mir_free(pszPath); return 0; @@ -88,28 +92,29 @@ TCHAR* GetCustomPath() { return pszPath; } /// services -static HANDLE m_hOpenCaptureDialog=0; -static HANDLE m_hSendDesktop=0; -static HANDLE m_hEditBitmap=0; -static HANDLE m_hSend2ImageShack=0; +static HANDLE m_hOpenCaptureDialog = 0; +static HANDLE m_hSendDesktop = 0; +static HANDLE m_hEditBitmap = 0; +static HANDLE m_hSend2ImageShack = 0; //--------------------------------------------------------------------------- // Callback function of service for contact menu and main menu // wParam = contact handle // lParam = 0 (or 0xFFFF to preselect window under cursor) -INT_PTR service_OpenCaptureDialog(WPARAM wParam, LPARAM lParam){ - TfrmMain* frmMain=new TfrmMain(); - if(!frmMain) { +INT_PTR service_OpenCaptureDialog(WPARAM wParam, LPARAM lParam) +{ + TfrmMain* frmMain = new TfrmMain(); + if (!frmMain) { MessageBox(NULL, TranslateT("Could not create main dialog."), TranslateT("Error"), MB_OK | MB_ICONERROR | MB_APPLMODAL); return -1; } - TCHAR* pszPath=GetCustomPath(); - if(!pszPath){ + TCHAR* pszPath = GetCustomPath(); + if (!pszPath) { delete frmMain; return -1; } frmMain->Init(pszPath, wParam); mir_free(pszPath); - if(lParam==0xFFFF){ + if (lParam == 0xFFFF) { frmMain->SetTargetWindow(NULL); } frmMain->Show(); @@ -123,26 +128,27 @@ INT_PTR service_OpenCaptureDialog(WPARAM wParam, LPARAM lParam){ // 2. Open the capture dialog in take screenshot only mode (it will not be sent) // wParam = 0 // lParam = anything but 0 -INT_PTR service_SendDesktop(WPARAM wParam, LPARAM lParam) { - TfrmMain* frmMain=new TfrmMain(); - if(!frmMain) { +INT_PTR service_SendDesktop(WPARAM wParam, LPARAM) +{ + TfrmMain* frmMain = new TfrmMain(); + if (!frmMain) { MessageBox(NULL, TranslateT("Could not create main dialog."), TranslateT("Error"), MB_OK | MB_ICONERROR | MB_APPLMODAL); return -1; } - TCHAR* pszPath=GetCustomPath(); - if(!pszPath){ + TCHAR* pszPath = GetCustomPath(); + if (!pszPath) { delete frmMain; return -1; } - MCONTACT hContact = (MCONTACT) wParam; + MCONTACT hContact = (MCONTACT)wParam; char* pszProto = GetContactProto(hContact); bool bChatRoom = db_get_b(hContact, pszProto, "ChatRoom", 0) != 0; - frmMain->m_opt_chkTimed = false; - frmMain->m_opt_tabCapture = 1; - frmMain->m_opt_cboxDesktop = 0; - frmMain->m_opt_chkEditor = false; - frmMain->m_opt_cboxSendBy = bChatRoom ? SS_IMAGESHACK:SS_FILESEND; - frmMain->Init(pszPath,hContact); // this method create the window hidden. + frmMain->m_opt_chkTimed = false; + frmMain->m_opt_tabCapture = 1; + frmMain->m_opt_cboxDesktop = 0; + frmMain->m_opt_chkEditor = false; + frmMain->m_opt_cboxSendBy = bChatRoom ? SS_IMAGESHACK : SS_FILESEND; + frmMain->Init(pszPath, hContact); // this method create the window hidden. mir_free(pszPath); frmMain->btnCaptureClick(); // this method will call Close() return 0; @@ -152,82 +158,85 @@ INT_PTR service_SendDesktop(WPARAM wParam, LPARAM lParam) { // wParam = (SENDSSCB) callback function address to call when editing is done // lParam = (HBITMAP) bitmap handle, a copy is made so the calling function can free this handle after the service function returns // Returns: -INT_PTR service_EditBitmap(WPARAM wParam, LPARAM lParam) { -/* TfrmEdit *frmEdit=new TfrmEdit(NULL); - if (!frmEdit) +INT_PTR service_EditBitmap(WPARAM, LPARAM) +{ + /* TfrmEdit *frmEdit=new TfrmEdit(NULL); + if (!frmEdit) return -1; - Graphics::TBitmap *bitmap=new Graphics::TBitmap(); - if (!bitmap) + Graphics::TBitmap *bitmap=new Graphics::TBitmap(); + if (!bitmap) return -2; - bitmap->Handle = (void*)lParam; - frmEdit->InitEditor(bitmap); // a copy of the bitmap is made inside this function - frmEdit->Show(); - delete bitmap; -*/ + bitmap->Handle = (void*)lParam; + frmEdit->InitEditor(bitmap); // a copy of the bitmap is made inside this function + frmEdit->Show(); + delete bitmap; + */ return 0; } //--------------------------------------------------------------------------- // Callback function of service for sending image to imageshack.us // wParam = (char*)filename // lParam = (HANDLE)contact (can be null) -INT_PTR service_Send2ImageShack(WPARAM wParam, LPARAM lParam) { +INT_PTR service_Send2ImageShack(WPARAM wParam, LPARAM lParam) +{ char* result = NULL; CSendHost_ImageShack* cSend = new CSendHost_ImageShack(NULL, lParam, false); cSend->m_bDeleteAfterSend = false; cSend->SetFile((char*)wParam); if (lParam != NULL) { - if(cSend->Send()) delete cSend; + if (cSend->Send()) delete cSend; return NULL; } cSend->SendSilent(); if (cSend->GetURL()) { - result=mir_strdup(cSend->GetURL()); - }else{ - result=mir_t2a(cSend->GetErrorMsg()); + result = mir_strdup(cSend->GetURL()); + } + else { + result = mir_t2a(cSend->GetErrorMsg()); } delete cSend; return (INT_PTR)result; } // Functions //////////////////////////////////////////////////////////////////////////// -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD, LPVOID) { - g_hSendSS=hinstDLL; + g_hSendSS = hinstDLL; return TRUE; } -static const PLUGININFOEX pluginInfo={ +static const PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), __PLUGIN_NAME, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), __DESCRIPTION, - __AUTHOR,__AUTHOREMAIL, + __AUTHOR, __AUTHOREMAIL, __COPYRIGHT, __AUTHORWEB, UNICODE_AWARE, // {ED39AF7C-BECD-404E-9499-4D04F711B9CB} - {0xed39af7c, 0xbecd, 0x404e, {0x94, 0x99, 0x4d, 0x04, 0xf7, 0x11, 0xb9, 0xcb}} + { 0xed39af7c, 0xbecd, 0x404e, { 0x94, 0x99, 0x4d, 0x04, 0xf7, 0x11, 0xb9, 0xcb } } }; -DLL_EXPORT PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +DLL_EXPORT PLUGININFOEX* MirandaPluginInfoEx(DWORD) { return const_cast<PLUGININFOEX*>(&pluginInfo); } /// hooks -static HANDLE m_hookModulesLoaded=0; -static HANDLE m_hookSystemPreShutdown=0; +static HANDLE m_hookModulesLoaded = 0; +static HANDLE m_hookSystemPreShutdown = 0; int hook_ModulesLoaded(WPARAM, LPARAM) { - g_myGlobals.PopupExist = ServiceExists(MS_POPUP_ADDPOPUPT); - g_myGlobals.PopupActionsExist = ServiceExists(MS_POPUP_REGISTERACTIONS); - g_myGlobals.PluginHTTPExist = ServiceExists(MS_HTTP_ACCEPT_CONNECTIONS); - g_myGlobals.PluginFTPExist = ServiceExists(MS_FTPFILE_SHAREFILE); - g_myGlobals.PluginDropboxExist = ServiceExists(MS_DROPBOX_SEND_FILE); + g_myGlobals.PopupExist = ServiceExists(MS_POPUP_ADDPOPUPT); + g_myGlobals.PopupActionsExist = ServiceExists(MS_POPUP_REGISTERACTIONS); + g_myGlobals.PluginHTTPExist = ServiceExists(MS_HTTP_ACCEPT_CONNECTIONS); + g_myGlobals.PluginFTPExist = ServiceExists(MS_FTPFILE_SHAREFILE); + g_myGlobals.PluginDropboxExist = ServiceExists(MS_DROPBOX_SEND_FILE); // Netlib register NETLIBUSER nlu = { sizeof(nlu) }; nlu.szSettingsModule = __PLUGIN_NAME; nlu.ptszDescriptiveName = TranslateT("SendSS HTTP connections"); - nlu.flags = NUF_OUTGOING|NUF_HTTPCONNS|NUF_TCHAR; //|NUF_NOHTTPSOPTION; + nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS | NUF_TCHAR; //|NUF_NOHTTPSOPTION; g_hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu); // load my button class / or use UInfoEx CtrlButtonLoadModule(); @@ -236,7 +245,7 @@ int hook_ModulesLoaded(WPARAM, LPARAM) _T(PROFILE_PATH)_T("\\")_T(CURRENT_PROFILE)_T("\\Screenshots")); return 0; } -int hook_SystemPreShutdown(WPARAM wParam, LPARAM lParam) +int hook_SystemPreShutdown(WPARAM, LPARAM) { TfrmAbout::Unload();//crashes if done from "Unload" because of dependencies TfrmMain::Unload();// " @@ -247,38 +256,38 @@ int hook_SystemPreShutdown(WPARAM wParam, LPARAM lParam) return 0; } -ATOM g_clsTargetHighlighter=0; +ATOM g_clsTargetHighlighter = 0; DLL_EXPORT int Load(void) { mir_getLP(&pluginInfo); mir_getCLI(); - INT_PTR result=CallService(MS_IMG_GETINTERFACE,FI_IF_VERSION,(LPARAM)&FIP); - if(FIP==NULL || result!=S_OK) { + INT_PTR result = CallService(MS_IMG_GETINTERFACE, FI_IF_VERSION, (LPARAM)&FIP); + if (FIP == NULL || result != S_OK) { MessageBox(NULL, TranslateT("Image services (AdvaImg) not found.\nSendSS disabled."), TranslateT("SendSS"), MB_OK | MB_ICONERROR | MB_APPLMODAL); return 1; } /// hook events - m_hookModulesLoaded=HookEvent(ME_SYSTEM_MODULESLOADED,hook_ModulesLoaded); - m_hookSystemPreShutdown=HookEvent(ME_SYSTEM_PRESHUTDOWN,hook_SystemPreShutdown); + m_hookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, hook_ModulesLoaded); + m_hookSystemPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, hook_SystemPreShutdown); /// icons - Icon_Register(g_hSendSS,SZ_SENDSS,ICONS,sizeof(ICONS)/sizeof(IconItem),SZ_SENDSS); - Icon_Register(g_hSendSS,SZ_SENDSS "/" LPGEN("Buttons"),ICONS_BTN,sizeof(ICONS_BTN)/sizeof(IconItem),SZ_SENDSS); + Icon_Register(g_hSendSS, SZ_SENDSS, ICONS, sizeof(ICONS) / sizeof(IconItem), SZ_SENDSS); + Icon_Register(g_hSendSS, SZ_SENDSS "/" LPGEN("Buttons"), ICONS_BTN, sizeof(ICONS_BTN) / sizeof(IconItem), SZ_SENDSS); /// services - #define srv_reg(name) do{\ +#define srv_reg(name) do{\ m_h##name=CreateServiceFunction(SZ_SENDSS "/" #name, service_##name);\ if(!m_h##name) MessageBoxA(NULL,Translate("Could not register Miranda service."),SZ_SENDSS "/" #name,MB_OK|MB_ICONERROR|MB_APPLMODAL);\ - }while(0) + }while(0) srv_reg(OpenCaptureDialog); srv_reg(SendDesktop); srv_reg(EditBitmap); srv_reg(Send2ImageShack); - + // menu items CMenuItem mi; mi.flags = CMIF_TCHAR; mi.hIcolibItem = GetIconHandle(ICO_MAINXS); - + mi.name.t = LPGENT("Take a screenshot"); mi.pszService = MS_SENDSS_OPENDIALOG; mi.position = 1000001; @@ -295,19 +304,19 @@ DLL_EXPORT int Load(void) Menu_AddContactMenuItem(&mi); /// hotkey's - HOTKEYDESC hkd={sizeof(hkd)}; - hkd.pszName="Open SendSS+"; - hkd.ptszDescription=LPGENT("Open SendSS+"); - hkd.ptszSection=_T("SendSS+"); - hkd.pszService=MS_SENDSS_OPENDIALOG; + HOTKEYDESC hkd = { sizeof(hkd) }; + hkd.pszName = "Open SendSS+"; + hkd.ptszDescription = LPGENT("Open SendSS+"); + hkd.ptszSection = _T("SendSS+"); + hkd.pszService = MS_SENDSS_OPENDIALOG; //hkd.DefHotKey=HOTKEYCODE(HOTKEYF_CONTROL, VK_F10) | HKF_MIRANDA_LOCAL; - hkd.lParam=0xFFFF; + hkd.lParam = 0xFFFF; hkd.dwFlags = HKD_TCHAR; Hotkey_Register(&hkd); /// register highlighter window class - HBRUSH brush=CreateSolidBrush(0x0000FF00);//owned by class - WNDCLASS wndclass={CS_HREDRAW|CS_VREDRAW,DefWindowProc,0,0,g_hSendSS,NULL,NULL,brush,NULL,L"SendSSHighlighter"}; - g_clsTargetHighlighter=RegisterClass(&wndclass); + HBRUSH brush = CreateSolidBrush(0x0000FF00);//owned by class + WNDCLASS wndclass = { CS_HREDRAW | CS_VREDRAW, DefWindowProc, 0, 0, g_hSendSS, NULL, NULL, brush, NULL, L"SendSSHighlighter" }; + g_clsTargetHighlighter = RegisterClass(&wndclass); return 0; } /*--------------------------------------------------------------------------- @@ -316,15 +325,15 @@ DLL_EXPORT int Load(void) */ DLL_EXPORT int Unload(void) {//as "ghazan" says, it's useless to unregister services or unhook events, let's still do it for now :P - CallService(MS_HOTKEY_UNREGISTER,0,(LPARAM)"Open SendSS+"); + CallService(MS_HOTKEY_UNREGISTER, 0, (LPARAM)"Open SendSS+"); /// deregister services - #define srv_dereg(name) do{ if(m_h##name) DestroyServiceFunction(m_h##name),m_h##name=0; }while(0) +#define srv_dereg(name) do{ if(m_h##name) DestroyServiceFunction(m_h##name),m_h##name=0; }while(0) srv_dereg(OpenCaptureDialog); srv_dereg(SendDesktop); srv_dereg(EditBitmap); srv_dereg(Send2ImageShack); - if(m_hookModulesLoaded) UnhookEvent(m_hookModulesLoaded),m_hookModulesLoaded=0; - if(m_hookSystemPreShutdown) UnhookEvent(m_hookSystemPreShutdown),m_hookSystemPreShutdown=0; - if(g_clsTargetHighlighter) UnregisterClass((TCHAR*)g_clsTargetHighlighter,g_hSendSS),g_clsTargetHighlighter=0; + if (m_hookModulesLoaded) UnhookEvent(m_hookModulesLoaded), m_hookModulesLoaded = 0; + if (m_hookSystemPreShutdown) UnhookEvent(m_hookSystemPreShutdown), m_hookSystemPreShutdown = 0; + if (g_clsTargetHighlighter) UnregisterClass((TCHAR*)g_clsTargetHighlighter, g_hSendSS), g_clsTargetHighlighter = 0; return 0; } diff --git a/plugins/SendScreenshotPlus/src/UAboutForm.cpp b/plugins/SendScreenshotPlus/src/UAboutForm.cpp index f3b50a740d..d21b8deaeb 100644 --- a/plugins/SendScreenshotPlus/src/UAboutForm.cpp +++ b/plugins/SendScreenshotPlus/src/UAboutForm.cpp @@ -29,12 +29,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include <list> -void TfrmAbout::Unload(){ +void TfrmAbout::Unload() +{ std::list<TfrmAbout*> lst; - for(CHandleMapping::iterator iter=_HandleMapping.begin(); iter!=_HandleMapping.end(); ++iter){ + for (CHandleMapping::iterator iter = _HandleMapping.begin(); iter != _HandleMapping.end(); ++iter) { lst.push_back(iter->second);//we can't delete inside loop.. not MT compatible } - while(!lst.empty()){ + while (!lst.empty()) { DestroyWindow(lst.front()->m_hWnd);//deletes class lst.pop_front(); } @@ -46,13 +47,13 @@ TfrmAbout::CHandleMapping TfrmAbout::_HandleMapping; INT_PTR CALLBACK TfrmAbout::DlgTfrmAbout(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_CTLCOLOREDIT || msg == WM_CTLCOLORSTATIC) { - switch ( GetWindowLongPtr(( HWND )lParam, GWL_ID )) { - case IDC_CREDIT: - case IDC_LICENSE: - SetTextColor((HDC)wParam,GetSysColor(COLOR_WINDOWTEXT)); - break; - default: - return FALSE; + switch (GetWindowLongPtr((HWND)lParam, GWL_ID)) { + case IDC_CREDIT: + case IDC_LICENSE: + SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); + break; + default: + return FALSE; } return (INT_PTR)GetStockObject(WHITE_BRUSH); //GetSysColorBrush(COLOR_WINDOW); } @@ -63,30 +64,30 @@ INT_PTR CALLBACK TfrmAbout::DlgTfrmAbout(HWND hWnd, UINT msg, WPARAM wParam, LPA reinterpret_cast<TfrmAbout*>(lParam)->m_hWnd = hWnd; return wnd->second->wmInitdialog(wParam, lParam); } - wnd=_HandleMapping.find(hWnd); - if (wnd==_HandleMapping.end()) { // something screwed up + wnd = _HandleMapping.find(hWnd); + if (wnd == _HandleMapping.end()) { // something screwed up return FALSE; //dialog! do not use ::DefWindowProc(hWnd, msg, wParam, lParam); } - switch (msg) - { + switch (msg) { // case WM_INITDIALOG: done on top - case WM_COMMAND: - return wnd->second->wmCommand(wParam, lParam); - break; - case WM_CLOSE: - return wnd->second->wmClose(wParam, lParam); - break; - case WM_DESTROY: - delete wnd->second; - break; + case WM_COMMAND: + return wnd->second->wmCommand(wParam, lParam); + break; + case WM_CLOSE: + return wnd->second->wmClose(wParam, lParam); + break; + case WM_DESTROY: + delete wnd->second; + break; } return FALSE; } //--------------------------------------------------------------------------- //WM_INITDIALOG: -LRESULT TfrmAbout::wmInitdialog(WPARAM wParam, LPARAM lParam) { +LRESULT TfrmAbout::wmInitdialog(WPARAM, LPARAM) +{ // Headerbar SendDlgItemMessage(m_hWnd, IDC_HEADERBAR, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); @@ -96,34 +97,34 @@ LRESULT TfrmAbout::wmInitdialog(WPARAM wParam, LPARAM lParam) { mir_tstradd(pszText, _T(__COPYRIGHT)); mir_tstradd(pszText, _T("\r\n\r\n")); - HRSRC hRes = FindResource(g_hSendSS,MAKEINTRESOURCE(IDR_LICENSE),_T("TEXT")); - DWORD size = SizeofResource(g_hSendSS,hRes); - char* data = (char*)mir_alloc(size+1); - memcpy(data,LockResource(LoadResource(g_hSendSS,hRes)),size); + HRSRC hRes = FindResource(g_hSendSS, MAKEINTRESOURCE(IDR_LICENSE), _T("TEXT")); + DWORD size = SizeofResource(g_hSendSS, hRes); + char* data = (char*)mir_alloc(size + 1); + memcpy(data, LockResource(LoadResource(g_hSendSS, hRes)), size); data[size] = '\0'; TCHAR* pszCopyright = mir_a2t(data); mir_free(data); mir_tstradd(pszText, pszCopyright); mir_free(pszCopyright); - SetDlgItemText(m_hWnd,IDC_LICENSE, pszText); + SetDlgItemText(m_hWnd, IDC_LICENSE, pszText); mir_free(pszText); } //Credit { - HRSRC hRes = FindResource(g_hSendSS,MAKEINTRESOURCE(IDR_CREDIT),_T("TEXT")); - DWORD size = SizeofResource(g_hSendSS,hRes); - char* data = (char*)mir_alloc(size+1); - memcpy(data,LockResource(LoadResource(g_hSendSS,hRes)),size); + HRSRC hRes = FindResource(g_hSendSS, MAKEINTRESOURCE(IDR_CREDIT), _T("TEXT")); + DWORD size = SizeofResource(g_hSendSS, hRes); + char* data = (char*)mir_alloc(size + 1); + memcpy(data, LockResource(LoadResource(g_hSendSS, hRes)), size); data[size] = '\0'; TCHAR* pszText = mir_a2t(data); mir_free(data); - SetDlgItemText(m_hWnd,IDC_CREDIT, pszText); + SetDlgItemText(m_hWnd, IDC_CREDIT, pszText); mir_free(pszText); } - SendMessage(m_hWnd, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); - SendMessage(m_hWnd, WM_SETICON, ICON_SMALL, (LPARAM)GetIcon(ICO_MAINXS)); + SendMessage(m_hWnd, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); + SendMessage(m_hWnd, WM_SETICON, ICON_SMALL, (LPARAM)GetIcon(ICO_MAINXS)); //init controls btnPageClick(); @@ -133,75 +134,81 @@ LRESULT TfrmAbout::wmInitdialog(WPARAM wParam, LPARAM lParam) { } //WM_COMMAND: -LRESULT TfrmAbout::wmCommand(WPARAM wParam, LPARAM lParam) { +LRESULT TfrmAbout::wmCommand(WPARAM wParam, LPARAM) +{ //--------------------------------------------------------------------------- if (HIWORD(wParam) == BN_CLICKED) { - switch(LOWORD(wParam)) { - case IDCANCEL: // ESC pressed - this->Close(); - break; - case IDA_btnClose: - Close(); - break; - case IDA_CONTRIBLINK: - m_Page = !m_Page; - btnPageClick(); - break; - default: - break; + switch (LOWORD(wParam)) { + case IDCANCEL: // ESC pressed + this->Close(); + break; + case IDA_btnClose: + Close(); + break; + case IDA_CONTRIBLINK: + m_Page = !m_Page; + btnPageClick(); + break; + default: + break; } } return FALSE; } //WM_CLOSE: -LRESULT TfrmAbout::wmClose(WPARAM wParam, LPARAM lParam) { - SendMessage(m_hWndOwner,UM_CLOSING, (WPARAM)m_hWnd, (LPARAM)IDD_UAboutForm); +LRESULT TfrmAbout::wmClose(WPARAM, LPARAM) +{ + SendMessage(m_hWndOwner, UM_CLOSING, (WPARAM)m_hWnd, (LPARAM)IDD_UAboutForm); DestroyWindow(m_hWnd); return FALSE; } //--------------------------------------------------------------------------- -TfrmAbout::TfrmAbout(HWND Owner) { +TfrmAbout::TfrmAbout(HWND Owner) +{ m_hWndOwner = Owner; m_Page = 1; // create window - m_hWnd = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UAboutForm),0, DlgTfrmAbout,(LPARAM)this); + m_hWnd = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UAboutForm), 0, DlgTfrmAbout, (LPARAM)this); //register object _HandleMapping.insert(CHandleMapping::value_type(m_hWnd, this)); } -TfrmAbout::~TfrmAbout() { +TfrmAbout::~TfrmAbout() +{ _HandleMapping.erase(m_hWnd); } //--------------------------------------------------------------------------- -void TfrmAbout::btnPageClick() { +void TfrmAbout::btnPageClick() +{ HWND hCtrl = GetDlgItem(m_hWnd, IDA_CONTRIBLINK); - const TCHAR* credits=TranslateT("Credits"); - const TCHAR* copyright=TranslateT("Copyright"); + const TCHAR* credits = TranslateT("Credits"); + const TCHAR* copyright = TranslateT("Copyright"); const TCHAR* title; const TCHAR* button; - if(!m_Page) { + if (!m_Page) { ShowWindow(GetDlgItem(m_hWnd, IDC_CREDIT), SW_HIDE); ShowWindow(GetDlgItem(m_hWnd, IDC_LICENSE), SW_SHOW); SendMessage(hCtrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_ARROWR)); - title=copyright; - button=credits; - } else { + title = copyright; + button = credits; + } + else { ShowWindow(GetDlgItem(m_hWnd, IDC_CREDIT), SW_SHOW); ShowWindow(GetDlgItem(m_hWnd, IDC_LICENSE), SW_HIDE); SendMessage(hCtrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetIconBtn(ICO_BTN_ARROWL)); - title=credits; - button=copyright; + title = credits; + button = copyright; } SetWindowText(hCtrl, button); TCHAR newTitle[128]; TCHAR* pszPlug = mir_a2t(__PLUGIN_NAME); - TCHAR* pszVer = mir_a2t(__VERSION_STRING_DOTS); - mir_sntprintf(newTitle,_countof(newTitle), _T("%s - %s\nv%s"), pszPlug, title , pszVer); + TCHAR* pszVer = mir_a2t(__VERSION_STRING_DOTS); + mir_sntprintf(newTitle, _countof(newTitle), _T("%s - %s\nv%s"), pszPlug, title, pszVer); mir_free(pszPlug); mir_free(pszVer); SetDlgItemText(m_hWnd, IDC_HEADERBAR, newTitle); - InvalidateRect(GetDlgItem(m_hWnd,IDC_HEADERBAR),NULL,1); + InvalidateRect(GetDlgItem(m_hWnd, IDC_HEADERBAR), NULL, 1); } diff --git a/plugins/SendScreenshotPlus/src/UMainForm.cpp b/plugins/SendScreenshotPlus/src/UMainForm.cpp index c887f14c12..06f8d641ba 100644 --- a/plugins/SendScreenshotPlus/src/UMainForm.cpp +++ b/plugins/SendScreenshotPlus/src/UMainForm.cpp @@ -29,23 +29,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include <list> -void TfrmMain::Unload(){ +void TfrmMain::Unload() +{ std::list<TfrmMain*> lst; - for(CHandleMapping::iterator iter=_HandleMapping.begin(); iter!=_HandleMapping.end(); ++iter){ + for (CHandleMapping::iterator iter = _HandleMapping.begin(); iter != _HandleMapping.end(); ++iter) { lst.push_back(iter->second);//we can't delete inside loop.. not MT compatible } - while(!lst.empty()){ + while (!lst.empty()) { DestroyWindow(lst.front()->m_hWnd);//deletes class lst.pop_front(); } } //--------------------------------------------------------------------------- -INT_PTR CALLBACK TfrmMain::DlgProc_CaptureTabPage(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { -// main message handling is done inside TfrmMain::DlgTfrmMain +INT_PTR CALLBACK TfrmMain::DlgProc_CaptureTabPage(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + // main message handling is done inside TfrmMain::DlgTfrmMain switch (uMsg) { case WM_INITDIALOG: - switch(lParam){ + switch (lParam) { case IDD_UMain_CaptureWindow: Static_SetIcon(GetDlgItem(hDlg, ID_imgTarget), GetIcon(ICO_TARGET)); SetDlgItemText(hDlg, ID_edtCaption, TranslateT("Drag&Drop the target on the desired window.")); @@ -62,23 +64,23 @@ INT_PTR CALLBACK TfrmMain::DlgProc_CaptureTabPage(HWND hDlg, UINT uMsg, WPARAM w case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: - SetTextColor((HDC)wParam,GetSysColor(COLOR_WINDOWTEXT)); + SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); return (INT_PTR)GetStockObject(WHITE_BRUSH); case WM_COMMAND: - if(HIWORD(wParam)==BN_CLICKED && LOWORD(wParam)==ID_btnExplore){ /// local file tab - OPENFILENAME ofn={sizeof(OPENFILENAME)}; + if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == ID_btnExplore) { /// local file tab + OPENFILENAME ofn = { sizeof(OPENFILENAME) }; TCHAR filename[MAX_PATH]; - GetDlgItemText(hDlg,ID_edtSize,filename,_countof(filename)); + GetDlgItemText(hDlg, ID_edtSize, filename, _countof(filename)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hDlg; ofn.lpstrFilter = _T("Images\0*.png;*.jpg;*.jpeg;*.bmp;*.gif;*.tif;*.tiff\0"); ofn.nFilterIndex = 1; ofn.lpstrFile = filename; ofn.nMaxFile = MAX_PATH; -// ofn.lpstrInitialDir = m_FDestFolder; + // ofn.lpstrInitialDir = m_FDestFolder; ofn.Flags = OFN_FILEMUSTEXIST | OFN_READONLY; - if(GetOpenFileName(&ofn)){ - SetDlgItemText(hDlg,ID_edtSize,filename); + if (GetOpenFileName(&ofn)) { + SetDlgItemText(hDlg, ID_edtSize, filename); } break; } @@ -100,72 +102,73 @@ TfrmMain::CHandleMapping TfrmMain::_HandleMapping; INT_PTR CALLBACK TfrmMain::DlgTfrmMain(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_CTLCOLOREDIT || msg == WM_CTLCOLORSTATIC) { - switch ( GetWindowLongPtr(( HWND )lParam, GWL_ID )) { - case IDC_HEADERBAR: - SetTextColor((HDC)wParam,GetSysColor(COLOR_WINDOWTEXT)); - break; - default: - return 0; + switch (GetWindowLongPtr((HWND)lParam, GWL_ID)) { + case IDC_HEADERBAR: + SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); + break; + default: + return 0; } SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); return (INT_PTR)GetStockObject(WHITE_BRUSH); //GetSysColorBrush(COLOR_WINDOW); } CHandleMapping::iterator wnd; - if(msg==WM_INITDIALOG) { + if (msg == WM_INITDIALOG) { wnd = _HandleMapping.insert(CHandleMapping::value_type(hWnd, reinterpret_cast<TfrmMain*>(lParam))).first; wnd->second->m_hWnd = hWnd; wnd->second->wmInitdialog(wParam, lParam); return 0; } - wnd=_HandleMapping.find(hWnd); - if(wnd==_HandleMapping.end()) { //something screwed up dialog! + wnd = _HandleMapping.find(hWnd); + if (wnd == _HandleMapping.end()) { //something screwed up dialog! return 0; //do not use ::DefWindowProc(hWnd, msg, wParam, lParam); } - switch (msg){ - case WM_DROPFILES:{ /// Drag&Drop of local files + switch (msg) { + case WM_DROPFILES:{ /// Drag&Drop of local files TCHAR filename[MAX_PATH]; - if(!DragQueryFile((HDROP)wParam,0,filename,MAX_PATH)) *filename='\0'; + if (!DragQueryFile((HDROP)wParam, 0, filename, MAX_PATH)) *filename = '\0'; DragFinish((HDROP)wParam); - if(wnd->second->m_hwndTabPage) - ShowWindow(wnd->second->m_hwndTabPage,SW_HIDE); - TAB_INFO itab={TCIF_PARAM}; - wnd->second->m_opt_tabCapture=2; // activate file tab - TabCtrl_SetCurSel(wnd->second->m_hwndTab,wnd->second->m_opt_tabCapture); - TabCtrl_GetItem(wnd->second->m_hwndTab,wnd->second->m_opt_tabCapture,&itab); - wnd->second->m_hwndTabPage=itab.hwndTabPage; - ShowWindow(wnd->second->m_hwndTabPage,SW_SHOW); - SetDlgItemText(wnd->second->m_hwndTabPage,ID_edtSize,filename); - break;} - case WM_COMMAND: - wnd->second->wmCommand(wParam, lParam); - break; - case WM_CLOSE: - wnd->second->wmClose(wParam, lParam); - break; - case WM_DESTROY: - delete wnd->second; - break; - case WM_NOTIFY: - wnd->second->wmNotify(wParam, lParam); - break; - case WM_TIMER: - wnd->second->wmTimer(wParam, lParam); - break; - case UM_CLOSING: - wnd->second->UMClosing(wParam, lParam); - break; - case UM_EVENT: - wnd->second->UMevent(wParam, lParam); - break; + if (wnd->second->m_hwndTabPage) + ShowWindow(wnd->second->m_hwndTabPage, SW_HIDE); + TAB_INFO itab = { TCIF_PARAM }; + wnd->second->m_opt_tabCapture = 2; // activate file tab + TabCtrl_SetCurSel(wnd->second->m_hwndTab, wnd->second->m_opt_tabCapture); + TabCtrl_GetItem(wnd->second->m_hwndTab, wnd->second->m_opt_tabCapture, &itab); + wnd->second->m_hwndTabPage = itab.hwndTabPage; + ShowWindow(wnd->second->m_hwndTabPage, SW_SHOW); + SetDlgItemText(wnd->second->m_hwndTabPage, ID_edtSize, filename); + break; } + case WM_COMMAND: + wnd->second->wmCommand(wParam, lParam); + break; + case WM_CLOSE: + wnd->second->wmClose(wParam, lParam); + break; + case WM_DESTROY: + delete wnd->second; + break; + case WM_NOTIFY: + wnd->second->wmNotify(wParam, lParam); + break; + case WM_TIMER: + wnd->second->wmTimer(wParam, lParam); + break; + case UM_CLOSING: + wnd->second->UMClosing(wParam, lParam); + break; + case UM_EVENT: + wnd->second->UMevent(wParam, lParam); + break; } return 0; } //--------------------------------------------------------------------------- //WM_INITDIALOG: -void TfrmMain::wmInitdialog(WPARAM wParam, LPARAM lParam) { +void TfrmMain::wmInitdialog(WPARAM, LPARAM) +{ HWND hCtrl; /// Taskbar and Window icon SendMessage(m_hWnd, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); @@ -182,13 +185,13 @@ void TfrmMain::wmInitdialog(WPARAM wParam, LPARAM lParam) { SendDlgItemMessage(m_hWnd, IDC_HEADERBAR, WM_SETICON, ICON_BIG, (LPARAM)GetIcon(ICO_MAIN)); /// Timed controls - CheckDlgButton(m_hWnd,ID_chkTimed, m_opt_chkTimed ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemInt (m_hWnd,ID_edtTimed, (UINT)m_opt_edtTimed, FALSE); - SendDlgItemMessage(m_hWnd, ID_upTimed, UDM_SETRANGE, 0, (LPARAM)MAKELONG(250, 1)); + CheckDlgButton(m_hWnd, ID_chkTimed, m_opt_chkTimed ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemInt(m_hWnd, ID_edtTimed, (UINT)m_opt_edtTimed, FALSE); + SendDlgItemMessage(m_hWnd, ID_upTimed, UDM_SETRANGE, 0, (LPARAM)MAKELONG(250, 1)); chkTimedClick(); //enable disable Timed controls /// create Image list for tab control - if(!m_himlTab){ + if (!m_himlTab) { //m_himlTab = ImageList_Create(16, 16, PluginConfig.m_bIsXP ? ILC_COLOR32 | ILC_MASK : ILC_COLOR8 | ILC_MASK, 2, 0); m_himlTab = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1); ImageList_AddIcon(m_himlTab, GetIcon(ICO_TARGET)); @@ -198,123 +201,127 @@ void TfrmMain::wmInitdialog(WPARAM wParam, LPARAM lParam) { /// create the tab control. { - m_hwndTab = GetDlgItem(m_hWnd, IDC_CAPTURETAB); - TabCtrl_SetImageList(m_hwndTab, m_himlTab); - TabCtrl_SetItemExtra(m_hwndTab, sizeof(TAB_INFO) - sizeof(TCITEMHEADER)); - RECT rcTab; - TAB_INFO itab; - itab.hwndMain = m_hWnd; - itab.hwndTab = m_hwndTab; - itab.tcih.mask = TCIF_PARAM|TCIF_TEXT|TCIF_IMAGE; - - /// Add a tab for each of the three child dialog boxes. - itab.tcih.pszText = TranslateT("Window"); - itab.tcih.iImage = 0; - itab.hwndTabPage = CreateDialogParam(g_hSendSS,MAKEINTRESOURCE(IDD_UMain_CaptureWindow),m_hWnd,DlgProc_CaptureTabPage,IDD_UMain_CaptureWindow); - TabCtrl_InsertItem(m_hwndTab,0,&itab); - /// get tab boundaries (required after 1st tab) - GetClientRect(m_hwndTab,&rcTab); - MapWindowPoints(m_hwndTab,m_hWnd,(POINT*)&rcTab,2); - TabCtrl_AdjustRect(m_hwndTab,0,&rcTab); - rcTab.bottom-=rcTab.top; rcTab.right-=rcTab.left; - /// - SetWindowPos(itab.hwndTabPage,HWND_TOP,rcTab.left,rcTab.top,rcTab.right,rcTab.bottom,0); - CheckDlgButton(itab.hwndTabPage, ID_chkIndirectCapture, m_opt_chkIndirectCapture ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(itab.hwndTabPage, ID_chkClientArea, m_opt_chkClientArea ? BST_CHECKED : BST_UNCHECKED); - - itab.tcih.pszText = TranslateT("Desktop"); - itab.tcih.iImage = 1; - itab.hwndTabPage = CreateDialogParam(g_hSendSS,MAKEINTRESOURCE(IDD_UMain_CaptureDesktop),m_hWnd,DlgProc_CaptureTabPage,IDD_UMain_CaptureDesktop); - TabCtrl_InsertItem(m_hwndTab,1,&itab); - SetWindowPos(itab.hwndTabPage,HWND_TOP,rcTab.left,rcTab.top,rcTab.right,rcTab.bottom,0); - - hCtrl = GetDlgItem(itab.hwndTabPage, ID_edtCaption); - ComboBox_ResetContent(hCtrl); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("<Entire Desktop>")) ,0); - ComboBox_SetCurSel (hCtrl,0); - if(m_MonitorCount >1) { - TCHAR tszTemp[120]; - for(size_t mon=0; mon<m_MonitorCount; ++mon) { /// @todo : fix format for non MSVC compilers - mir_sntprintf(tszTemp, _countof(tszTemp),_T("%Iu. %s%s"), - mon+1, TranslateT("Monitor"), - (m_Monitors[mon].dwFlags & MONITORINFOF_PRIMARY) ? TranslateT(" (primary)") : _T("") - ); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, tszTemp) , mon+1); + m_hwndTab = GetDlgItem(m_hWnd, IDC_CAPTURETAB); + TabCtrl_SetImageList(m_hwndTab, m_himlTab); + TabCtrl_SetItemExtra(m_hwndTab, sizeof(TAB_INFO) - sizeof(TCITEMHEADER)); + RECT rcTab; + TAB_INFO itab; + itab.hwndMain = m_hWnd; + itab.hwndTab = m_hwndTab; + itab.tcih.mask = TCIF_PARAM | TCIF_TEXT | TCIF_IMAGE; + + /// Add a tab for each of the three child dialog boxes. + itab.tcih.pszText = TranslateT("Window"); + itab.tcih.iImage = 0; + itab.hwndTabPage = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UMain_CaptureWindow), m_hWnd, DlgProc_CaptureTabPage, IDD_UMain_CaptureWindow); + TabCtrl_InsertItem(m_hwndTab, 0, &itab); + /// get tab boundaries (required after 1st tab) + GetClientRect(m_hwndTab, &rcTab); + MapWindowPoints(m_hwndTab, m_hWnd, (POINT*)&rcTab, 2); + TabCtrl_AdjustRect(m_hwndTab, 0, &rcTab); + rcTab.bottom -= rcTab.top; rcTab.right -= rcTab.left; + /// + SetWindowPos(itab.hwndTabPage, HWND_TOP, rcTab.left, rcTab.top, rcTab.right, rcTab.bottom, 0); + CheckDlgButton(itab.hwndTabPage, ID_chkIndirectCapture, m_opt_chkIndirectCapture ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(itab.hwndTabPage, ID_chkClientArea, m_opt_chkClientArea ? BST_CHECKED : BST_UNCHECKED); + + itab.tcih.pszText = TranslateT("Desktop"); + itab.tcih.iImage = 1; + itab.hwndTabPage = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UMain_CaptureDesktop), m_hWnd, DlgProc_CaptureTabPage, IDD_UMain_CaptureDesktop); + TabCtrl_InsertItem(m_hwndTab, 1, &itab); + SetWindowPos(itab.hwndTabPage, HWND_TOP, rcTab.left, rcTab.top, rcTab.right, rcTab.bottom, 0); + + hCtrl = GetDlgItem(itab.hwndTabPage, ID_edtCaption); + ComboBox_ResetContent(hCtrl); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("<Entire Desktop>")), 0); + ComboBox_SetCurSel(hCtrl, 0); + if (m_MonitorCount > 1) { + TCHAR tszTemp[120]; + for (size_t mon = 0; mon < m_MonitorCount; ++mon) { /// @todo : fix format for non MSVC compilers + mir_sntprintf(tszTemp, _countof(tszTemp), _T("%Iu. %s%s"), + mon + 1, TranslateT("Monitor"), + (m_Monitors[mon].dwFlags & MONITORINFOF_PRIMARY) ? TranslateT(" (primary)") : _T("") + ); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, tszTemp), mon + 1); + } + ComboBox_SelectItemData(hCtrl, m_opt_cboxDesktop); //use Workaround for MS bug ComboBox_SelectItemData } - ComboBox_SelectItemData (hCtrl, -1, m_opt_cboxDesktop); //use Workaround for MS bug ComboBox_SelectItemData - } - PostMessage(m_hWnd, WM_COMMAND, MAKEWPARAM(ID_edtCaption, CBN_SELCHANGE),(LPARAM)hCtrl); - - itab.tcih.pszText = TranslateT("File"); - itab.tcih.iImage = 2; - itab.hwndTabPage = CreateDialogParam(g_hSendSS,MAKEINTRESOURCE(IDD_UMain_CaptureFile),m_hWnd,DlgProc_CaptureTabPage,IDD_UMain_CaptureFile); - TabCtrl_InsertItem(m_hwndTab,2,&itab); - SetWindowPos(itab.hwndTabPage,HWND_TOP,rcTab.left,rcTab.top,rcTab.right,rcTab.bottom,0); - - /// select tab and set m_hwndTabPage - TabCtrl_SetCurSel(m_hwndTab, m_opt_tabCapture); - itab.tcih.mask = TCIF_PARAM; - TabCtrl_GetItem(m_hwndTab,m_opt_tabCapture,&itab); - m_hwndTabPage = itab.hwndTabPage; - ShowWindow(m_hwndTabPage,SW_SHOW); - - /// enable Drag&Drop for local file pane - typedef BOOL (WINAPI *ChangeWindowMessageFilterEx_t)(HWND hwnd,UINT message,DWORD action,PCHANGEFILTERSTRUCT pChangeFilterStruct); - ChangeWindowMessageFilterEx_t pChangeWindowMessageFilterEx; - pChangeWindowMessageFilterEx=(ChangeWindowMessageFilterEx_t)GetProcAddress(GetModuleHandleA("user32"),"ChangeWindowMessageFilterEx"); - if(pChangeWindowMessageFilterEx){ /// Win7+, UAC fix - pChangeWindowMessageFilterEx(m_hWnd,WM_DROPFILES,MSGFLT_ALLOW,NULL); - pChangeWindowMessageFilterEx(m_hWnd,WM_COPYDATA,MSGFLT_ALLOW,NULL); - pChangeWindowMessageFilterEx(m_hWnd,0x0049/*WM_COPYGLOBALDATA*/,MSGFLT_ALLOW,NULL); - } - DragAcceptFiles(m_hWnd,1); + PostMessage(m_hWnd, WM_COMMAND, MAKEWPARAM(ID_edtCaption, CBN_SELCHANGE), (LPARAM)hCtrl); + + itab.tcih.pszText = TranslateT("File"); + itab.tcih.iImage = 2; + itab.hwndTabPage = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UMain_CaptureFile), m_hWnd, DlgProc_CaptureTabPage, IDD_UMain_CaptureFile); + TabCtrl_InsertItem(m_hwndTab, 2, &itab); + SetWindowPos(itab.hwndTabPage, HWND_TOP, rcTab.left, rcTab.top, rcTab.right, rcTab.bottom, 0); + + /// select tab and set m_hwndTabPage + TabCtrl_SetCurSel(m_hwndTab, m_opt_tabCapture); + itab.tcih.mask = TCIF_PARAM; + TabCtrl_GetItem(m_hwndTab, m_opt_tabCapture, &itab); + m_hwndTabPage = itab.hwndTabPage; + ShowWindow(m_hwndTabPage, SW_SHOW); + + /// enable Drag&Drop for local file pane + typedef BOOL(WINAPI *ChangeWindowMessageFilterEx_t)(HWND hwnd, UINT message, DWORD action, PCHANGEFILTERSTRUCT pChangeFilterStruct); + ChangeWindowMessageFilterEx_t pChangeWindowMessageFilterEx; + pChangeWindowMessageFilterEx = (ChangeWindowMessageFilterEx_t)GetProcAddress(GetModuleHandleA("user32"), "ChangeWindowMessageFilterEx"); + if (pChangeWindowMessageFilterEx) { /// Win7+, UAC fix + pChangeWindowMessageFilterEx(m_hWnd, WM_DROPFILES, MSGFLT_ALLOW, NULL); + pChangeWindowMessageFilterEx(m_hWnd, WM_COPYDATA, MSGFLT_ALLOW, NULL); + pChangeWindowMessageFilterEx(m_hWnd, 0x0049/*WM_COPYGLOBALDATA*/, MSGFLT_ALLOW, NULL); + } + DragAcceptFiles(m_hWnd, 1); } /// init Format combo box { - hCtrl = GetDlgItem(m_hWnd, ID_cboxFormat); - ComboBox_ResetContent(hCtrl); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("PNG")),0); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("JPG")),1); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("BMP")),2); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("TIF")),3); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("GIF")),4); - ComboBox_SelectItemData (hCtrl, -1, m_opt_cboxFormat); //use Workaround for MS bug ComboBox_SelectItemData + hCtrl = GetDlgItem(m_hWnd, ID_cboxFormat); + ComboBox_ResetContent(hCtrl); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("PNG")), 0); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("JPG")), 1); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("BMP")), 2); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("TIF")), 3); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("GIF")), 4); + ComboBox_SelectItemData(hCtrl, m_opt_cboxFormat); //use Workaround for MS bug ComboBox_SelectItemData } /// init SendBy combo box { - hCtrl = GetDlgItem(m_hWnd, ID_cboxSendBy); - ComboBox_ResetContent(hCtrl); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("<Only save>")) ,SS_JUSTSAVE); - if(m_hContact){ - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("File Transfer")),SS_FILESEND); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("E-mail")) ,SS_EMAIL); - if (g_myGlobals.PluginHTTPExist) { - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("HTTP Server")) ,SS_HTTPSERVER); - }else if(m_opt_cboxSendBy == SS_HTTPSERVER) { + hCtrl = GetDlgItem(m_hWnd, ID_cboxSendBy); + ComboBox_ResetContent(hCtrl); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("<Only save>")), SS_JUSTSAVE); + if (m_hContact) { + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("File Transfer")), SS_FILESEND); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("E-mail")), SS_EMAIL); + if (g_myGlobals.PluginHTTPExist) { + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("HTTP Server")), SS_HTTPSERVER); + } + else if (m_opt_cboxSendBy == SS_HTTPSERVER) { + m_opt_cboxSendBy = SS_IMAGESHACK; + } + if (g_myGlobals.PluginFTPExist) { + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("FTP File")), SS_FTPFILE); + } + else if (m_opt_cboxSendBy == SS_FTPFILE) { + m_opt_cboxSendBy = SS_IMAGESHACK; + } + } + else if (m_opt_cboxSendBy == SS_FILESEND || m_opt_cboxSendBy == SS_EMAIL || m_opt_cboxSendBy == SS_HTTPSERVER || m_opt_cboxSendBy == SS_FTPFILE) { m_opt_cboxSendBy = SS_IMAGESHACK; } - if (g_myGlobals.PluginFTPExist) { - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("FTP File")) ,SS_FTPFILE); - }else if(m_opt_cboxSendBy == SS_FTPFILE) { + if (g_myGlobals.PluginDropboxExist) { + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("Dropbox")), SS_DROPBOX); + } + else if (m_opt_cboxSendBy == SS_DROPBOX) { m_opt_cboxSendBy = SS_IMAGESHACK; } - }else if(m_opt_cboxSendBy == SS_FILESEND || m_opt_cboxSendBy == SS_EMAIL || m_opt_cboxSendBy == SS_HTTPSERVER || m_opt_cboxSendBy == SS_FTPFILE) { - m_opt_cboxSendBy = SS_IMAGESHACK; - } - if (g_myGlobals.PluginDropboxExist) { - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("Dropbox")), SS_DROPBOX); - }else if(m_opt_cboxSendBy == SS_DROPBOX) { - m_opt_cboxSendBy = SS_IMAGESHACK; - } - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("ImageShack")), SS_IMAGESHACK); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (30m)")), SS_UPLOADPIE_30M); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1d)")), SS_UPLOADPIE_1D); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1w)")), SS_UPLOADPIE_1W); - ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("imgur")), SS_IMGUR); - ComboBox_SelectItemData (hCtrl, -1, m_opt_cboxSendBy); //use Workaround for MS bug ComboBox_SelectItemData + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("ImageShack")), SS_IMAGESHACK); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (30m)")), SS_UPLOADPIE_30M); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1d)")), SS_UPLOADPIE_1D); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upload Pie (1w)")), SS_UPLOADPIE_1W); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, _T("imgur")), SS_IMGUR); + ComboBox_SelectItemData(hCtrl, m_opt_cboxSendBy); //use Workaround for MS bug ComboBox_SelectItemData } /// init footer options - CheckDlgButton(m_hWnd,ID_chkOpenAgain, m_opt_chkOpenAgain ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hWnd, ID_chkOpenAgain, m_opt_chkOpenAgain ? BST_CHECKED : BST_UNCHECKED); if (hCtrl = GetDlgItem(m_hWnd, ID_btnAbout)) { SendDlgItemMessage(m_hWnd, ID_btnAbout, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Information"), MBBF_TCHAR); @@ -367,328 +374,342 @@ void TfrmMain::wmInitdialog(WPARAM wParam, LPARAM lParam) { } //WM_COMMAND: -void TfrmMain::wmCommand(WPARAM wParam, LPARAM lParam) { +void TfrmMain::wmCommand(WPARAM wParam, LPARAM lParam) +{ //--------------------------------------------------------------------------- int IDControl = LOWORD(wParam); switch (HIWORD(wParam)) { - case BN_CLICKED: //Button controls - switch(IDControl) { - case IDCANCEL: // ESC pressed - this->Close(); - break; - case ID_chkTimed: - m_opt_chkTimed = (BYTE)Button_GetCheck((HWND)lParam); - TfrmMain::chkTimedClick(); - break; - case ID_chkIndirectCapture: - m_opt_chkIndirectCapture = (BYTE)Button_GetCheck((HWND)lParam); - break; - case ID_chkClientArea: - m_opt_chkClientArea = (BYTE)Button_GetCheck((HWND)lParam); - if(m_hTargetWindow) - edtSizeUpdate(m_hTargetWindow, m_opt_chkClientArea, GetParent((HWND)lParam), ID_edtSize); - break; - case ID_imgTarget: - if(m_opt_tabCapture!=0) break; - m_hLastWin=NULL; - SetTimer(m_hWnd,ID_imgTarget,BUTTON_POLLDELAY,NULL); - break; - case ID_btnAbout: - TfrmMain::btnAboutClick(); - break; - case ID_btnExplore: - TfrmMain::btnExploreClick(); - break; - case ID_chkDesc:{ - m_opt_btnDesc=!m_opt_btnDesc; - HICON hIcon=GetIconBtn(m_opt_btnDesc?ICO_BTN_DESCON:ICO_BTN_DESC); - SendMessage((HWND)lParam,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcon); - break;} - case ID_chkDeleteAfterSend:{ - m_opt_btnDeleteAfterSend=!m_opt_btnDeleteAfterSend; - HICON hIcon=GetIconBtn(m_opt_btnDeleteAfterSend?ICO_BTN_DELON:ICO_BTN_DEL); - SendMessage((HWND)lParam,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcon); - if(m_cSend) m_cSend->m_bDeleteAfterSend=m_opt_btnDeleteAfterSend; - break;} - case ID_chkEditor:{ - m_opt_chkEditor=!m_opt_chkEditor; - HICON hIcon=GetIconBtn(m_opt_chkEditor?ICO_BTN_EDITON:ICO_BTN_EDIT); - SendMessage((HWND)lParam,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcon); - break;} - case ID_chkOpenAgain: - m_opt_chkOpenAgain=Button_GetCheck((HWND)lParam); - break; - case ID_btnCapture: - TfrmMain::btnCaptureClick(); - break; - default: - break; - } + case BN_CLICKED: //Button controls + switch (IDControl) { + case IDCANCEL: // ESC pressed + this->Close(); break; - case CBN_SELCHANGE: //ComboBox controls - switch(IDControl) { - //lParam = Handle to the control - case ID_cboxFormat: //not finish - m_opt_cboxFormat = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); - break; - case ID_cboxSendBy: - m_opt_cboxSendBy = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); - cboxSendByChange(); - break; - case ID_edtCaption: //cboxDesktopChange - m_opt_cboxDesktop = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); - m_hTargetWindow = NULL; - if (m_opt_cboxDesktop > 0) { - edtSizeUpdate(m_Monitors[m_opt_cboxDesktop-1].rcMonitor, GetParent((HWND)lParam), ID_edtSize); - } - else { - edtSizeUpdate(m_VirtualScreen, GetParent((HWND)lParam), ID_edtSize); - } - break; - default: - break; - } + case ID_chkTimed: + m_opt_chkTimed = (BYTE)Button_GetCheck((HWND)lParam); + TfrmMain::chkTimedClick(); + break; + case ID_chkIndirectCapture: + m_opt_chkIndirectCapture = (BYTE)Button_GetCheck((HWND)lParam); + break; + case ID_chkClientArea: + m_opt_chkClientArea = (BYTE)Button_GetCheck((HWND)lParam); + if (m_hTargetWindow) + edtSizeUpdate(m_hTargetWindow, m_opt_chkClientArea, GetParent((HWND)lParam), ID_edtSize); + break; + case ID_imgTarget: + if (m_opt_tabCapture != 0) break; + m_hLastWin = NULL; + SetTimer(m_hWnd, ID_imgTarget, BUTTON_POLLDELAY, NULL); + break; + case ID_btnAbout: + TfrmMain::btnAboutClick(); + break; + case ID_btnExplore: + TfrmMain::btnExploreClick(); + break; + case ID_chkDesc:{ + m_opt_btnDesc = !m_opt_btnDesc; + HICON hIcon = GetIconBtn(m_opt_btnDesc ? ICO_BTN_DESCON : ICO_BTN_DESC); + SendMessage((HWND)lParam, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); + break; } + case ID_chkDeleteAfterSend:{ + m_opt_btnDeleteAfterSend = !m_opt_btnDeleteAfterSend; + HICON hIcon = GetIconBtn(m_opt_btnDeleteAfterSend ? ICO_BTN_DELON : ICO_BTN_DEL); + SendMessage((HWND)lParam, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); + if (m_cSend) m_cSend->m_bDeleteAfterSend = m_opt_btnDeleteAfterSend; + break; } + case ID_chkEditor:{ + m_opt_chkEditor = !m_opt_chkEditor; + HICON hIcon = GetIconBtn(m_opt_chkEditor ? ICO_BTN_EDITON : ICO_BTN_EDIT); + SendMessage((HWND)lParam, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); + break; } + case ID_chkOpenAgain: + m_opt_chkOpenAgain = Button_GetCheck((HWND)lParam); break; - case EN_CHANGE: //Edit controls - switch(IDControl) { - //lParam = Handle to the control - case ID_edtQuality: - m_opt_edtQuality = (BYTE)GetDlgItemInt(m_hWnd, ID_edtQuality, NULL, FALSE); - break; - case ID_edtTimed: - m_opt_edtTimed = (BYTE)GetDlgItemInt(m_hWnd, ID_edtTimed, NULL, FALSE); - break; - default: - break; + case ID_btnCapture: + TfrmMain::btnCaptureClick(); + break; + default: + break; + } + break; + case CBN_SELCHANGE: //ComboBox controls + switch (IDControl) { + //lParam = Handle to the control + case ID_cboxFormat: //not finish + m_opt_cboxFormat = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); + break; + case ID_cboxSendBy: + m_opt_cboxSendBy = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); + cboxSendByChange(); + break; + case ID_edtCaption: //cboxDesktopChange + m_opt_cboxDesktop = (BYTE)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); + m_hTargetWindow = NULL; + if (m_opt_cboxDesktop > 0) { + edtSizeUpdate(m_Monitors[m_opt_cboxDesktop - 1].rcMonitor, GetParent((HWND)lParam), ID_edtSize); + } + else { + edtSizeUpdate(m_VirtualScreen, GetParent((HWND)lParam), ID_edtSize); } break; default: break; + } + break; + case EN_CHANGE: //Edit controls + switch (IDControl) { + //lParam = Handle to the control + case ID_edtQuality: + m_opt_edtQuality = (BYTE)GetDlgItemInt(m_hWnd, ID_edtQuality, NULL, FALSE); + break; + case ID_edtTimed: + m_opt_edtTimed = (BYTE)GetDlgItemInt(m_hWnd, ID_edtTimed, NULL, FALSE); + break; + default: + break; + } + break; + default: + break; } } //WM_CLOSE: -void TfrmMain::wmClose(WPARAM wParam, LPARAM lParam) { +void TfrmMain::wmClose(WPARAM, LPARAM) +{ DestroyWindow(m_hWnd); return; } //WM_TIMER: -const int g_iTargetBorder=7; -void TfrmMain::SetTargetWindow(HWND hwnd){ - if(!hwnd){ +const int g_iTargetBorder = 7; +void TfrmMain::SetTargetWindow(HWND hwnd) +{ + if (!hwnd) { POINT point; GetCursorPos(&point); - hwnd=WindowFromPoint(point); -// if(!((GetAsyncKeyState(VK_SHIFT)|GetAsyncKeyState(VK_MENU))&0x8000)) - for(HWND hTMP; (hTMP=GetParent(hwnd)); hwnd=hTMP); + hwnd = WindowFromPoint(point); + // if(!((GetAsyncKeyState(VK_SHIFT)|GetAsyncKeyState(VK_MENU))&0x8000)) + for (HWND hTMP; (hTMP = GetParent(hwnd)); hwnd = hTMP); } - m_hTargetWindow=hwnd; - int len=GetWindowTextLength(m_hTargetWindow)+1; + m_hTargetWindow = hwnd; + int len = GetWindowTextLength(m_hTargetWindow) + 1; TCHAR* lpTitle; - if(len>1){ - lpTitle=(TCHAR*)mir_alloc(len*sizeof(TCHAR)); - GetWindowText(m_hTargetWindow,lpTitle,len); - }else{//no WindowText present, use WindowClass - lpTitle=(TCHAR*)mir_alloc(64*sizeof(TCHAR)); - RealGetWindowClass(m_hTargetWindow,lpTitle,64); + if (len > 1) { + lpTitle = (TCHAR*)mir_alloc(len*sizeof(TCHAR)); + GetWindowText(m_hTargetWindow, lpTitle, len); + } + else {//no WindowText present, use WindowClass + lpTitle = (TCHAR*)mir_alloc(64 * sizeof(TCHAR)); + RealGetWindowClass(m_hTargetWindow, lpTitle, 64); } - SetDlgItemText(m_hwndTabPage,ID_edtCaption,lpTitle); + SetDlgItemText(m_hwndTabPage, ID_edtCaption, lpTitle); mir_free(lpTitle); - edtSizeUpdate(m_hTargetWindow,m_opt_chkClientArea,m_hwndTabPage,ID_edtSize); + edtSizeUpdate(m_hTargetWindow, m_opt_chkClientArea, m_hwndTabPage, ID_edtSize); } -void TfrmMain::wmTimer(WPARAM wParam, LPARAM lParam){ - if(wParam==ID_imgTarget){// Timer for Target selector + +void TfrmMain::wmTimer(WPARAM wParam, LPARAM) +{ + if (wParam == ID_imgTarget) {// Timer for Target selector static int primarymouse; - if(!m_hTargetHighlighter){ - primarymouse=GetSystemMetrics(SM_SWAPBUTTON)?VK_RBUTTON:VK_LBUTTON; - m_hTargetHighlighter=CreateWindowEx(WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOOLWINDOW,(TCHAR*)g_clsTargetHighlighter,NULL,WS_POPUP,0,0,0,0,NULL,NULL,g_hSendSS,NULL); - if(!m_hTargetHighlighter) return; - SetLayeredWindowAttributes(m_hTargetHighlighter,0,123,LWA_ALPHA); - SetSystemCursor(CopyCursor(GetIcon(ICO_TARGET)),OCR_IBEAM);//text cursor - SetSystemCursor(CopyCursor(GetIcon(ICO_TARGET)),OCR_NORMAL); + if (!m_hTargetHighlighter) { + primarymouse = GetSystemMetrics(SM_SWAPBUTTON) ? VK_RBUTTON : VK_LBUTTON; + m_hTargetHighlighter = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, (TCHAR*)g_clsTargetHighlighter, NULL, WS_POPUP, 0, 0, 0, 0, NULL, NULL, g_hSendSS, NULL); + if (!m_hTargetHighlighter) return; + SetLayeredWindowAttributes(m_hTargetHighlighter, 0, 123, LWA_ALPHA); + SetSystemCursor(CopyCursor(GetIcon(ICO_TARGET)), OCR_IBEAM);//text cursor + SetSystemCursor(CopyCursor(GetIcon(ICO_TARGET)), OCR_NORMAL); SetActiveWindow(m_hTargetHighlighter); // activate highlighter to fix focus problems with UAC (unelevated GetAsyncKeyState() fails if an elevated app got focus) Hide(); } - if(!(GetAsyncKeyState(primarymouse)&0x8000)){ - KillTimer(m_hWnd,ID_imgTarget); - SystemParametersInfo(SPI_SETCURSORS,0,NULL,0); - DestroyWindow(m_hTargetHighlighter),m_hTargetHighlighter=NULL; + if (!(GetAsyncKeyState(primarymouse) & 0x8000)) { + KillTimer(m_hWnd, ID_imgTarget); + SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0); + DestroyWindow(m_hTargetHighlighter), m_hTargetHighlighter = NULL; SetTargetWindow(m_hLastWin); Show(); return; } POINT point; GetCursorPos(&point); - HWND hwnd=WindowFromPoint(point); - if(!((GetAsyncKeyState(VK_SHIFT)|GetAsyncKeyState(VK_MENU))&0x8000)) - for(HWND hTMP; (hTMP=GetAncestor(hwnd,GA_PARENT)) && IsChild(hTMP,hwnd); hwnd=hTMP); - else{ - ScreenToClient(hwnd,&point); - HWND hTMP; if((hTMP=RealChildWindowFromPoint(hwnd,point))) - hwnd=hTMP; + HWND hwnd = WindowFromPoint(point); + if (!((GetAsyncKeyState(VK_SHIFT) | GetAsyncKeyState(VK_MENU)) & 0x8000)) + for (HWND hTMP; (hTMP = GetAncestor(hwnd, GA_PARENT)) && IsChild(hTMP, hwnd); hwnd = hTMP); + else { + ScreenToClient(hwnd, &point); + HWND hTMP; if ((hTMP = RealChildWindowFromPoint(hwnd, point))) + hwnd = hTMP; } - if(hwnd!=m_hLastWin){ - m_hLastWin=hwnd; + if (hwnd != m_hLastWin) { + m_hLastWin = hwnd; RECT rect; - if(m_opt_chkClientArea){ - GetClientRect(hwnd,&rect); - ClientToScreen(hwnd,(POINT*)&rect); - rect.right=rect.left+rect.right; - rect.bottom=rect.top+rect.bottom; - }else - GetWindowRect(hwnd,&rect); - int width=rect.right-rect.left; - int height=rect.bottom-rect.top; - if(g_iTargetBorder){ - SetWindowPos(m_hTargetHighlighter,NULL,0,0,0,0,SWP_HIDEWINDOW|SWP_NOMOVE|SWP_NOSIZE); - if(width>g_iTargetBorder*2 && height>g_iTargetBorder*2) { - HRGN hRegnNew=CreateRectRgn(0,0,width,height); - HRGN hRgnHole=CreateRectRgn(g_iTargetBorder,g_iTargetBorder,width-g_iTargetBorder,height-g_iTargetBorder); - CombineRgn(hRegnNew,hRegnNew,hRgnHole,RGN_XOR); + if (m_opt_chkClientArea) { + GetClientRect(hwnd, &rect); + ClientToScreen(hwnd, (POINT*)&rect); + rect.right = rect.left + rect.right; + rect.bottom = rect.top + rect.bottom; + } + else + GetWindowRect(hwnd, &rect); + int width = rect.right - rect.left; + int height = rect.bottom - rect.top; + if (g_iTargetBorder) { + SetWindowPos(m_hTargetHighlighter, NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE); + if (width > g_iTargetBorder * 2 && height > g_iTargetBorder * 2) { + HRGN hRegnNew = CreateRectRgn(0, 0, width, height); + HRGN hRgnHole = CreateRectRgn(g_iTargetBorder, g_iTargetBorder, width - g_iTargetBorder, height - g_iTargetBorder); + CombineRgn(hRegnNew, hRegnNew, hRgnHole, RGN_XOR); DeleteObject(hRgnHole); - SetWindowRgn(m_hTargetHighlighter,hRegnNew,FALSE);//cleans up hRegnNew - }else SetWindowRgn(m_hTargetHighlighter,NULL,FALSE); + SetWindowRgn(m_hTargetHighlighter, hRegnNew, FALSE);//cleans up hRegnNew + } + else SetWindowRgn(m_hTargetHighlighter, NULL, FALSE); } - SetWindowPos(m_hTargetHighlighter,HWND_TOPMOST,rect.left,rect.top,width,height,SWP_SHOWWINDOW|SWP_NOACTIVATE); + SetWindowPos(m_hTargetHighlighter, HWND_TOPMOST, rect.left, rect.top, width, height, SWP_SHOWWINDOW | SWP_NOACTIVATE); } return; } - if(wParam==ID_chkTimed){// Timer for Screenshot - #ifdef _DEBUG - OutputDebugStringA("SS Bitmap Timer Start\r\n" ); - #endif - if(!m_bCapture) { //only start once + if (wParam == ID_chkTimed) {// Timer for Screenshot +#ifdef _DEBUG + OutputDebugStringA("SS Bitmap Timer Start\r\n"); +#endif + if (!m_bCapture) { //only start once if (m_Screenshot) { FIP->FI_Unload(m_Screenshot); m_Screenshot = NULL; } m_bCapture = true; switch (m_opt_tabCapture) { - case 0: - m_Screenshot = CaptureWindow(m_hTargetWindow, m_opt_chkClientArea, m_opt_chkIndirectCapture); - break; - case 1: - m_Screenshot = CaptureMonitor((m_opt_cboxDesktop > 0) ? m_Monitors[m_opt_cboxDesktop-1].szDevice : NULL); - break; - case 2: /// edge case, existing local file - break; - #ifdef _DEBUG - default: - OutputDebugStringA("SS Bitmap Timer Stop (no tabCapture)\r\n" ); - #endif + case 0: + m_Screenshot = CaptureWindow(m_hTargetWindow, m_opt_chkClientArea, m_opt_chkIndirectCapture); + break; + case 1: + m_Screenshot = CaptureMonitor((m_opt_cboxDesktop > 0) ? m_Monitors[m_opt_cboxDesktop - 1].szDevice : NULL); + break; + case 2: /// edge case, existing local file + break; +#ifdef _DEBUG + default: + OutputDebugStringA("SS Bitmap Timer Stop (no tabCapture)\r\n"); +#endif } m_bCapture = false; - if (m_Screenshot || m_opt_tabCapture==2) { /// @note : test without "if" - KillTimer(m_hWnd,ID_chkTimed); - #ifdef _DEBUG - OutputDebugStringA("SS Bitmap Timer Stop (CaptureDone)\r\n" ); - #endif - SendMessage(m_hWnd,UM_EVENT, 0, (LPARAM)EVT_CaptureDone); + if (m_Screenshot || m_opt_tabCapture == 2) { /// @note : test without "if" + KillTimer(m_hWnd, ID_chkTimed); +#ifdef _DEBUG + OutputDebugStringA("SS Bitmap Timer Stop (CaptureDone)\r\n"); +#endif + SendMessage(m_hWnd, UM_EVENT, 0, (LPARAM)EVT_CaptureDone); } } } } //WM_NOTIFY: -void TfrmMain::wmNotify(WPARAM wParam, LPARAM lParam) { - switch(((LPNMHDR)lParam)->idFrom) { - case IDC_CAPTURETAB: //TabControl IDC_CAPTURETAB - switch (((LPNMHDR)lParam)->code) { - // HWND hwndFrom; = member is handle to the tab control - // UINT_PTR idFrom; = member is the child window identifier of the tab control. - // UINT code; = member is TCN_SELCHANGE - case TCN_SELCHANGING:{ - if(!m_hwndTabPage) break; - ShowWindow(m_hwndTabPage,SW_HIDE); - m_hwndTabPage=NULL; - break;} - case TCN_SELCHANGE:{ - TAB_INFO itab={TCIF_PARAM}; - m_opt_tabCapture=TabCtrl_GetCurSel(m_hwndTab); - TabCtrl_GetItem(m_hwndTab, m_opt_tabCapture, &itab); - m_hwndTabPage=itab.hwndTabPage; - ShowWindow(m_hwndTabPage, SW_SHOW); - break;} - default: - break; - } - break; +void TfrmMain::wmNotify(WPARAM, LPARAM lParam) +{ + switch (((LPNMHDR)lParam)->idFrom) { + case IDC_CAPTURETAB: //TabControl IDC_CAPTURETAB + switch (((LPNMHDR)lParam)->code) { + // HWND hwndFrom; = member is handle to the tab control + // UINT_PTR idFrom; = member is the child window identifier of the tab control. + // UINT code; = member is TCN_SELCHANGE + case TCN_SELCHANGING:{ + if (!m_hwndTabPage) break; + ShowWindow(m_hwndTabPage, SW_HIDE); + m_hwndTabPage = NULL; + break; } + case TCN_SELCHANGE:{ + TAB_INFO itab = { TCIF_PARAM }; + m_opt_tabCapture = TabCtrl_GetCurSel(m_hwndTab); + TabCtrl_GetItem(m_hwndTab, m_opt_tabCapture, &itab); + m_hwndTabPage = itab.hwndTabPage; + ShowWindow(m_hwndTabPage, SW_SHOW); + break; } default: break; + } + break; + default: + break; } } //UM_CLOSING: -void TfrmMain::UMClosing(WPARAM wParam, LPARAM lParam) { +void TfrmMain::UMClosing(WPARAM wParam, LPARAM lParam) +{ HWND hWnd = (HWND)wParam; switch (lParam) { - case IDD_UAboutForm: - btnAboutOnCloseWindow(hWnd); - break; - case IDD_UEditForm: - ; - break; - default: - break; + case IDD_UAboutForm: + btnAboutOnCloseWindow(hWnd); + break; + case IDD_UEditForm: + ; + break; + default: + break; } } //UM_EVENT: -void TfrmMain::UMevent(WPARAM wParam, LPARAM lParam) { +void TfrmMain::UMevent(WPARAM, LPARAM lParam) +{ //HWND hWnd = (HWND)wParam; switch (lParam) { - case EVT_CaptureDone: - if (!m_Screenshot && m_opt_tabCapture!=2) { - TCHAR *err = TranslateT("Couldn't take a screenshot"); - MessageBox(NULL,err,ERROR_TITLE,MB_OK|MB_ICONWARNING); - Show(); - return; - } - FormClose(); - break; - case EVT_SendFileDone: - break; - case EVT_CheckOpenAgain: - if(m_opt_chkOpenAgain){ - if(m_Screenshot){ - FIP->FI_Unload(m_Screenshot); - m_Screenshot = NULL; - } - Show(); - }else{// Saving Options and close - SaveOptions(); - Close(); + case EVT_CaptureDone: + if (!m_Screenshot && m_opt_tabCapture != 2) { + TCHAR *err = TranslateT("Couldn't take a screenshot"); + MessageBox(NULL, err, ERROR_TITLE, MB_OK | MB_ICONWARNING); + Show(); + return; + } + FormClose(); + break; + case EVT_SendFileDone: + break; + case EVT_CheckOpenAgain: + if (m_opt_chkOpenAgain) { + if (m_Screenshot) { + FIP->FI_Unload(m_Screenshot); + m_Screenshot = NULL; } - break; - default: - break; + Show(); + } + else {// Saving Options and close + SaveOptions(); + Close(); + } + break; + default: + break; } } //--------------------------------------------------------------------------- // Standard konstruktor/destruktor -TfrmMain::TfrmMain() { +TfrmMain::TfrmMain() +{ /* m_opt_XXX */ - m_bOnExitSave = TRUE; - - m_hWnd = NULL; - m_hContact = NULL; - m_bFormAbout=false; - m_hTargetWindow =m_hLastWin=NULL; - m_hTargetHighlighter=NULL; - m_FDestFolder =m_pszFile=m_pszFileDesc=NULL; - m_Screenshot = NULL; + m_bOnExitSave = TRUE; + + m_hWnd = NULL; + m_hContact = NULL; + m_bFormAbout = false; + m_hTargetWindow = m_hLastWin = NULL; + m_hTargetHighlighter = NULL; + m_FDestFolder = m_pszFile = m_pszFileDesc = NULL; + m_Screenshot = NULL; /* m_AlphaColor */ - m_cSend = NULL; + m_cSend = NULL; - m_Monitors = NULL; - m_MonitorCount = MonitorInfoEnum(m_Monitors, m_VirtualScreen); + m_Monitors = NULL; + m_MonitorCount = MonitorInfoEnum(m_Monitors, m_VirtualScreen); /* m_opt_XXX */ LoadOptions(); - m_bCapture = false; + m_bCapture = false; /* m_hwndTab,m_hwndTabPage */ - m_himlTab = NULL; + m_himlTab = NULL; } -TfrmMain::~TfrmMain() { +TfrmMain::~TfrmMain() +{ _HandleMapping.erase(m_hWnd); mir_free(m_pszFile); mir_free(m_FDestFolder); @@ -696,46 +717,48 @@ TfrmMain::~TfrmMain() { mir_free(m_Monitors); if (m_Screenshot) FIP->FI_Unload(m_Screenshot); if (m_cSend) delete m_cSend; - if(m_hTargetHighlighter){ - DestroyWindow(m_hTargetHighlighter),m_hTargetHighlighter=NULL; - SystemParametersInfo(SPI_SETCURSORS,0,NULL,0); + if (m_hTargetHighlighter) { + DestroyWindow(m_hTargetHighlighter), m_hTargetHighlighter = NULL; + SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0); } } //--------------------------------------------------------------------------- // Load / Saving options from miranda's database -void TfrmMain::LoadOptions(void) { - DWORD rgb = db_get_dw(NULL, SZ_SENDSS, "AlphaColor", 16777215); - m_AlphaColor.rgbRed = GetRValue(rgb); - m_AlphaColor.rgbGreen = GetGValue(rgb); - m_AlphaColor.rgbBlue = GetBValue(rgb); - m_AlphaColor.rgbReserved = 0; - -// m_opt_chkEmulateClick = db_get_b(NULL, SZ_SENDSS, "AutoSend", 1); - m_opt_edtQuality = db_get_b(NULL, SZ_SENDSS, "JpegQuality", 75); - - m_opt_tabCapture = db_get_b(NULL, SZ_SENDSS, "Capture", 0); - m_opt_chkIndirectCapture = db_get_b(NULL, SZ_SENDSS, "IndirectCapture", 0); - m_opt_chkClientArea = db_get_b(NULL, SZ_SENDSS, "ClientArea", 0); - m_opt_cboxDesktop = db_get_b(NULL, SZ_SENDSS, "Desktop", 0); - - m_opt_chkTimed = db_get_b(NULL, SZ_SENDSS, "TimedCap", 0); - m_opt_edtTimed = db_get_b(NULL, SZ_SENDSS, "CapTime", 3); - m_opt_cboxFormat = db_get_b(NULL, SZ_SENDSS, "OutputFormat", 0); - m_opt_cboxSendBy = db_get_b(NULL, SZ_SENDSS, "SendBy", 0); - - m_opt_btnDesc = db_get_b(NULL, SZ_SENDSS, "AutoDescription", 1); - m_opt_btnDeleteAfterSend = db_get_b(NULL, SZ_SENDSS, "DelAfterSend", 1)!=0; - m_opt_chkEditor = db_get_b(NULL, SZ_SENDSS, "Preview", 0); - m_opt_chkOpenAgain = db_get_b(NULL, SZ_SENDSS, "OpenAgain", 0); +void TfrmMain::LoadOptions(void) +{ + DWORD rgb = db_get_dw(NULL, SZ_SENDSS, "AlphaColor", 16777215); + m_AlphaColor.rgbRed = GetRValue(rgb); + m_AlphaColor.rgbGreen = GetGValue(rgb); + m_AlphaColor.rgbBlue = GetBValue(rgb); + m_AlphaColor.rgbReserved = 0; + + // m_opt_chkEmulateClick = db_get_b(NULL, SZ_SENDSS, "AutoSend", 1); + m_opt_edtQuality = db_get_b(NULL, SZ_SENDSS, "JpegQuality", 75); + + m_opt_tabCapture = db_get_b(NULL, SZ_SENDSS, "Capture", 0); + m_opt_chkIndirectCapture = db_get_b(NULL, SZ_SENDSS, "IndirectCapture", 0); + m_opt_chkClientArea = db_get_b(NULL, SZ_SENDSS, "ClientArea", 0); + m_opt_cboxDesktop = db_get_b(NULL, SZ_SENDSS, "Desktop", 0); + + m_opt_chkTimed = db_get_b(NULL, SZ_SENDSS, "TimedCap", 0); + m_opt_edtTimed = db_get_b(NULL, SZ_SENDSS, "CapTime", 3); + m_opt_cboxFormat = db_get_b(NULL, SZ_SENDSS, "OutputFormat", 0); + m_opt_cboxSendBy = db_get_b(NULL, SZ_SENDSS, "SendBy", 0); + + m_opt_btnDesc = db_get_b(NULL, SZ_SENDSS, "AutoDescription", 1); + m_opt_btnDeleteAfterSend = db_get_b(NULL, SZ_SENDSS, "DelAfterSend", 1) != 0; + m_opt_chkEditor = db_get_b(NULL, SZ_SENDSS, "Preview", 0); + m_opt_chkOpenAgain = db_get_b(NULL, SZ_SENDSS, "OpenAgain", 0); } -void TfrmMain::SaveOptions(void) { - if(m_bOnExitSave) { +void TfrmMain::SaveOptions(void) +{ + if (m_bOnExitSave) { db_set_dw(NULL, SZ_SENDSS, "AlphaColor", (DWORD)RGB(m_AlphaColor.rgbRed, m_AlphaColor.rgbGreen, m_AlphaColor.rgbBlue)); -// db_set_b(NULL, SZ_SENDSS, "AutoSend", m_opt_chkEmulateClick); + // db_set_b(NULL, SZ_SENDSS, "AutoSend", m_opt_chkEmulateClick); db_set_b(NULL, SZ_SENDSS, "JpegQuality", m_opt_edtQuality); db_set_b(NULL, SZ_SENDSS, "Capture", m_opt_tabCapture); @@ -756,105 +779,110 @@ void TfrmMain::SaveOptions(void) { } //--------------------------------------------------------------------------- -void TfrmMain::Init(TCHAR* DestFolder, MCONTACT Contact) { +void TfrmMain::Init(TCHAR* DestFolder, MCONTACT Contact) +{ m_FDestFolder = mir_tstrdup(DestFolder); m_hContact = Contact; // create window - m_hWnd = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UMainForm),0,DlgTfrmMain,(LPARAM)this); + m_hWnd = CreateDialogParam(g_hSendSS, MAKEINTRESOURCE(IDD_UMainForm), 0, DlgTfrmMain, (LPARAM)this); //register object _HandleMapping.insert(CHandleMapping::value_type(m_hWnd, this)); //check Contact - if(m_cSend) + if (m_cSend) m_cSend->SetContact(Contact); } //--------------------------------------------------------------------------- -void TfrmMain::btnCaptureClick() { - if(m_opt_tabCapture==1) m_hTargetWindow=GetDesktopWindow(); - else if(m_opt_tabCapture==2){ +void TfrmMain::btnCaptureClick() +{ + if (m_opt_tabCapture == 1) m_hTargetWindow = GetDesktopWindow(); + else if (m_opt_tabCapture == 2) { TCHAR filename[MAX_PATH]; GetDlgItemText(m_hwndTabPage, ID_edtSize, filename, _countof(filename)); - FILE* fp=_wfopen(filename,_T("rb")); - if(!fp){ + FILE* fp = _wfopen(filename, _T("rb")); + if (!fp) { TCHAR *err = TranslateT("Select a file"); - MessageBox(m_hWnd,err,ERROR_TITLE,MB_OK|MB_ICONWARNING); + MessageBox(m_hWnd, err, ERROR_TITLE, MB_OK | MB_ICONWARNING); return; } fclose(fp); - mir_free(m_pszFile); m_pszFile=mir_tstrdup(filename); - }else if(!m_hTargetWindow) { + mir_free(m_pszFile); m_pszFile = mir_tstrdup(filename); + } + else if (!m_hTargetWindow) { TCHAR *err = TranslateT("Select a target window."); - MessageBox(m_hWnd,err,ERROR_TITLE,MB_OK|MB_ICONWARNING); + MessageBox(m_hWnd, err, ERROR_TITLE, MB_OK | MB_ICONWARNING); return; } TfrmMain::Hide(); - if(m_opt_chkTimed){ - SetTimer(m_hWnd, ID_chkTimed, m_opt_edtTimed ? m_opt_edtTimed*1000 : 500, NULL); /// calls EVT_CaptureDone + if (m_opt_chkTimed) { + SetTimer(m_hWnd, ID_chkTimed, m_opt_edtTimed ? m_opt_edtTimed * 1000 : 500, NULL); /// calls EVT_CaptureDone return; } - if(m_opt_tabCapture==1){ /// desktop needs always time to update from TfrmMain::Hide() + if (m_opt_tabCapture == 1) { /// desktop needs always time to update from TfrmMain::Hide() SetTimer(m_hWnd, ID_chkTimed, 500, NULL); /// calls EVT_CaptureDone return; } - if(m_opt_tabCapture!=2){ + if (m_opt_tabCapture != 2) { m_Screenshot = CaptureWindow(m_hTargetWindow, m_opt_chkClientArea, m_opt_chkIndirectCapture); } - SendMessage(m_hWnd,UM_EVENT, 0, (LPARAM)EVT_CaptureDone); + SendMessage(m_hWnd, UM_EVENT, 0, (LPARAM)EVT_CaptureDone); } //--------------------------------------------------------------------------- -void TfrmMain::chkTimedClick() { +void TfrmMain::chkTimedClick() +{ Button_Enable(GetDlgItem(m_hWnd, ID_edtTimedLabel), (BOOL)m_opt_chkTimed); Button_Enable(GetDlgItem(m_hWnd, ID_edtTimed), (BOOL)m_opt_chkTimed); Button_Enable(GetDlgItem(m_hWnd, ID_upTimed), (BOOL)m_opt_chkTimed); } //--------------------------------------------------------------------------- -void TfrmMain::cboxSendByChange() { +void TfrmMain::cboxSendByChange() +{ BOOL bState; HICON hIcon; BYTE itemFlag = SS_DLG_DESCRIPTION; //SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND | - if(m_cSend) + if (m_cSend) delete m_cSend; - switch(m_opt_cboxSendBy) { - case SS_FILESEND: //"File Transfer" - m_cSend = new CSendFile(m_hWnd, m_hContact, true); - break; - case SS_EMAIL: //"E-mail" - m_cSend = new CSendEmail(m_hWnd, m_hContact, true); - break; - case SS_HTTPSERVER: //"HTTP Server" - m_cSend = new CSendHTTPServer(m_hWnd, m_hContact, true); - break; - case SS_FTPFILE: //"FTP File" - m_cSend = new CSendFTPFile(m_hWnd, m_hContact, true); - break; - case SS_DROPBOX: //"Dropbox" - m_cSend = new CSendDropbox(m_hWnd, m_hContact, false); - break; - case SS_IMAGESHACK: //"ImageShack" - m_cSend = new CSendHost_ImageShack(m_hWnd, m_hContact, true); - break; - case SS_UPLOADPIE_30M: //"Upload Pie (30 minutes)" - m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true,1); - break; - case SS_UPLOADPIE_1D: //"Upload Pie (1 day)" - m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true,4); - break; - case SS_UPLOADPIE_1W: //"Upload Pie (1 week)" - m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true,5); - break; - case SS_IMGUR: - m_cSend = new CSendHost_Imgur(m_hWnd, m_hContact, true); - break; - default: //SS_JUSTSAVE - "Just save it " - m_cSend = NULL; - break; + switch (m_opt_cboxSendBy) { + case SS_FILESEND: //"File Transfer" + m_cSend = new CSendFile(m_hWnd, m_hContact, true); + break; + case SS_EMAIL: //"E-mail" + m_cSend = new CSendEmail(m_hWnd, m_hContact, true); + break; + case SS_HTTPSERVER: //"HTTP Server" + m_cSend = new CSendHTTPServer(m_hWnd, m_hContact, true); + break; + case SS_FTPFILE: //"FTP File" + m_cSend = new CSendFTPFile(m_hWnd, m_hContact, true); + break; + case SS_DROPBOX: //"Dropbox" + m_cSend = new CSendDropbox(m_hWnd, m_hContact, false); + break; + case SS_IMAGESHACK: //"ImageShack" + m_cSend = new CSendHost_ImageShack(m_hWnd, m_hContact, true); + break; + case SS_UPLOADPIE_30M: //"Upload Pie (30 minutes)" + m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true, 1); + break; + case SS_UPLOADPIE_1D: //"Upload Pie (1 day)" + m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true, 4); + break; + case SS_UPLOADPIE_1W: //"Upload Pie (1 week)" + m_cSend = new CSendHost_UploadPie(m_hWnd, m_hContact, true, 5); + break; + case SS_IMGUR: + m_cSend = new CSendHost_Imgur(m_hWnd, m_hContact, true); + break; + default: //SS_JUSTSAVE - "Just save it " + m_cSend = NULL; + break; } - if(m_cSend){ + if (m_cSend) { itemFlag = m_cSend->GetEnableItem(); m_cSend->m_bDeleteAfterSend = m_opt_btnDeleteAfterSend; } @@ -870,34 +898,38 @@ void TfrmMain::cboxSendByChange() { } //--------------------------------------------------------------------------- -void TfrmMain::btnAboutClick() { +void TfrmMain::btnAboutClick() +{ if (m_bFormAbout) return; - TfrmAbout *frmAbout=new TfrmAbout(m_hWnd); + TfrmAbout *frmAbout = new TfrmAbout(m_hWnd); frmAbout->Show(); m_bFormAbout = true; } // Edit window call this event before it closes -void TfrmMain::btnAboutOnCloseWindow(HWND hWnd) { +void TfrmMain::btnAboutOnCloseWindow(HWND) +{ m_bFormAbout = false; } //--------------------------------------------------------------------------- -void TfrmMain::btnExploreClick() { +void TfrmMain::btnExploreClick() +{ if (m_FDestFolder) ShellExecute(NULL, _T("explore"), m_FDestFolder, NULL, NULL, SW_SHOW); } //--------------------------------------------------------------------------- -void TfrmMain::edtSizeUpdate(HWND hWnd, BOOL ClientArea, HWND hTarget, UINT Ctrl) { +void TfrmMain::edtSizeUpdate(HWND hWnd, BOOL ClientArea, HWND hTarget, UINT Ctrl) +{ // get window dimensions - RECT rect = {0}; - RECT cliRect = {0}; + RECT rect = { 0 }; + RECT cliRect = { 0 }; TCHAR B[33], H[16]; GetWindowRect(hWnd, &rect); if (ClientArea) { - POINT pt = {0}; + POINT pt = { 0 }; GetClientRect(hWnd, &cliRect); pt.x = cliRect.left; pt.y = cliRect.top; @@ -906,20 +938,21 @@ void TfrmMain::edtSizeUpdate(HWND hWnd, BOOL ClientArea, HWND hTarget, UINT Ctrl pt.y = pt.y - rect.top; //offset y for client area rect = cliRect; } -// _itot_s(rect.right - rect.left, B, 33, 10); + // _itot_s(rect.right - rect.left, B, 33, 10); _itot(rect.right - rect.left, B, 10); -// _itot_s(rect.bottom - rect.top, H, 16, 10); + // _itot_s(rect.bottom - rect.top, H, 16, 10); _itot(rect.bottom - rect.top, H, 10); mir_tstrncat(B, _T("x"), _countof(B) - mir_tstrlen(B)); mir_tstrncat(B, H, _countof(B) - mir_tstrlen(B)); SetDlgItemText(hTarget, Ctrl, B); } -void TfrmMain::edtSizeUpdate(RECT rect, HWND hTarget, UINT Ctrl) { +void TfrmMain::edtSizeUpdate(RECT rect, HWND hTarget, UINT Ctrl) +{ TCHAR B[33], H[16]; -// _itot_s(ABS(rect.right - rect.left), B, 33, 10); + // _itot_s(ABS(rect.right - rect.left), B, 33, 10); _itot(ABS(rect.right - rect.left), B, 10); -// _itot_s(ABS(rect.bottom - rect.top), H, 16, 10); + // _itot_s(ABS(rect.bottom - rect.top), H, 16, 10); _itot(ABS(rect.bottom - rect.top), H, 10); mir_tstrncat(B, _T("x"), _countof(B) - mir_tstrlen(B)); mir_tstrncat(B, H, _countof(B) - mir_tstrlen(B)); @@ -927,7 +960,8 @@ void TfrmMain::edtSizeUpdate(RECT rect, HWND hTarget, UINT Ctrl) { } //--------------------------------------------------------------------------- -INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { +INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) +{ //generate File name FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; TCHAR* ret; @@ -935,15 +969,15 @@ INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { TCHAR* pszFilename = NULL; TCHAR* pszFileDesc = NULL; if (!dib) return 1; //error - unsigned FileNumber=db_get_dw(NULL,SZ_SENDSS,"FileNumber",0)+1; - if(FileNumber>99999) FileNumber=1; + unsigned FileNumber = db_get_dw(NULL, SZ_SENDSS, "FileNumber", 0) + 1; + if (FileNumber > 99999) FileNumber = 1; //Generate FileName mir_tstradd(path, m_FDestFolder); - if (path[mir_tstrlen(path)-1] != _T('\\')) mir_tstradd(path, _T("\\")); + if (path[mir_tstrlen(path) - 1] != _T('\\')) mir_tstradd(path, _T("\\")); mir_tstradd(path, _T("shot%.5u"));//on format change, adapt "len" below - size_t len=mir_tstrlen(path)+2; + size_t len = mir_tstrlen(path) + 2; pszFilename = (TCHAR*)mir_alloc(sizeof(TCHAR)*(len)); - mir_sntprintf(pszFilename,len,path,FileNumber); + mir_sntprintf(pszFilename, len, path, FileNumber); mir_free(path); //Generate a description according to the screenshot @@ -955,7 +989,7 @@ INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { mir_tstradd(pszFileDesc, TranslateT("of \"")); GetDlgItemText(m_hwndTabPage, ID_edtCaption, winText, _countof(winText)); mir_tstradd(pszFileDesc, winText); - if(m_opt_tabCapture==1) + if (m_opt_tabCapture == 1) mir_tstradd(pszFileDesc, _T("\"")); else mir_tstradd(pszFileDesc, TranslateT("\" Window")); @@ -964,82 +998,82 @@ INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { FIBITMAP *dib_new = FIP->FI_ConvertTo32Bits(dib); //RGBQUAD appColor = { 245, 0, 254, 0 }; //bgr0 schwarz //FIP->FI_SetBackgroundColor(dib_new, &appColor); - FIP->FI_SetTransparent(dib_new,TRUE); + FIP->FI_SetTransparent(dib_new, TRUE); // Investigates the color type of the bitmap (test for RGB or CMYK colour space) - switch (FREE_IMAGE_COLOR_TYPE ColTye=FIP->FI_GetColorType(dib_new)) { - case FIC_MINISBLACK: - //Monochrome bitmap (1-bit) : first palette entry is black. - //Palletised bitmap (4 or 8-bit) and single channel non standard bitmap: the bitmap has a greyscale palette - case FIC_MINISWHITE: - //Monochrome bitmap (1-bit) : first palette entry is white. - //Palletised bitmap (4 or 8-bit) : the bitmap has an inverted greyscale palette - case FIC_PALETTE: - //Palettized bitmap (1, 4 or 8 bit) - case FIC_RGB: - //High-color bitmap (16, 24 or 32 bit), RGB16 or RGBF - case FIC_RGBALPHA: - //High-color bitmap with an alpha channel (32 bit bitmap, RGBA16 or RGBAF) - case FIC_CMYK: - //CMYK bitmap (32 bit only) - default: - break; + switch (FREE_IMAGE_COLOR_TYPE ColTye = FIP->FI_GetColorType(dib_new)) { + case FIC_MINISBLACK: + //Monochrome bitmap (1-bit) : first palette entry is black. + //Palletised bitmap (4 or 8-bit) and single channel non standard bitmap: the bitmap has a greyscale palette + case FIC_MINISWHITE: + //Monochrome bitmap (1-bit) : first palette entry is white. + //Palletised bitmap (4 or 8-bit) : the bitmap has an inverted greyscale palette + case FIC_PALETTE: + //Palettized bitmap (1, 4 or 8 bit) + case FIC_RGB: + //High-color bitmap (16, 24 or 32 bit), RGB16 or RGBF + case FIC_RGBALPHA: + //High-color bitmap with an alpha channel (32 bit bitmap, RGBA16 or RGBAF) + case FIC_CMYK: + //CMYK bitmap (32 bit only) + default: + break; } -// bool bDummy = !(FIP->FI_GetICCProfile(dib_new)->flags & FIICC_COLOR_IS_CMYK); + // bool bDummy = !(FIP->FI_GetICCProfile(dib_new)->flags & FIICC_COLOR_IS_CMYK); - FIBITMAP *dib32,*dib24; + FIBITMAP *dib32, *dib24; HWND hwndCombo = GetDlgItem(m_hWnd, ID_cboxFormat); switch (ComboBox_GetItemData(hwndCombo, ComboBox_GetCurSel(hwndCombo))) { - case 0: //PNG - ret = SaveImage(fif,dib_new, pszFilename, _T("png")); - break; + case 0: //PNG + ret = SaveImage(fif, dib_new, pszFilename, _T("png")); + break; - case 1: //JPG - /* - #define JPEG_QUALITYSUPERB 0x80 // save with superb quality (100:1) - #define JPEG_QUALITYGOOD 0x0100 // save with good quality (75:1) - #define JPEG_QUALITYNORMAL 0x0200 // save with normal quality (50:1) - #define JPEG_QUALITYAVERAGE 0x0400 // save with average quality (25:1) - #define JPEG_QUALITYBAD 0x0800 // save with bad quality (10:1) - #define JPEG_PROGRESSIVE 0x2000 // save as a progressive-JPEG (use | to combine with other save flags) - */ - dib32 = FIP->FI_Composite(dib_new,FALSE,&m_AlphaColor,NULL); - dib24 = FIP->FI_ConvertTo24Bits(dib32); - FIP->FI_Unload(dib32); - ret = SaveImage(fif,dib24, pszFilename, _T("jpg")); - FIP->FI_Unload(dib24); - break; + case 1: //JPG + /* + #define JPEG_QUALITYSUPERB 0x80 // save with superb quality (100:1) + #define JPEG_QUALITYGOOD 0x0100 // save with good quality (75:1) + #define JPEG_QUALITYNORMAL 0x0200 // save with normal quality (50:1) + #define JPEG_QUALITYAVERAGE 0x0400 // save with average quality (25:1) + #define JPEG_QUALITYBAD 0x0800 // save with bad quality (10:1) + #define JPEG_PROGRESSIVE 0x2000 // save as a progressive-JPEG (use | to combine with other save flags) + */ + dib32 = FIP->FI_Composite(dib_new, FALSE, &m_AlphaColor, NULL); + dib24 = FIP->FI_ConvertTo24Bits(dib32); + FIP->FI_Unload(dib32); + ret = SaveImage(fif, dib24, pszFilename, _T("jpg")); + FIP->FI_Unload(dib24); + break; - case 2: //BMP + case 2: //BMP // ret = SaveImage(FIF_BMP,dib_new, pszFilename, _T("bmp")); //32bit alpha BMP - dib32 = FIP->FI_Composite(dib_new,FALSE,&m_AlphaColor,NULL); - dib24 = FIP->FI_ConvertTo24Bits(dib32); - FIP->FI_Unload(dib32); - ret = SaveImage(FIF_BMP,dib24, pszFilename, _T("bmp")); - FIP->FI_Unload(dib24); - break; + dib32 = FIP->FI_Composite(dib_new, FALSE, &m_AlphaColor, NULL); + dib24 = FIP->FI_ConvertTo24Bits(dib32); + FIP->FI_Unload(dib32); + ret = SaveImage(FIF_BMP, dib24, pszFilename, _T("bmp")); + FIP->FI_Unload(dib24); + break; - case 3: //TIFF (miranda freeimage interface do not support save tiff, we udse GDI+) - { + case 3: //TIFF (miranda freeimage interface do not support save tiff, we udse GDI+) + { TCHAR* pszFile = NULL; mir_tstradd(pszFile, pszFilename); mir_tstradd(pszFile, _T(".tif")); - dib32 = FIP->FI_Composite(dib_new,FALSE,&m_AlphaColor,NULL); + dib32 = FIP->FI_Composite(dib_new, FALSE, &m_AlphaColor, NULL); dib24 = FIP->FI_ConvertTo24Bits(dib32); FIP->FI_Unload(dib32); HBITMAP hBmp = FIP->FI_CreateHBITMAPFromDIB(dib24); FIP->FI_Unload(dib24); SaveTIF(hBmp, pszFile); - ret=pszFile; + ret = pszFile; DeleteObject(hBmp); - } - break; + } + break; - case 4: //GIF - { + case 4: //GIF + { //dib24 = FIP->FI_ConvertTo8Bits(dib_new); //ret = SaveImage(FIF_GIF,dib24, pszFilename, _T("gif")); //FIP->FI_Unload(dib24); @@ -1048,49 +1082,50 @@ INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { mir_tstradd(pszFile, _T(".gif")); HBITMAP hBmp = FIP->FI_CreateHBITMAPFromDIB(dib_new); SaveGIF(hBmp, pszFile); - ret=pszFile; + ret = pszFile; DeleteObject(hBmp); - } - break; + } + break; - default: - ret=NULL; + default: + ret = NULL; } -/* //load PNG and save file in user format (if differ) - //this get better result for transparent aereas - //TCHAR* pszFormat = (TCHAR*)ComboBox_GetItemData(hwndCombo, ComboBox_GetCurSel(hwndCombo)); - TCHAR pszFormat[6]; - ComboBox_GetText(hwndCombo, pszFormat, 6); - if(ret && (mir_tstrcmpi (pszFormat,_T("png")) != 0)) { + /* //load PNG and save file in user format (if differ) + //this get better result for transparent aereas + //TCHAR* pszFormat = (TCHAR*)ComboBox_GetItemData(hwndCombo, ComboBox_GetCurSel(hwndCombo)); + TCHAR pszFormat[6]; + ComboBox_GetText(hwndCombo, pszFormat, 6); + if(ret && (mir_tstrcmpi (pszFormat,_T("png")) != 0)) { - fif = FIP->FI_GetFIFFromFilenameU(ret); - dib_new = FIP->FI_LoadU(fif, ret,0); + fif = FIP->FI_GetFIFFromFilenameU(ret); + dib_new = FIP->FI_LoadU(fif, ret,0); if(dib_new) { - DeleteFile(ret); - mir_free(ret); - FIBITMAP *dib_save = FIP->FI_ConvertTo24Bits(dib_new); - ret = SaveImage(FIF_UNKNOWN,dib_save, pszFilename, pszFormat); - FIP->FI_Unload(dib_new); dib_new = NULL; - FIP->FI_Unload(dib_save); dib_save = NULL; + DeleteFile(ret); + mir_free(ret); + FIBITMAP *dib_save = FIP->FI_ConvertTo24Bits(dib_new); + ret = SaveImage(FIF_UNKNOWN,dib_save, pszFilename, pszFormat); + FIP->FI_Unload(dib_new); dib_new = NULL; + FIP->FI_Unload(dib_save); dib_save = NULL; } - }*/ + }*/ FIP->FI_Unload(dib_new); mir_free(pszFilename); - if(ret){ - db_set_dw(NULL,SZ_SENDSS,"FileNumber",FileNumber); - mir_free(m_pszFile); m_pszFile=ret; + if (ret) { + db_set_dw(NULL, SZ_SENDSS, "FileNumber", FileNumber); + mir_free(m_pszFile); m_pszFile = ret; mir_free(m_pszFileDesc); - if(IsWindowEnabled(GetDlgItem(m_hWnd,ID_chkDesc)) && m_opt_btnDesc){ - m_pszFileDesc=pszFileDesc; - }else{ + if (IsWindowEnabled(GetDlgItem(m_hWnd, ID_chkDesc)) && m_opt_btnDesc) { + m_pszFileDesc = pszFileDesc; + } + else { mir_free(pszFileDesc); - m_pszFileDesc=mir_tstrdup(_T("")); + m_pszFileDesc = mir_tstrdup(_T("")); } - if(m_cSend) { + if (m_cSend) { m_cSend->SetFile(m_pszFile); m_cSend->SetDescription(m_pszFileDesc); } @@ -1101,90 +1136,70 @@ INT_PTR TfrmMain::SaveScreenshot(FIBITMAP* dib) { } //--------------------------------------------------------------------------- -void TfrmMain::FormClose() { - bool bCanDelete=m_opt_btnDeleteAfterSend; - if(m_opt_tabCapture==2){ /// existing file +void TfrmMain::FormClose() +{ + bool bCanDelete = m_opt_btnDeleteAfterSend; + if (m_opt_tabCapture == 2) { /// existing file TCHAR description[1024]; GetDlgItemText(m_hwndTabPage, ID_edtCaption, description, _countof(description)); - if(!IsWindowEnabled(GetDlgItem(m_hWnd,ID_chkDesc)) || !m_opt_btnDesc) - *description='\0'; - if(m_cSend) { + if (!IsWindowEnabled(GetDlgItem(m_hWnd, ID_chkDesc)) || !m_opt_btnDesc) + *description = '\0'; + if (m_cSend) { m_cSend->m_bDeleteAfterSend = false; /// well... guess it's better to not delete existing files for now... m_cSend->SetFile(m_pszFile); m_cSend->SetDescription(description); } - bCanDelete=false; - }else if(SaveScreenshot(m_Screenshot)){ /// Saving the screenshot + bCanDelete = false; + } + else if (SaveScreenshot(m_Screenshot)) { /// Saving the screenshot Show(); // Error from SaveScreenshot return; } - - bool send=true; - if(m_opt_chkEditor){ - SHELLEXECUTEINFO shex={sizeof(SHELLEXECUTEINFO)}; - shex.fMask=SEE_MASK_NOCLOSEPROCESS; - shex.lpVerb=_T("edit"); - shex.lpFile=m_pszFile; - shex.nShow=SW_SHOWNORMAL; + + bool send = true; + if (m_opt_chkEditor) { + SHELLEXECUTEINFO shex = { sizeof(SHELLEXECUTEINFO) }; + shex.fMask = SEE_MASK_NOCLOSEPROCESS; + shex.lpVerb = _T("edit"); + shex.lpFile = m_pszFile; + shex.nShow = SW_SHOWNORMAL; ShellExecuteEx(&shex); - if(shex.hProcess){ + if (shex.hProcess) { DWORD res; MSG msg; - do{ + do { // wait for editor exit or messages/input - res=MsgWaitForMultipleObjects(1,&shex.hProcess,0,INFINITE,QS_ALLINPUT); - while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){ - if(msg.message==WM_QUIT){ - res=WAIT_OBJECT_0; - PostMessage(NULL,WM_QUIT,0,0); // forward for outer message loops + res = MsgWaitForMultipleObjects(1, &shex.hProcess, 0, INFINITE, QS_ALLINPUT); + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + if (msg.message == WM_QUIT) { + res = WAIT_OBJECT_0; + PostMessage(NULL, WM_QUIT, 0, 0); // forward for outer message loops break; } // process dialog messages (of unknown dialogs) HWND hwndDlgModeless = GetActiveWindow(); -// HWND hwndDlgModeless = msg.hwnd; -// for(HWND hTMP; (hTMP=GetAncestor(hwndDlgModeless,GA_PARENT)) && IsChild(hTMP,hwndDlgModeless); hwndDlgModeless=hTMP); - if(hwndDlgModeless != NULL && IsDialogMessage(hwndDlgModeless, &msg)) /* Wine fix. */ + // HWND hwndDlgModeless = msg.hwnd; + // for(HWND hTMP; (hTMP=GetAncestor(hwndDlgModeless,GA_PARENT)) && IsChild(hTMP,hwndDlgModeless); hwndDlgModeless=hTMP); + if (hwndDlgModeless != NULL && IsDialogMessage(hwndDlgModeless, &msg)) /* Wine fix. */ continue; // process messages TranslateMessage(&msg); DispatchMessage(&msg); } - }while(res==WAIT_OBJECT_0+1); + } while (res == WAIT_OBJECT_0 + 1); CloseHandle(shex.hProcess); } - if(MessageBox(m_hWnd,TranslateT("Send screenshot?"),_T("SendSS"),MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL)!=IDYES) - send=false; + if (MessageBox(m_hWnd, TranslateT("Send screenshot?"), _T("SendSS"), MB_YESNO | MB_ICONQUESTION | MB_SYSTEMMODAL) != IDYES) + send = false; } - if(send && m_cSend && m_pszFile){ - if(!m_cSend->Send()) m_cSend=NULL; // not sent now, class deletes itself later + if (send && m_cSend && m_pszFile) { + if (!m_cSend->Send()) // not sent now, class deletes itself later + m_cSend = NULL; cboxSendByChange(); - }else if(!send && bCanDelete){ - DeleteFile(m_pszFile); } - SendMessage(m_hWnd,UM_EVENT, 0, (LPARAM)EVT_CheckOpenAgain); -} - -//--------------------------------------------------------------------------- -/*/ Edit window call this event before it closes -void TfrmMain::OnCloseEditWindow(TObject *Sender, TCloseAction &Action) { - TfrmEdit *form=dynamic_cast<TfrmEdit*>(Sender); - form->Hide(); - - // delete the form automatically,after this event returns - Action = caFree; - - // This will saves settings, free resources, ... - form->CallBeforeClose(Action); - - // User selected "Capture" on action menu of edit window - if (form->ModalResult == mrCancel) { - this->Show(); - } else { - Screenshot = form->Screen; - bFormEdit = form->DontSend; - this->Close(); - } -}*/ + else if (!send && bCanDelete) + DeleteFile(m_pszFile); -//--------------------------------------------------------------------------- + SendMessage(m_hWnd, UM_EVENT, 0, (LPARAM)EVT_CheckOpenAgain); +} diff --git a/plugins/SendScreenshotPlus/src/Utils.cpp b/plugins/SendScreenshotPlus/src/Utils.cpp index a8d8fe0146..51a268105f 100644 --- a/plugins/SendScreenshotPlus/src/Utils.cpp +++ b/plugins/SendScreenshotPlus/src/Utils.cpp @@ -30,11 +30,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //--------------------------------------------------------------------------- //Workaround for MS bug ComboBox_SelectItemData -int ComboBox_SelectItemData(HWND hwndCtl, int indexStart, LPARAM data) { +int ComboBox_SelectItemData(HWND hwndCtl, LPARAM data) +{ int i = 0; - for ( i ; i < ComboBox_GetCount(hwndCtl); i++) { - if(data == ComboBox_GetItemData(hwndCtl, i)) { - ComboBox_SetCurSel (hwndCtl,i); + for (i; i < ComboBox_GetCount(hwndCtl); i++) { + if (data == ComboBox_GetItemData(hwndCtl, i)) { + ComboBox_SetCurSel(hwndCtl, i); return i; } } @@ -43,9 +44,10 @@ int ComboBox_SelectItemData(HWND hwndCtl, int indexStart, LPARAM data) { //--------------------------------------------------------------------------- // MonitorInfoEnum -size_t MonitorInfoEnum(MONITORINFOEX* & myMonitors, RECT & virtualScreen) { - MONITORS tmp = {0,0}; - if (EnumDisplayMonitors(NULL, NULL, MonitorInfoEnumProc, (LPARAM)&tmp)){ +size_t MonitorInfoEnum(MONITORINFOEX* & myMonitors, RECT & virtualScreen) +{ + MONITORS tmp = { 0, 0 }; + if (EnumDisplayMonitors(NULL, NULL, MonitorInfoEnumProc, (LPARAM)&tmp)) { myMonitors = tmp.info; memset(&virtualScreen, 0, sizeof(virtualScreen)); for (size_t i = 0; i < tmp.count; ++i) { @@ -60,178 +62,190 @@ size_t MonitorInfoEnum(MONITORINFOEX* & myMonitors, RECT & virtualScreen) { } // MonitorInfoEnumProc - CALLBACK for MonitorInfoEnum -BOOL CALLBACK MonitorInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { +BOOL CALLBACK MonitorInfoEnumProc(HMONITOR hMonitor, HDC, LPRECT, LPARAM dwData) +{ MONITORS* monitors = (MONITORS*)dwData; ++monitors->count; monitors->info = (MONITORINFOEX*)mir_realloc(monitors->info, sizeof(MONITORINFOEX)*monitors->count); - monitors->info[monitors->count-1].cbSize = sizeof(MONITORINFOEX); - if(!GetMonitorInfo(hMonitor, (LPMONITORINFO)(monitors->info + monitors->count-1))) { + monitors->info[monitors->count - 1].cbSize = sizeof(MONITORINFOEX); + if (!GetMonitorInfo(hMonitor, (LPMONITORINFO)(monitors->info + monitors->count - 1))) { return FALSE; // stop enumeration if error } return TRUE; } -FIBITMAP* CreateDIBFromDC(HDC hDC,const RECT* rect,HWND hCapture=0); +FIBITMAP* CreateDIBFromDC(HDC hDC, const RECT* rect, HWND hCapture = 0); //--------------------------------------------------------------------------- // capture window as FIBITMAP - caller must FIP->FI_Unload(dib) -FIBITMAP* CaptureWindow(HWND hCapture, BOOL bClientArea, BOOL bIndirectCapture){ +FIBITMAP* CaptureWindow(HWND hCapture, BOOL bClientArea, BOOL bIndirectCapture) +{ FIBITMAP* dib; HWND hForegroundWin; RECT rect;//cropping rect - if(!hCapture || !IsWindow(hCapture)) + if (!hCapture || !IsWindow(hCapture)) return NULL; - hForegroundWin=GetForegroundWindow(); // old foreground window + hForegroundWin = GetForegroundWindow(); // old foreground window SetForegroundWindow(hCapture); // force target foreground BringWindowToTop(hCapture); // bring it to top as well /// redraw window to prevent runtime artifacts in picture UpdateWindow(hCapture); - HWND hParent=GetAncestor(hCapture,GA_PARENT); - if(hParent && !IsChild(hParent,hCapture)) - hParent=NULL; - if(bIndirectCapture){ - intptr_t wastopmost=GetWindowLongPtr(hCapture,GWL_EXSTYLE)&WS_EX_TOPMOST; - if(!wastopmost) - SetWindowPos(hCapture,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); - if(bClientArea){ - GetClientRect(hCapture,&rect); - ClientToScreen(hCapture,(POINT*)&rect); - rect.right+=rect.left; rect.bottom+=rect.top; - }else - GetWindowRect(hCapture,&rect); - dib=CaptureMonitor(NULL,&rect); - if(!wastopmost) - SetWindowPos(hCapture,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); - }else{ + HWND hParent = GetAncestor(hCapture, GA_PARENT); + if (hParent && !IsChild(hParent, hCapture)) + hParent = NULL; + if (bIndirectCapture) { + intptr_t wastopmost = GetWindowLongPtr(hCapture, GWL_EXSTYLE)&WS_EX_TOPMOST; + if (!wastopmost) + SetWindowPos(hCapture, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + if (bClientArea) { + GetClientRect(hCapture, &rect); + ClientToScreen(hCapture, (POINT*)&rect); + rect.right += rect.left; rect.bottom += rect.top; + } + else + GetWindowRect(hCapture, &rect); + dib = CaptureMonitor(NULL, &rect); + if (!wastopmost) + SetWindowPos(hCapture, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + } + else { HDC hDCsrc; - GetWindowRect(hCapture,&rect); - if(hParent) - hDCsrc=GetDC(hCapture);//hCapture is part of a window, capture that + GetWindowRect(hCapture, &rect); + if (hParent) + hDCsrc = GetDC(hCapture);//hCapture is part of a window, capture that else - hDCsrc=GetWindowDC(hCapture);//entire window w/ title bar - rect.right=ABS(rect.right-rect.left); - rect.bottom=ABS(rect.bottom-rect.top); - rect.left=rect.top=0; + hDCsrc = GetWindowDC(hCapture);//entire window w/ title bar + rect.right = ABS(rect.right - rect.left); + rect.bottom = ABS(rect.bottom - rect.top); + rect.left = rect.top = 0; /// capture window and get FIBITMAP - dib = CreateDIBFromDC(hDCsrc,&rect,hCapture); - ReleaseDC(hCapture,hDCsrc); - if(bClientArea){//we could capture directly, but doing so breaks GetWindowRgn() and also includes artifacts... - GetWindowRect(hCapture,&rect); - RECT rectCA; GetClientRect(hCapture,&rectCA); - ClientToScreen(hCapture,(POINT*)&rectCA); - rectCA.left=ABS(rectCA.left-rect.left); - rectCA.top=ABS(rectCA.top-rect.top); - rectCA.right+=rectCA.left; rectCA.bottom+=rectCA.top; + dib = CreateDIBFromDC(hDCsrc, &rect, hCapture); + ReleaseDC(hCapture, hDCsrc); + if (bClientArea) {//we could capture directly, but doing so breaks GetWindowRgn() and also includes artifacts... + GetWindowRect(hCapture, &rect); + RECT rectCA; GetClientRect(hCapture, &rectCA); + ClientToScreen(hCapture, (POINT*)&rectCA); + rectCA.left = ABS(rectCA.left - rect.left); + rectCA.top = ABS(rectCA.top - rect.top); + rectCA.right += rectCA.left; rectCA.bottom += rectCA.top; /// crop the window to ClientArea - FIBITMAP* dibClient = FIP->FI_Copy(dib,rectCA.left,rectCA.top,rectCA.right,rectCA.bottom); + FIBITMAP* dibClient = FIP->FI_Copy(dib, rectCA.left, rectCA.top, rectCA.right, rectCA.bottom); FIP->FI_Unload(dib); dib = dibClient; } } - if(hForegroundWin){//restore previous foreground window + if (hForegroundWin) {//restore previous foreground window SetForegroundWindow(hForegroundWin); BringWindowToTop(hForegroundWin); } return dib; } -FIBITMAP* CaptureMonitor(const TCHAR* szDevice,const RECT* cropRect/*=NULL*/){ +FIBITMAP* CaptureMonitor(const TCHAR* szDevice, const RECT* cropRect/*=NULL*/) +{ HDC hScrDC; RECT rect; FIBITMAP* dib; /// get screen resolution - if(!szDevice){ - hScrDC = CreateDC(_T("DISPLAY"),NULL,NULL,NULL); - rect.left=GetSystemMetrics(SM_XVIRTUALSCREEN); - rect.top=GetSystemMetrics(SM_YVIRTUALSCREEN); - rect.right=GetSystemMetrics(SM_XVIRTUALSCREEN)+GetSystemMetrics(SM_CXVIRTUALSCREEN); - rect.bottom=GetSystemMetrics(SM_YVIRTUALSCREEN)+GetSystemMetrics(SM_CYVIRTUALSCREEN); - }else{ - hScrDC = CreateDC(szDevice,NULL,NULL,NULL); - rect.left=rect.top=0; - rect.right=GetDeviceCaps(hScrDC,HORZRES); - rect.bottom=GetDeviceCaps(hScrDC,VERTRES); + if (!szDevice) { + hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); + rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rect.right = GetSystemMetrics(SM_XVIRTUALSCREEN) + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rect.bottom = GetSystemMetrics(SM_YVIRTUALSCREEN) + GetSystemMetrics(SM_CYVIRTUALSCREEN); } - if(cropRect){ - if(cropRect->left > rect.left) rect.left=cropRect->left; - if(cropRect->top > rect.top) rect.top=cropRect->top; - if(cropRect->right < rect.right) rect.right=cropRect->right; - if(cropRect->bottom < rect.bottom) rect.bottom=cropRect->bottom; + else { + hScrDC = CreateDC(szDevice, NULL, NULL, NULL); + rect.left = rect.top = 0; + rect.right = GetDeviceCaps(hScrDC, HORZRES); + rect.bottom = GetDeviceCaps(hScrDC, VERTRES); + } + if (cropRect) { + if (cropRect->left > rect.left) rect.left = cropRect->left; + if (cropRect->top > rect.top) rect.top = cropRect->top; + if (cropRect->right < rect.right) rect.right = cropRect->right; + if (cropRect->bottom < rect.bottom) rect.bottom = cropRect->bottom; } - dib=CreateDIBFromDC(hScrDC,&rect); - ReleaseDC(NULL,hScrDC); + dib = CreateDIBFromDC(hScrDC, &rect); + ReleaseDC(NULL, hScrDC); return dib; } -FIBITMAP* CreateDIBFromDC(HDC hDC,const RECT* rect,HWND hCapture/*=NULL*/){ -///HDC GetDC (NULL) entire desktp -///HDC GetDC (HWND hWnd) client area of the specified window. (may include artifacts) -///HDC GetWindowDC (HWND hWnd) entire window. +FIBITMAP* CreateDIBFromDC(HDC hDC, const RECT* rect, HWND hCapture/*=NULL*/) +{ + ///HDC GetDC (NULL) entire desktp + ///HDC GetDC (HWND hWnd) client area of the specified window. (may include artifacts) + ///HDC GetWindowDC (HWND hWnd) entire window. FIBITMAP* dib;// return value HBITMAP hBitmap; // handles to device-dependent bitmaps HDC hScrDC, hMemDC; // screen DC and memory DC - long width=rect->right-rect->left; - long height=rect->bottom-rect->top; + long width = rect->right - rect->left; + long height = rect->bottom - rect->top; // create a DC for the screen and create // a memory DC compatible to screen DC - if(!(hScrDC=hDC)) hScrDC=GetDC(hCapture); + if (!(hScrDC = hDC)) hScrDC = GetDC(hCapture); hMemDC = CreateCompatibleDC(hScrDC); // create a bitmap compatible with the screen DC - hBitmap = CreateCompatibleBitmap(hScrDC,width,height);//width,height + hBitmap = CreateCompatibleBitmap(hScrDC, width, height);//width,height // select new bitmap into memory DC SelectObject(hMemDC, hBitmap); - if(hCapture && hDC){ - PrintWindow(hCapture,hMemDC,0); - }else{// bitblt screen DC to memory DC - BitBlt(hMemDC,0,0,width,height,hScrDC,rect->left,rect->top,CAPTUREBLT|SRCCOPY); + if (hCapture && hDC) { + PrintWindow(hCapture, hMemDC, 0); + } + else {// bitblt screen DC to memory DC + BitBlt(hMemDC, 0, 0, width, height, hScrDC, rect->left, rect->top, CAPTUREBLT | SRCCOPY); } dib = FIP->FI_CreateDIBFromHBITMAP(hBitmap); //alpha channel from window is always wrong and sometimes even for desktop (Win7, no aero) //coz GDI do not draw all in alpha mode. //we have to create our own new alpha channel. - bool bFixAlpha=true; - bool bInvert=false; - HBRUSH hBr=CreateSolidBrush(RGB(255,255,255));//Create a SolidBrush object for non transparent area - HBITMAP hMask=CreateBitmap(width,height,1,1,NULL);// Create monochrome (1 bit) B+W mask bitmap. - HDC hMaskDC=CreateCompatibleDC(0); - SelectBitmap(hMaskDC,hMask); - HRGN hRgn=CreateRectRgn(0,0,0,0); - if(hCapture && GetWindowRgn(hCapture,hRgn)==ERROR){ - if((GetWindowLongPtr(hCapture,GWL_EXSTYLE)&WS_EX_LAYERED)){ - BYTE bAlpha=0; - COLORREF crKey=0x00000000; - DWORD dwFlags=0; - if(GetLayeredWindowAttributes(hCapture,&crKey,&bAlpha,&dwFlags)) { + bool bFixAlpha = true; + bool bInvert = false; + HBRUSH hBr = CreateSolidBrush(RGB(255, 255, 255));//Create a SolidBrush object for non transparent area + HBITMAP hMask = CreateBitmap(width, height, 1, 1, NULL);// Create monochrome (1 bit) B+W mask bitmap. + HDC hMaskDC = CreateCompatibleDC(0); + SelectBitmap(hMaskDC, hMask); + HRGN hRgn = CreateRectRgn(0, 0, 0, 0); + if (hCapture && GetWindowRgn(hCapture, hRgn) == ERROR) { + if ((GetWindowLongPtr(hCapture, GWL_EXSTYLE)&WS_EX_LAYERED)) { + BYTE bAlpha = 0; + COLORREF crKey = 0x00000000; + DWORD dwFlags = 0; + if (GetLayeredWindowAttributes(hCapture, &crKey, &bAlpha, &dwFlags)) { /// per window transparency (like fading in a whole window) - if((dwFlags&LWA_COLORKEY)){ - SetBkColor(hMemDC,crKey); - BitBlt(hMaskDC,0,0,width,height,hMemDC,rect->left,rect->top,SRCCOPY); - bInvert=true; - }else if((dwFlags&LWA_ALPHA)){ - bFixAlpha=false; + if ((dwFlags&LWA_COLORKEY)) { + SetBkColor(hMemDC, crKey); + BitBlt(hMaskDC, 0, 0, width, height, hMemDC, rect->left, rect->top, SRCCOPY); + bInvert = true; } - }else{//per-pixel transparency (won't use the WM_PAINT) - bFixAlpha=false; + else if ((dwFlags&LWA_ALPHA)) { + bFixAlpha = false; + } + } + else {//per-pixel transparency (won't use the WM_PAINT) + bFixAlpha = false; } - }else{//not layered - fill the window region - SetRectRgn(hRgn,0,0,width,height); - FillRgn(hMaskDC,hRgn,hBr); } - }else{ - if(!hCapture) SetRectRgn(hRgn,0,0,width,height);//client area only, no transparency - FillRgn(hMaskDC,hRgn,hBr); + else {//not layered - fill the window region + SetRectRgn(hRgn, 0, 0, width, height); + FillRgn(hMaskDC, hRgn, hBr); + } + } + else { + if (!hCapture) SetRectRgn(hRgn, 0, 0, width, height);//client area only, no transparency + FillRgn(hMaskDC, hRgn, hBr); } DeleteObject(hRgn); - if(bFixAlpha){ + if (bFixAlpha) { FIBITMAP* dibMask = FIP->FI_CreateDIBFromHBITMAP(hMask); - if(bInvert) FIP->FI_Invert(dibMask); + if (bInvert) FIP->FI_Invert(dibMask); FIBITMAP* dib8 = FIP->FI_ConvertTo8Bits(dibMask); //copy the dib8 alpha mask to dib32 main bitmap - FIP->FI_SetChannel(dib,dib8,FICC_ALPHA); + FIP->FI_SetChannel(dib, dib8, FICC_ALPHA); FIP->FI_Unload(dibMask); FIP->FI_Unload(dib8); } @@ -241,65 +255,66 @@ FIBITMAP* CreateDIBFromDC(HDC hDC,const RECT* rect,HWND hCapture/*=NULL*/){ //clean up DeleteDC(hMemDC); DeleteObject(hBitmap); - if(!hDC) ReleaseDC(NULL, hScrDC); - - #ifdef _DEBUG - switch (FIP->FI_GetImageType(dib)){ - case FIT_UNKNOWN: - OutputDebugStringA("FIBITMAP Type: FIT_UNKNOWN\r\n" ); - break; - case FIT_BITMAP: - OutputDebugStringA("FIBITMAP Type: FIT_BITMAP\r\n" ); - break; - case FIT_UINT16: - OutputDebugStringA("FIBITMAP Type: FIT_UINT16\r\n" ); - break; - case FIT_INT16: - OutputDebugStringA("FIBITMAP Type: FIT_INT16\r\n" ); - break; - case FIT_UINT32: - OutputDebugStringA("FIBITMAP Type: FIT_UINT32\r\n" ); - break; - case FIT_INT32: - OutputDebugStringA("FIBITMAP Type: FIT_INT32\r\n" ); - break; - case FIT_FLOAT: - OutputDebugStringA("FIBITMAP Type: FIT_FLOAT\r\n" ); - break; - case FIT_DOUBLE: - OutputDebugStringA("FIBITMAP Type: FIT_DOUBLE\r\n" ); - break; - case FIT_COMPLEX: - OutputDebugStringA("FIBITMAP Type: FIT_COMPLEX\r\n" ); - break; - case FIT_RGB16: - OutputDebugStringA("FIBITMAP Type: FIT_RGB16\r\n" ); - break; - case FIT_RGBA16: - OutputDebugStringA("FIBITMAP Type: FIT_RGBA16\r\n" ); - break; - case FIT_RGBF: - OutputDebugStringA("FIBITMAP Type: FIT_RGBF\r\n" ); - break; - case FIT_RGBAF: - OutputDebugStringA("FIBITMAP Type: FIT_RGBAF\r\n" ); - break; - default: - OutputDebugStringA("FIBITMAP Type: non detectable image type (error)\r\n" ); - break; + if (!hDC) ReleaseDC(NULL, hScrDC); + +#ifdef _DEBUG + switch (FIP->FI_GetImageType(dib)) { + case FIT_UNKNOWN: + OutputDebugStringA("FIBITMAP Type: FIT_UNKNOWN\r\n"); + break; + case FIT_BITMAP: + OutputDebugStringA("FIBITMAP Type: FIT_BITMAP\r\n"); + break; + case FIT_UINT16: + OutputDebugStringA("FIBITMAP Type: FIT_UINT16\r\n"); + break; + case FIT_INT16: + OutputDebugStringA("FIBITMAP Type: FIT_INT16\r\n"); + break; + case FIT_UINT32: + OutputDebugStringA("FIBITMAP Type: FIT_UINT32\r\n"); + break; + case FIT_INT32: + OutputDebugStringA("FIBITMAP Type: FIT_INT32\r\n"); + break; + case FIT_FLOAT: + OutputDebugStringA("FIBITMAP Type: FIT_FLOAT\r\n"); + break; + case FIT_DOUBLE: + OutputDebugStringA("FIBITMAP Type: FIT_DOUBLE\r\n"); + break; + case FIT_COMPLEX: + OutputDebugStringA("FIBITMAP Type: FIT_COMPLEX\r\n"); + break; + case FIT_RGB16: + OutputDebugStringA("FIBITMAP Type: FIT_RGB16\r\n"); + break; + case FIT_RGBA16: + OutputDebugStringA("FIBITMAP Type: FIT_RGBA16\r\n"); + break; + case FIT_RGBF: + OutputDebugStringA("FIBITMAP Type: FIT_RGBF\r\n"); + break; + case FIT_RGBAF: + OutputDebugStringA("FIBITMAP Type: FIT_RGBAF\r\n"); + break; + default: + OutputDebugStringA("FIBITMAP Type: non detectable image type (error)\r\n"); + break; } BOOL inf = FIP->FI_IsTransparent(dib); OutputDebugStringA(inf ? "FIBITMAP Transparent: true\r\n" : "FIBITMAP Transparent: false\r\n"); - #endif +#endif return dib; } -TCHAR* SaveImage(FREE_IMAGE_FORMAT fif, FIBITMAP* dib, const TCHAR* pszFilename, const TCHAR* pszExt, int flag) { - int ret=0; +TCHAR* SaveImage(FREE_IMAGE_FORMAT fif, FIBITMAP* dib, const TCHAR* pszFilename, const TCHAR* pszExt, int flag) +{ + int ret = 0; TCHAR* pszFile = NULL; TCHAR* FileExt = GetFileExt(pszFilename); - if(!FileExt) { - if(!pszExt) return NULL; + if (!FileExt) { + if (!pszExt) return NULL; mir_tstradd(pszFile, pszFilename); mir_tstradd(pszFile, _T(".")); mir_tstradd(pszFile, pszExt); @@ -308,7 +323,7 @@ TCHAR* SaveImage(FREE_IMAGE_FORMAT fif, FIBITMAP* dib, const TCHAR* pszFilename, mir_tstradd(pszFile, pszFilename); } - if(fif==FIF_UNKNOWN) { + if (fif == FIF_UNKNOWN) { fif = FIP->FI_GetFIFFromFilenameU(pszFile); } @@ -317,56 +332,61 @@ TCHAR* SaveImage(FREE_IMAGE_FORMAT fif, FIBITMAP* dib, const TCHAR* pszFilename, mir_free(FileExt); - if(ret) return pszFile; + if (ret) return pszFile; mir_free(pszFile); return NULL; } //--------------------------------------------------------------------------- -TCHAR* GetFileNameW(const TCHAR* pszPath) { - const TCHAR* slash=_tcsrchr(pszPath,_T('\\')); - if(!slash) slash=_tcsrchr(pszPath,_T('/')); - if(slash) - return mir_t2u(slash+1); +TCHAR* GetFileNameW(const TCHAR* pszPath) +{ + const TCHAR* slash = _tcsrchr(pszPath, _T('\\')); + if (!slash) slash = _tcsrchr(pszPath, _T('/')); + if (slash) + return mir_t2u(slash + 1); else return mir_t2u(pszPath); } -TCHAR* GetFileExtW(const TCHAR* pszPath) { - const TCHAR* slash=_tcsrchr(pszPath,_T('.')); - if(slash) +TCHAR* GetFileExtW(const TCHAR* pszPath) +{ + const TCHAR* slash = _tcsrchr(pszPath, _T('.')); + if (slash) return mir_t2u(slash); return NULL; } -char* GetFileNameA(const TCHAR* pszPath) { - const TCHAR* slash=_tcsrchr(pszPath,_T('\\')); - if(!slash) slash=_tcsrchr(pszPath,_T('/')); - if(slash) - return mir_t2a(slash+1); +char* GetFileNameA(const TCHAR* pszPath) +{ + const TCHAR* slash = _tcsrchr(pszPath, _T('\\')); + if (!slash) slash = _tcsrchr(pszPath, _T('/')); + if (slash) + return mir_t2a(slash + 1); else return mir_t2a(pszPath); } -char* GetFileExtA(const TCHAR* pszPath) { - const TCHAR* slash=_tcsrchr(pszPath,_T('.')); - if(slash) +char* GetFileExtA(const TCHAR* pszPath) +{ + const TCHAR* slash = _tcsrchr(pszPath, _T('.')); + if (slash) return mir_t2a(slash); return NULL; } //--------------------------------------------------------------------------- -BOOL GetEncoderClsid(wchar_t *wchMimeType, CLSID& clsidEncoder) { - UINT uiNum=0; - UINT uiSize=0; - BOOL bOk=FALSE; - Gdiplus::GetImageEncodersSize(&uiNum,&uiSize); - if(uiSize>0){ - Gdiplus::ImageCodecInfo* pImageCodecInfo=(Gdiplus::ImageCodecInfo*)mir_alloc(uiSize); - if(pImageCodecInfo){ - Gdiplus::GetImageEncoders(uiNum,uiSize,pImageCodecInfo); - for( UINT i=0; i<uiNum; ++i){ - if(!mir_wstrcmp(pImageCodecInfo[i].MimeType,wchMimeType)){ - clsidEncoder=pImageCodecInfo[i].Clsid; - bOk=TRUE; +BOOL GetEncoderClsid(wchar_t *wchMimeType, CLSID& clsidEncoder) +{ + UINT uiNum = 0; + UINT uiSize = 0; + BOOL bOk = FALSE; + Gdiplus::GetImageEncodersSize(&uiNum, &uiSize); + if (uiSize > 0) { + Gdiplus::ImageCodecInfo* pImageCodecInfo = (Gdiplus::ImageCodecInfo*)mir_alloc(uiSize); + if (pImageCodecInfo) { + Gdiplus::GetImageEncoders(uiNum, uiSize, pImageCodecInfo); + for (UINT i = 0; i < uiNum; ++i) { + if (!mir_wstrcmp(pImageCodecInfo[i].MimeType, wchMimeType)) { + clsidEncoder = pImageCodecInfo[i].Clsid; + bOk = TRUE; } } mir_free(pImageCodecInfo); @@ -374,36 +394,18 @@ BOOL GetEncoderClsid(wchar_t *wchMimeType, CLSID& clsidEncoder) { } return bOk; } -/* -void SavePNG(HBITMAP hBmp, TCHAR* szFilename) { - Gdiplus::GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(hBmp, (HPALETTE)GetStockObject(DEFAULT_PALETTE) ); - if( pBitmap ) { - // Get the CLSID of the PNG encoder. - CLSID clsidEncoder; - if( GetEncoderClsid(L"image/png", clsidEncoder)) { - LPWSTR pswFile = mir_t2u(szFilename); - pBitmap->Save((const WCHAR*)pswFile, &clsidEncoder, NULL); - mir_free(pswFile); - } - delete pBitmap; - } - Gdiplus::GdiplusShutdown(gdiplusToken); -}*/ -void SaveGIF(HBITMAP hBmp, TCHAR* szFilename) { +void SaveGIF(HBITMAP hBmp, TCHAR* szFilename) +{ Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(hBmp, (HPALETTE)GetStockObject(DEFAULT_PALETTE) ); - if( pBitmap ) { + Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(hBmp, (HPALETTE)GetStockObject(DEFAULT_PALETTE)); + if (pBitmap) { // Get the CLSID of the GIF encoder. CLSID clsidEncoder; - if( GetEncoderClsid(L"image/gif", clsidEncoder)) { + if (GetEncoderClsid(L"image/gif", clsidEncoder)) { LPWSTR pswFile = mir_t2u(szFilename); pBitmap->Save((const WCHAR*)pswFile, &clsidEncoder, NULL); mir_free(pswFile); @@ -413,34 +415,35 @@ void SaveGIF(HBITMAP hBmp, TCHAR* szFilename) { Gdiplus::GdiplusShutdown(gdiplusToken); } -void SaveTIF(HBITMAP hBmp, TCHAR* szFilename) { -//http://www.codeproject.com/Messages/1406708/How-to-reduce-the-size-of-an-Image-using-GDIplus.aspx +void SaveTIF(HBITMAP hBmp, TCHAR* szFilename) +{ + //http://www.codeproject.com/Messages/1406708/How-to-reduce-the-size-of-an-Image-using-GDIplus.aspx ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::Status stat; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(hBmp, (HPALETTE)GetStockObject(DEFAULT_PALETTE) ); - if( pBitmap ) { + Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(hBmp, (HPALETTE)GetStockObject(DEFAULT_PALETTE)); + if (pBitmap) { // Get the CLSID of the GIF encoder. CLSID EncCLSID; - if( GetEncoderClsid(L"image/tiff", EncCLSID)) { + if (GetEncoderClsid(L"image/tiff", EncCLSID)) { //--- Create a 2-parameter array, for Compression and for Color Bit depth Gdiplus::EncoderParameters* EncParams = (Gdiplus::EncoderParameters*) malloc(sizeof(Gdiplus::EncoderParameters) + 1 * sizeof(Gdiplus::EncoderParameter)); - // Gdiplus::EncoderParameters pEncoderParameters; + // Gdiplus::EncoderParameters pEncoderParameters; //--- Use LZW Compression instead of Group 4, since it works for color and G4 doesn't - ULONG ulCompression = Gdiplus::EncoderValueCompressionLZW ; - ULONG ulColorDepth = 24L ; - - EncParams->Count = 2 ; - EncParams->Parameter[0].Guid = Gdiplus::EncoderCompression ; - EncParams->Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong ; - EncParams->Parameter[0].NumberOfValues = 1 ; - EncParams->Parameter[0].Value = &ulCompression ; - EncParams->Parameter[1].Guid = Gdiplus::EncoderColorDepth ; - EncParams->Parameter[1].Type = Gdiplus::EncoderParameterValueTypeLong ; - EncParams->Parameter[1].NumberOfValues = 1 ; - EncParams->Parameter[1].Value = &ulColorDepth ; + ULONG ulCompression = Gdiplus::EncoderValueCompressionLZW; + ULONG ulColorDepth = 24L; + + EncParams->Count = 2; + EncParams->Parameter[0].Guid = Gdiplus::EncoderCompression; + EncParams->Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong; + EncParams->Parameter[0].NumberOfValues = 1; + EncParams->Parameter[0].Value = &ulCompression; + EncParams->Parameter[1].Guid = Gdiplus::EncoderColorDepth; + EncParams->Parameter[1].Type = Gdiplus::EncoderParameterValueTypeLong; + EncParams->Parameter[1].NumberOfValues = 1; + EncParams->Parameter[1].Value = &ulColorDepth; LPWSTR pswFile = mir_t2u(szFilename); stat = pBitmap->Save((const WCHAR*)pswFile, &EncCLSID, EncParams); diff --git a/plugins/SendScreenshotPlus/src/Utils.h b/plugins/SendScreenshotPlus/src/Utils.h index 89432753a7..0beeaabd18 100644 --- a/plugins/SendScreenshotPlus/src/Utils.h +++ b/plugins/SendScreenshotPlus/src/Utils.h @@ -44,7 +44,7 @@ extern HWND g_hCapture; extern HBITMAP g_hBitmap, g_hbmMask; //--------------------------------------------------------------------------- -int ComboBox_SelectItemData(HWND hwndCtl, int indexStart, LPARAM data); +int ComboBox_SelectItemData(HWND hwndCtl, LPARAM data); size_t MonitorInfoEnum(MONITORINFOEX* & myMonitors, RECT & virtualScreen); BOOL CALLBACK MonitorInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); diff --git a/plugins/SendScreenshotPlus/src/ctrl_button.cpp b/plugins/SendScreenshotPlus/src/ctrl_button.cpp index 3211931d70..06fdadea88 100644 --- a/plugins/SendScreenshotPlus/src/ctrl_button.cpp +++ b/plugins/SendScreenshotPlus/src/ctrl_button.cpp @@ -25,7 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define BUTTON_POLLID 100 #define BUTTON_POLLDELAY 50 -typedef struct TMBCtrl{ +typedef struct TMBCtrl +{ HWND hwnd; HANDLE hThemeButton; HANDLE hThemeToolbar; @@ -35,9 +36,9 @@ typedef struct TMBCtrl{ HBITMAP hBitmap; HFONT hFont; // font - DWORD dwStyle; - BYTE bFocus; - + DWORD dwStyle; + BYTE bFocus; + int stateId; // button state int defbutton; // default button int pbState; @@ -54,7 +55,8 @@ static HWND hwndToolTips = NULL; * param: ctl - BTNCTRL structure with the information about the theme to close * return: nothing **/ -static void __fastcall DestroyTheme(BTNCTRL *ctl) { +static void __fastcall DestroyTheme(BTNCTRL *ctl) +{ if (ctl->hThemeButton) { CloseThemeData(ctl->hThemeButton); ctl->hThemeButton = NULL; @@ -71,10 +73,11 @@ static void __fastcall DestroyTheme(BTNCTRL *ctl) { * param: ctl - BTNCTRL structure with the information about the theme to load * return: nothing **/ -static void __fastcall LoadTheme(BTNCTRL *ctl) { +static void __fastcall LoadTheme(BTNCTRL *ctl) +{ DestroyTheme(ctl); - ctl->hThemeButton = OpenThemeData(ctl->hwnd,L"BUTTON"); - ctl->hThemeToolbar = OpenThemeData(ctl->hwnd,L"TOOLBAR"); + ctl->hThemeButton = OpenThemeData(ctl->hwnd, L"BUTTON"); + ctl->hThemeToolbar = OpenThemeData(ctl->hwnd, L"TOOLBAR"); } /** @@ -83,13 +86,14 @@ static void __fastcall LoadTheme(BTNCTRL *ctl) { * param: state - state id for the normal theme button * return: stateID for the flat theme button **/ -static int __fastcall TBStateConvert2Flat(int state) { +static int __fastcall TBStateConvert2Flat(int state) +{ switch (state) { - case PBS_NORMAL: return TS_NORMAL; - case PBS_HOT: return TS_HOT; - case PBS_PRESSED: return TS_PRESSED; - case PBS_DISABLED: return TS_DISABLED; - case PBS_DEFAULTED: return TS_NORMAL; + case PBS_NORMAL: return TS_NORMAL; + case PBS_HOT: return TS_HOT; + case PBS_PRESSED: return TS_PRESSED; + case PBS_DISABLED: return TS_DISABLED; + case PBS_DEFAULTED: return TS_NORMAL; } return TS_NORMAL; } @@ -116,12 +120,12 @@ static void __fastcall PaintIcon(BTNCTRL *ctl, HDC hdcMem, LPWORD ccText, LPRECT rcImage.top = (rcClient->bottom - rcClient->top - rcImage.bottom) / 2; rcImage.right += rcImage.left; rcImage.bottom += rcImage.top; - + OffsetRect(rcText, rcImage.right + 4, 0); if (ctl->stateId == PBS_PRESSED) OffsetRect(&rcImage, 1, 1); - DrawState(hdcMem, NULL, NULL, (LPARAM)ctl->hIcon, 0, - rcImage.left, rcImage.top, + DrawState(hdcMem, NULL, NULL, (LPARAM)ctl->hIcon, 0, + rcImage.left, rcImage.top, rcImage.right - rcImage.left, rcImage.bottom - rcImage.top, IsWindowEnabled(ctl->hwnd) ? DST_ICON | DSS_NORMAL : DST_ICON | DSS_DISABLED); } @@ -129,16 +133,16 @@ static void __fastcall PaintIcon(BTNCTRL *ctl, HDC hdcMem, LPWORD ccText, LPRECT // draw arrow on the right of the button if (ctl->arrow) { rcImage.right = GetSystemMetrics(SM_CXSMICON); - rcImage.left = (*ccText > 0 || ctl->hIcon) - ? rcClient->right - GetSystemMetrics(SM_CXSMICON) - : (rcClient->right - rcClient->left - rcImage.right) / 2; + rcImage.left = (*ccText > 0 || ctl->hIcon) + ? rcClient->right - GetSystemMetrics(SM_CXSMICON) + : (rcClient->right - rcClient->left - rcImage.right) / 2; rcImage.right += rcImage.left; rcImage.bottom = GetSystemMetrics(SM_CYSMICON); rcImage.top = (rcClient->bottom - rcClient->top - rcImage.bottom) / 2; if (ctl->stateId == PBS_PRESSED) OffsetRect(&rcImage, 1, 1); - DrawState(hdcMem, NULL, NULL, (LPARAM)ctl->arrow, 0, - rcImage.left, rcImage.top, + DrawState(hdcMem, NULL, NULL, (LPARAM)ctl->arrow, 0, + rcImage.left, rcImage.top, rcImage.right - rcImage.left, rcImage.bottom - rcImage.top, IsWindowEnabled(ctl->hwnd) ? DST_ICON | DSS_NORMAL : DST_ICON | DSS_DISABLED); } @@ -161,10 +165,10 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien // Draw the flat button if ((ctl->dwStyle & MBS_FLAT) && ctl->hThemeToolbar) { int state = IsWindowEnabled(ctl->hwnd) - ? (ctl->stateId == PBS_NORMAL && ctl->defbutton - ? PBS_DEFAULTED - : ctl->stateId) - : PBS_DISABLED; + ? (ctl->stateId == PBS_NORMAL && ctl->defbutton + ? PBS_DEFAULTED + : ctl->stateId) + : PBS_DISABLED; if (IsThemeBackgroundPartiallyTransparent(ctl->hThemeToolbar, TP_BUTTON, TBStateConvert2Flat(state))) { if (SUCCEEDED(DrawThemeParentBackground(ctl->hwnd, hdcMem, rcClient))) DrawThemeParentBackground(GetParent(ctl->hwnd), hdcMem, rcClient); @@ -175,9 +179,9 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien // draw themed button background if (ctl->hThemeButton) { int state = IsWindowEnabled(ctl->hwnd) - ? (ctl->stateId == PBS_NORMAL && ctl->defbutton - ? PBS_DEFAULTED - : ctl->stateId) + ? (ctl->stateId == PBS_NORMAL && ctl->defbutton + ? PBS_DEFAULTED + : ctl->stateId) : PBS_DISABLED; if (IsThemeBackgroundPartiallyTransparent(ctl->hThemeButton, BP_PUSHBUTTON, state)) { if (SUCCEEDED(DrawThemeParentBackground(ctl->hwnd, hdcMem, rcClient))) @@ -186,7 +190,7 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien DrawThemeBackground(ctl->hThemeButton, hdcMem, BP_PUSHBUTTON, state, rcClient, rcClient); } } - + // calculate text rect { RECT sizeText; @@ -196,7 +200,7 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien if (ccText > 0) { hOldFont = (HFONT)SelectObject(hdcMem, ctl->hFont); - + GetThemeTextExtent( ctl->hThemeButton, hdcMem, @@ -207,10 +211,10 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien DST_PREFIXTEXT, NULL, &sizeText); - + if (ctl->cHot) { RECT rcHot; - + GetThemeTextExtent(ctl->hThemeButton, hdcMem, BP_PUSHBUTTON, @@ -220,7 +224,7 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien DST_PREFIXTEXT, NULL, &rcHot); - + sizeText.right -= (rcHot.right - rcHot.left); } SelectObject(hdcMem, hOldFont); @@ -236,7 +240,7 @@ static void __fastcall PaintThemeButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClien } PaintIcon(ctl, hdcMem, &ccText, rcClient, &rcText); // draw text - if (ccText > 0 && ctl->hThemeButton) { + if (ccText > 0 && ctl->hThemeButton) { HFONT hOldFont = (HFONT)SelectObject(hdcMem, ctl->hFont); DrawThemeText(ctl->hThemeButton, hdcMem, BP_PUSHBUTTON, IsWindowEnabled(ctl->hwnd) ? ctl->stateId : PBS_DISABLED, wszText, ccText, DST_PREFIXTEXT, 0, &rcText); SelectObject(hdcMem, hOldFont); @@ -260,7 +264,7 @@ static void __fastcall PaintButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClient) // Draw the flat button if (ctl->dwStyle & MBS_FLAT) { HBRUSH hbr = NULL; - + if (ctl->stateId == PBS_PRESSED || ctl->stateId == PBS_HOT) hbr = GetSysColorBrush(COLOR_3DLIGHT); else { @@ -278,16 +282,16 @@ static void __fastcall PaintButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClient) DeleteObject(hbr); } if (ctl->stateId == PBS_HOT || ctl->bFocus) { - if (ctl->pbState) DrawEdge(hdcMem, rcClient, EDGE_ETCHED, BF_RECT|BF_SOFT); - else DrawEdge(hdcMem, rcClient, BDR_RAISEDOUTER, BF_RECT|BF_SOFT|BF_FLAT); + if (ctl->pbState) DrawEdge(hdcMem, rcClient, EDGE_ETCHED, BF_RECT | BF_SOFT); + else DrawEdge(hdcMem, rcClient, BDR_RAISEDOUTER, BF_RECT | BF_SOFT | BF_FLAT); } else - if (ctl->stateId == PBS_PRESSED) - DrawEdge(hdcMem, rcClient, BDR_SUNKENOUTER, BF_RECT|BF_SOFT); + if (ctl->stateId == PBS_PRESSED) + DrawEdge(hdcMem, rcClient, BDR_SUNKENOUTER, BF_RECT | BF_SOFT); } else { - UINT uState = DFCS_BUTTONPUSH|((ctl->stateId == PBS_HOT) ? DFCS_HOT : 0)|((ctl->stateId == PBS_PRESSED) ? DFCS_PUSHED : 0); - if (ctl->defbutton&&ctl->stateId==PBS_NORMAL) uState |= DLGC_DEFPUSHBUTTON; + UINT uState = DFCS_BUTTONPUSH | ((ctl->stateId == PBS_HOT) ? DFCS_HOT : 0) | ((ctl->stateId == PBS_PRESSED) ? DFCS_PUSHED : 0); + if (ctl->defbutton&&ctl->stateId == PBS_NORMAL) uState |= DLGC_DEFPUSHBUTTON; DrawFrameControl(hdcMem, rcClient, DFC_BUTTON, uState); // Draw focus rectangle if button has focus if (ctl->bFocus) { @@ -308,7 +312,7 @@ static void __fastcall PaintButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClient) GetTextExtentPoint32(hdcMem, szText, ccText, &sizeText); if (ctl->cHot) { SIZE sizeHot; - + GetTextExtentPoint32A(hdcMem, "&", 1, &sizeHot); sizeText.cx -= sizeHot.cx; } @@ -325,20 +329,20 @@ static void __fastcall PaintButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClient) PaintIcon(ctl, hdcMem, &ccText, rcClient, &rcText); // draw text - if (ccText > 0) { + if (ccText > 0) { HFONT hOldFont; hOldFont = (HFONT)SelectObject(hdcMem, ctl->hFont); SetBkMode(hdcMem, TRANSPARENT); - SetTextColor(hdcMem, - IsWindowEnabled(ctl->hwnd) || !ctl->hThemeButton + SetTextColor(hdcMem, + IsWindowEnabled(ctl->hwnd) || !ctl->hThemeButton ? ctl->stateId == PBS_HOT - ? GetSysColor(COLOR_HOTLIGHT) - : GetSysColor(COLOR_BTNTEXT) - : GetSysColor(COLOR_GRAYTEXT)); + ? GetSysColor(COLOR_HOTLIGHT) + : GetSysColor(COLOR_BTNTEXT) + : GetSysColor(COLOR_GRAYTEXT)); - DrawState(hdcMem, NULL, NULL, (LPARAM)szText, 0, + DrawState(hdcMem, NULL, NULL, (LPARAM)szText, 0, rcText.left, rcText.top, rcText.right - rcText.left, rcText.bottom - rcText.top, IsWindowEnabled(ctl->hwnd) || ctl->hThemeButton ? DST_PREFIXTEXT | DSS_NORMAL : DST_PREFIXTEXT | DSS_DISABLED); SelectObject(hdcMem, hOldFont); @@ -354,9 +358,10 @@ static void __fastcall PaintButton(BTNCTRL *ctl, HDC hdcMem, LPRECT rcClient) * lParam - message specific parameter * return: message specific **/ -static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, LPARAM lParam) { +static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ LPBTNCTRL bct = (LPBTNCTRL)GetWindowLongPtr(hwndBtn, 0); - + switch (uMsg) { case WM_NCCREATE: { @@ -374,9 +379,11 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L bct->arrow = GetIconBtn(ICO_BTN_DOWNARROW); LoadTheme(bct); SetWindowLongPtr(hwndBtn, 0, (LONG_PTR)bct); - if (cs->lpszName) SetWindowText(hwndBtn, cs->lpszName); - return TRUE; + if (cs->lpszName) + SetWindowText(hwndBtn, cs->lpszName); } + return TRUE; + case WM_DESTROY: if (bct) { mir_cslock lck(csTips); @@ -401,6 +408,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L } SetWindowLongPtr(hwndBtn, 0, 0); break; + case WM_SETTEXT: bct->cHot = 0; if ((LPTSTR)lParam) { @@ -416,6 +424,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L InvalidateRect(bct->hwnd, NULL, TRUE); } break; + case WM_SYSKEYUP: if (bct->stateId != PBS_DISABLED && bct->cHot && bct->cHot == _totlower((TCHAR)wParam)) { if (bct->dwStyle & MBS_PUSHBUTTON) { @@ -429,14 +438,17 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L return 0; } break; - case WM_THEMECHANGED: + + case WM_THEMECHANGED: // themed changed, reload theme object LoadTheme(bct); InvalidateRect(bct->hwnd, NULL, TRUE); // repaint it break; + case WM_SETFONT: // remember the font so we can use it later bct->hFont = (HFONT)wParam; // maybe we should redraw? break; + case WM_NCPAINT: case WM_PAINT: { @@ -446,7 +458,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L HBITMAP hbmMem; HDC hOld; RECT rcClient; - + if (hdcPaint = BeginPaint(hwndBtn, &ps)) { GetClientRect(bct->hwnd, &rcClient); hdcMem = CreateCompatibleDC(hdcPaint); @@ -464,11 +476,12 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L BitBlt(hdcPaint, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hdcMem, 0, 0, SRCCOPY); SelectObject(hdcMem, hOld); DeleteObject(hbmMem); - DeleteDC(hdcMem); + DeleteDC(hdcMem); EndPaint(hwndBtn, &ps); } } return 0; + case BM_SETIMAGE: if (wParam == IMAGE_ICON) { bct->hIcon = (HICON)lParam; @@ -486,6 +499,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L InvalidateRect(bct->hwnd, NULL, TRUE); } break; + case BM_SETCHECK: if (!(bct->dwStyle & MBS_PUSHBUTTON)) break; if (wParam == BST_CHECKED) { @@ -498,15 +512,18 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L } InvalidateRect(bct->hwnd, NULL, TRUE); break; + case BM_GETCHECK: if (bct->dwStyle & MBS_PUSHBUTTON) return bct->pbState ? BST_CHECKED : BST_UNCHECKED; return 0; + case BUTTONSETDEFAULT: bct->defbutton = (wParam != 0); InvalidateRect(bct->hwnd, NULL, TRUE); break; + case BUTTONADDTOOLTIP: - if (wParam) { + if (wParam) { mir_cslock lck(csTips); if (!hwndToolTips) hwndToolTips = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP, 0, 0, 0, 0, NULL, NULL, GetModuleHandle(NULL), NULL); @@ -522,9 +539,9 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L if (SendMessage(hwndToolTips, TTM_GETTOOLINFOW, 0, (LPARAM)&ti)) { SendMessage(hwndToolTips, TTM_DELTOOLW, 0, (LPARAM)&ti); } - ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS; + ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS; ti.uId = (UINT_PTR)bct->hwnd; - ti.lpszText=(LPWSTR)wParam; + ti.lpszText = (LPWSTR)wParam; SendMessage(hwndToolTips, TTM_ADDTOOLW, 0, (LPARAM)&ti); } else { @@ -538,47 +555,53 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L if (SendMessage(hwndToolTips, TTM_GETTOOLINFOA, 0, (LPARAM)&ti)) { SendMessage(hwndToolTips, TTM_DELTOOLA, 0, (LPARAM)&ti); } - ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS; + ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS; ti.uId = (UINT_PTR)bct->hwnd; - ti.lpszText=(LPSTR)wParam; + ti.lpszText = (LPSTR)wParam; SendMessage(hwndToolTips, TTM_ADDTOOLA, 0, (LPARAM)&ti); } } break; + case BUTTONTRANSLATE: - { - TCHAR szButton[MAX_PATH]; - GetWindowText(bct->hwnd, szButton, _countof(szButton)); - SetWindowText(bct->hwnd, TranslateTS(szButton)); - } + TCHAR szButton[MAX_PATH]; + GetWindowText(bct->hwnd, szButton, _countof(szButton)); + SetWindowText(bct->hwnd, TranslateTS(szButton)); break; + case WM_SETFOCUS: // set keybord bFocus and redraw bct->bFocus = 1; InvalidateRect(bct->hwnd, NULL, TRUE); break; + case WM_KILLFOCUS: // kill bFocus and redraw bct->bFocus = 0; InvalidateRect(bct->hwnd, NULL, TRUE); break; + case WM_WINDOWPOSCHANGED: InvalidateRect(bct->hwnd, NULL, TRUE); break; + case WM_ENABLE: // windows tells us to enable/disable bct->stateId = wParam ? PBS_NORMAL : PBS_DISABLED; InvalidateRect(bct->hwnd, NULL, TRUE); break; + case WM_MOUSELEAVE: // faked by the WM_TIMER if (bct->stateId != PBS_DISABLED) { // don't change states if disabled bct->stateId = PBS_NORMAL; InvalidateRect(bct->hwnd, NULL, TRUE); } break; + case WM_LBUTTONDOWN: if (bct->stateId != PBS_DISABLED) { // don't change states if disabled bct->stateId = PBS_PRESSED; InvalidateRect(bct->hwnd, NULL, TRUE); } break; + case WM_LBUTTONUP: if (bct->stateId != PBS_DISABLED) { // don't change states if disabled BYTE bPressed = bct->stateId == PBS_PRESSED; @@ -595,6 +618,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L InvalidateRect(bct->hwnd, NULL, TRUE); } break; + case WM_MOUSEMOVE: if (bct->stateId == PBS_NORMAL) { bct->stateId = PBS_HOT; @@ -603,6 +627,7 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L // Call timer, used to start cheesy TrackMouseEvent faker SetTimer(hwndBtn, BUTTON_POLLID, BUTTON_POLLDELAY, NULL); break; + case WM_TIMER: // use a timer to check if they have did a mouseout if (wParam == BUTTON_POLLID) { RECT rc; @@ -621,27 +646,28 @@ static LRESULT CALLBACK Button_WndProc(HWND hwndBtn, UINT uMsg, WPARAM wParam, L } return DefWindowProc(hwndBtn, uMsg, wParam, lParam); } -static bool g_init=false; -void CtrlButtonUnloadModule() + +static bool g_init = false; + +void CtrlButtonUnloadModule() { - if(!g_init) return; - g_init=false; + if (!g_init) return; + g_init = false; UnregisterClass(UINFOBUTTONCLASS, g_hSendSS); } void CtrlButtonLoadModule()/// @fixme : compatibility with UInfoEx is everything but perfect... we get a huge problem if UInfoEx is unloaded... { - if(ServiceExists("UserInfo/vCard/Export")) return; + if (ServiceExists("UserInfo/vCard/Export")) return; WNDCLASSEX wc; - g_init=true; - + g_init = true; + memset(&wc, 0, sizeof(wc)); - wc.cbSize = sizeof(wc); - wc.lpszClassName = UINFOBUTTONCLASS; - wc.lpfnWndProc = Button_WndProc; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.cbWndExtra = sizeof(LPBTNCTRL); - wc.style = CS_GLOBALCLASS; + wc.cbSize = sizeof(wc); + wc.lpszClassName = UINFOBUTTONCLASS; + wc.lpfnWndProc = Button_WndProc; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.cbWndExtra = sizeof(LPBTNCTRL); + wc.style = CS_GLOBALCLASS; RegisterClassEx(&wc); } - diff --git a/plugins/SendScreenshotPlus/src/dlg_msgbox.cpp b/plugins/SendScreenshotPlus/src/dlg_msgbox.cpp index 34d9f65c4f..6f1653590c 100644 --- a/plugins/SendScreenshotPlus/src/dlg_msgbox.cpp +++ b/plugins/SendScreenshotPlus/src/dlg_msgbox.cpp @@ -27,7 +27,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MODNAME SZ_SENDSS #define ICO_COMMON_MAIN 0xFFFF #define ICO_DLG_DETAILS 0xFFFF -HICON Skin_GetIcon_SendSS(unsigned short id, BOOL big=0) + +HICON Skin_GetIcon_SendSS(unsigned short id) { if(id==0xFFFF) return GetIcon(ICO_MAIN); @@ -81,7 +82,7 @@ static HICON MsgLoadIcon(LPMSGBOX pMsgBox) hIcon = pMsgBox->hiMsg; break; - // default windows icons + // default windows icons case MB_ICON_ERROR: case MB_ICON_QUESTION: case MB_ICON_WARNING: @@ -92,7 +93,7 @@ static HICON MsgLoadIcon(LPMSGBOX pMsgBox) } break; - // no icon + // no icon default: hIcon = NULL; } @@ -210,7 +211,7 @@ static INT_PTR CALLBACK MsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM l // set infobar's logo icon SendDlgItemMessage(hDlg, ICO_DLGLOGO, STM_SETIMAGE, IMAGE_ICON, - (pMsgBox->hiLogo ? (LPARAM)pMsgBox->hiLogo : (LPARAM)IcoLib_GetIcon(ICO_DLG_DETAILS,TRUE))); + (pMsgBox->hiLogo ? (LPARAM)pMsgBox->hiLogo : (LPARAM)IcoLib_GetIcon(ICO_DLG_DETAILS))); // enable headerbar ShowWindow(GetDlgItem(hDlg, TXT_NAME), SW_SHOW); @@ -240,43 +241,43 @@ static INT_PTR CALLBACK MsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM l if (HDC hDC = GetDC(hDlg)) { POINT mpt = { 0, 0 }; RECT ws = { 0, 0, 0, 0 }; - int txtWidth=0, txtHeight=0, needX, needY; + int txtWidth = 0, txtHeight = 0, needX, needY; RECT rcDlg; SIZE ts; LPTSTR h, rs; SelectObject(hDC, hNormalFont); // get message text width and height - if(pMsgBox->ptszMsg) for (rs=h=pMsgBox->ptszMsg; ; ++h) { - if (*h=='\n' || !*h) { - GetTextExtentPoint32(hDC, rs, h-rs, &ts); + if (pMsgBox->ptszMsg) for (rs = h = pMsgBox->ptszMsg;; ++h) { + if (*h == '\n' || !*h) { + GetTextExtentPoint32(hDC, rs, h - rs, &ts); if (ts.cx > txtWidth) txtWidth = ts.cx; txtHeight += ts.cy; if (!*h) break; - rs = h+1; + rs = h + 1; } } // increase width if info text requires more - if((pMsgBox->uType&MB_INFOBAR) && pMsgBox->ptszInfoText && *pMsgBox->ptszInfoText){ + if ((pMsgBox->uType&MB_INFOBAR) && pMsgBox->ptszInfoText && *pMsgBox->ptszInfoText) { int multiline = 0; - RECT rcico; GetClientRect(GetDlgItem(hDlg,ICO_DLGLOGO), &rcico); - rcico.right = rcico.right*100/66; // padding - for(rs=h=pMsgBox->ptszInfoText; ; ++h) { - if (*h=='\n' || !*h) { - GetTextExtentPoint32(hDC, rs, h-rs, &ts); + RECT rcico; GetClientRect(GetDlgItem(hDlg, ICO_DLGLOGO), &rcico); + rcico.right = rcico.right * 100 / 66; // padding + for (rs = h = pMsgBox->ptszInfoText;; ++h) { + if (*h == '\n' || !*h) { + GetTextExtentPoint32(hDC, rs, h - rs, &ts); ts.cx += rcico.right; if (ts.cx > txtWidth) txtWidth = ts.cx; if (!*h) break; - rs = h+1; + rs = h + 1; ++multiline; } } - if(!multiline) - SetWindowLongPtr(GetDlgItem(hDlg,TXT_NAME), GWL_STYLE, GetWindowLongPtr(GetDlgItem(hDlg,TXT_NAME), GWL_STYLE)|SS_CENTERIMAGE); + if (!multiline) + SetWindowLongPtr(GetDlgItem(hDlg, TXT_NAME), GWL_STYLE, GetWindowLongPtr(GetDlgItem(hDlg, TXT_NAME), GWL_STYLE) | SS_CENTERIMAGE); } ReleaseDC(hDlg, hDC); @@ -285,8 +286,8 @@ static INT_PTR CALLBACK MsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM l GetWindowRect(GetDlgItem(hDlg, TXT_MESSAGE), &ws); needX = txtWidth - (ws.right - ws.left) - icoWidth; needY = max(0, txtHeight - (ws.bottom - ws.top) + 5); - rcDlg.left -= needX/2; rcDlg.right += needX/2; - rcDlg.top -= (needY-InfoBarHeight)/2; rcDlg.bottom += (needY-InfoBarHeight)/2; + rcDlg.left -= needX / 2; rcDlg.right += needX / 2; + rcDlg.top -= (needY - InfoBarHeight) / 2; rcDlg.bottom += (needY - InfoBarHeight) / 2; // resize dialog window MoveWindow(hDlg, rcDlg.left, rcDlg.top, rcDlg.right - rcDlg.left, rcDlg.bottom - rcDlg.top, FALSE); @@ -492,7 +493,7 @@ static INT_PTR CALLBACK MsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM l * this set call function in wait stait and do not freece miranda main thread * the window is outside the desktop */ -static INT_PTR CALLBACK MsgBoxPop(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK MsgBoxPop(HWND hDlg, UINT uMsg, WPARAM, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: @@ -597,7 +598,8 @@ static INT_PTR CALLBACK MsgBoxPop(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lP * * @return TRUE, FALSE, IDOK, IDYES, IDALL, IDNO or IDCANCEL **/ -static LRESULT CALLBACK PopupProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + +LRESULT CALLBACK PopupProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case UM_POPUPACTION: @@ -645,7 +647,7 @@ static LRESULT CALLBACK PopupProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lP * @return The function returns the ID of the clicked button (IDOK, IDCANCEL, ...) * or -1 on error. **/ -INT_PTR MsgBoxService(WPARAM wParam, LPARAM lParam) +INT_PTR MsgBoxService(WPARAM, LPARAM lParam) { LPMSGBOX pMsgBox = (LPMSGBOX)lParam; @@ -705,7 +707,7 @@ INT_PTR CALLBACK MsgErr(HWND hParent, LPCTSTR pszFormat, ...) mir_vsntprintf(tszMsg, _countof(tszMsg), TranslateTS(pszFormat), vl); va_end(vl); - MSGBOX mb = {0}; + MSGBOX mb = { 0 }; mb.cbSize = sizeof(MSGBOX); mb.hParent = hParent; mb.hiLogo = IcoLib_GetIcon(ICO_COMMON_MAIN); diff --git a/plugins/SendScreenshotPlus/src/mir_string.cpp b/plugins/SendScreenshotPlus/src/mir_string.cpp index a363f21415..3cf4a76138 100644 --- a/plugins/SendScreenshotPlus/src/mir_string.cpp +++ b/plugins/SendScreenshotPlus/src/mir_string.cpp @@ -30,36 +30,36 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //---------------------------------------------------------------------------
void mir_stradd(char* &pszDest, const char* pszSrc)
{
- if(!pszSrc)
+ if (!pszSrc)
return;
- if(!pszDest)
+ if (!pszDest)
pszDest = mir_strdup(pszSrc);
else {
- size_t lenDest = mir_strlen(pszDest);
- size_t lenSrc = mir_strlen(pszSrc);
+ size_t lenDest = mir_strlen(pszDest);
+ size_t lenSrc = mir_strlen(pszSrc);
size_t lenNew = lenDest + lenSrc + 1;
- pszDest = (char *) mir_realloc(pszDest, sizeof(char)* lenNew);
+ pszDest = (char *)mir_realloc(pszDest, sizeof(char)* lenNew);
mir_strcpy(pszDest + lenDest, pszSrc);
- pszDest[lenNew-1] = 0;
+ pszDest[lenNew - 1] = 0;
}
}
void mir_wstradd(wchar_t* &pszDest, const wchar_t* pszSrc)
{
- if(!pszSrc)
+ if (!pszSrc)
return;
- if(!pszDest)
+ if (!pszDest)
pszDest = mir_wstrdup(pszSrc);
else {
- size_t lenDest = mir_wstrlen(pszDest);
- size_t lenSrc = mir_wstrlen(pszSrc);
+ size_t lenDest = mir_wstrlen(pszDest);
+ size_t lenSrc = mir_wstrlen(pszSrc);
size_t lenNew = lenDest + lenSrc + 1;
- pszDest = (wchar_t *) mir_realloc(pszDest, sizeof(wchar_t)*lenNew);
+ pszDest = (wchar_t *)mir_realloc(pszDest, sizeof(wchar_t)*lenNew);
mir_wstrcpy(pszDest + lenDest, pszSrc);
- pszDest[lenNew-1] = 0;
+ pszDest[lenNew - 1] = 0;
}
}
diff --git a/plugins/SendScreenshotPlus/src/stdafx.h b/plugins/SendScreenshotPlus/src/stdafx.h index cec50a38c3..f5f13d210d 100644 --- a/plugins/SendScreenshotPlus/src/stdafx.h +++ b/plugins/SendScreenshotPlus/src/stdafx.h @@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef _GLOBAL_H_ #define _GLOBAL_H_ -#define _CRT_SECURE_NO_WARNINGS #define OEMRESOURCE #include <windows.h> |