send_to_hd.c
上传用户:sales84
上传日期:2007-01-11
资源大小:864k
文件大小:48k
- #include <userdlg.h>
- #include <commctrl.h>
#include <shlobj.h>
#include "resource.h"
#include "sharewareluncher.h"
#define DEL_CANCEL 90001
//#define IDC_HAND 99999 //hand cursor
typedef struct AAA
{
- LPITEMIDLIST lpi;
- LPSHELLFOLDER lpsfParent;
- LPITEMIDLIST lpifq;
- }TVITEMDATA,*LPTVITEMDATA;
-
typedef struct _STRRET1
{
- UINT uType; // One of the STRRET_* values
- union
- {
- LPWSTR pOleStr; // OLESTR that will be freed
- LPSTR pStr; // ANSI string that will be freed (needed?)
- UINT uOffset; // Offset into SHITEMID
- char cStr[MAX_PATH]; // Buffer to fill in (ANSI)
- } ;//DUMMYUNIONNAME;
- } STRRET1, *LPSTRRET1;
typedef struct _FileOp
{
UINT uOp;
BOOL bUpdate;
BOOL bNoAsk;
BOOL bNoFolder;
}DOFILEOP,*LPDOFILEOP;
extern HINSTANCE hInst;
extern HWND hMainWnd;
extern char szRunCommand[300];
extern HBITMAP hbmBkg;
HWND hTreeWnd;
char szFoldername[MAX_PATH],szDestFolder[MAX_PATH],szShowDest[MAX_PATH];
char szSourceFile[MAX_PATH];
char szThisFolder[MAX_PATH]; //in listview-IDC_SELECTSEND's dir
char szForCheck[300]; //restore the szRunCommand
NM_TREEVIEW *pNmTv=NULL;
DOFILEOP dofileop={FO_COPY,FALSE,FALSE,FALSE};
BOOL bNoMsg=FALSE;
BOOL bDelNoAsk=FALSE;
HWND hTypeWnd;
HWND hBaseWnd=NULL,hExternWnd=NULL; //treeview hwnd and sendproc hwnd
RECT CDestRt; //change dest folder rect,in SendProc,for text control "目的文件夹"
BOOL bInText=FALSE; //check mouse in text control "目的文件夹"?
int nFocused=-1; //for in listview,if "shift" pressed,record the first item;
BOOL CALLBACK WINAPI BrowserProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);
BOOL CALLBACK WINAPI MsgProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);
BOOL CALLBACK WINAPI SendProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);
BOOL CALLBACK WINAPI AskDelProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);
void FillTreeView(HWND hwndTreeView,LPSHELLFOLDER lpsf,LPITEMIDLIST lpifq, HTREEITEM hParent);
BOOL GetName( LPSHELLFOLDER lpsf, LPITEMIDLIST lpi, DWORD dwFlags, LPSTR lpFriendlyName) ;
LPITEMIDLIST CopyITEMID( LPMALLOC lpMalloc, LPITEMIDLIST lpi) ;
LPITEMIDLIST ConcatPidls( LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) ;
- LPITEMIDLIST GetFullyQualPidl( LPSHELLFOLDER lpsf, LPITEMIDLIST lpi) ;
void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,LPTV_ITEM lptvitem);
int GetIcon( LPITEMIDLIST lpi, UINT uFlags) ;
- UINT GetSize(LPCITEMIDLIST pidl);
- LPITEMIDLIST Create(UINT cbSize);
- LPITEMIDLIST Next(LPCITEMIDLIST pidl);
- int WINAPI BrowseProc( HWND hwnd, UINT msg, LPARAM lParam, LPARAM lpData);
- int DelFile(LPSTR szfile);
- void DoCopy(void);
- void DoSend(void);
- void ResetFileOp(void);
- BOOL DoCheckCommand(void);
- void ExpandTree(void);
- void FillList(HWND hWnd);
- void FillSend(HWND hWnd,LPSTR szFileType);
- LRESULT NotifyHandler( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- void InitCol(HWND hWnd);
- void AddListview(HWND hWnd,LPSTR szDisplay,int i);
- HICON GetFileIcon(LPSTR lpi);
- void AddFileType(LPSTR s);
- void RestoreCheckCommand(void); //restore szRunCommand
- void UpdateDestFolder(void); //listview对话框“目的文件夹”
- void ChangeShortcut(void)
- {
//MessageBox(GetFocus(),"
}
void DelShortcut(void)
{
//Errmsg("del link will write later");
}
void SendToHD(void)
{
wsprintf(szForCheck,szRunCommand);
if(hBaseWnd==NULL)
{
if(DialogBox(hInst,MAKEINTRESOURCE(IDD_BROWSER),hMainWnd,(DLGPROC)BrowserProc))
DoCopy();
ResetFileOp();
}
else
{
SetForegroundWindow(hBaseWnd);
SendMessage(hBaseWnd,MYWM_ICON,0,0);
}
}
#pragma argsused
BOOL CALLBACK WINAPI BrowserProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
HIMAGELIST hImageList;
- LPSHELLFOLDER lpsf = 0 ;
- SHFILEINFO sfi;
- HRESULT hr ;
- hBaseWnd=hWnd;
- hTreeWnd=GetDlgItem(hWnd,IDC_LISTALL);
- hImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\",
- 0,
- &sfi,
- sizeof(SHFILEINFO),
- SHGFI_SYSICONINDEX | SHGFI_SMALLICON) ;
- if( hImageList)
- TreeView_SetImageList(hTreeWnd, hImageList, 0) ;
- hr=SHGetDesktopFolder( &lpsf) ;
- if( SUCCEEDED(hr))
- {
- TreeView_DeleteAllItems( hTreeWnd);
- FillTreeView( hTreeWnd, lpsf, NULL, TVI_ROOT) ;
- ExpandTree();
- TreeView_SelectItem(hTreeWnd,TreeView_GetRoot(hTreeWnd));//,TVGN_FIRSTVISIBLE);
- }
- if( lpsf)
- lpsf -> lpVtbl -> Release( lpsf) ;
- }
- break ;
case MYWM_ICON: //临时借用,该对话框运行时再有"send to sharewareluncher"
if(hExternWnd!=NULL) //可更新正运行(如果)的listview对话框内容
{
UpdateDestFolder();
SetDlgItemText(hExternWnd,IDC_DESTFOLDER,szDestFolder);
PostMessage(hExternWnd,MYWM_ICON,0,0);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
if(hExternWnd!=NULL)
{
SetForegroundWindow(hExternWnd);
break;
}
hBaseWnd=NULL;
EndDialog(hWnd,TRUE);
return TRUE;
case IDCANCEL:
if(hExternWnd!=NULL)
{
SetForegroundWindow(hExternWnd);
break;
}
hBaseWnd=NULL;
wsprintf(szDestFolder,"