#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ); BOOL InitApplication( HINSTANCE hInstance ); BOOL InitInstance( HINSTANCE hInstance,int nCmdShow ); LRESULT CALLBACK MainWndProc( HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam ); BOOL ShowFileInfo( HWND hWnd,HDC hDC,HDROP hDropInfo );
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) { MSG msg;
if( !InitApplication( hInstance ) ) return FALSE; if( !InitInstance( hInstance,nCmdShow ) ) return FALSE; while( GetMessage( &msg,NULL,0,0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam; }
BOOL InitApplication( HINSTANCE hInstance ) { WNDCLASS wc;
wc.style = 0; wc.lpfnWndProc = ( WNDPROC )MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL,IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL,IDC_ARROW ); // wc.hbrBackground = GetStockObject( WHITE_BRUSH ); wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName = "DropFileClass";
return RegisterClass( &wc ); }
BOOL InitInstance( HINSTANCE hInstance,int nCmdShow ) { HWND hWnd;
hWnd = CreateWindowEx( 0, "DropFileClass", "DropFile Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if( !hWnd ) return FALSE; ShowWindow( hWnd,nCmdShow ); UpdateWindow( hWnd ); return TRUE; }
LRESULT CALLBACK MainWndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam ) { HDC hDC;
switch( uMsg ) { case WM_CREATE: DragAcceptFiles( hWnd,TRUE ); break; case WM_DROPFILES: HDROP hDropInfo; hDropInfo = ( HDROP )wParam; // hDropInfo = ( HANDLE )wParam; hDC = GetDC( hWnd ); ShowFileInfo( hWnd,hDC,hDropInfo ); DragFinish( hDropInfo ); ReleaseDC( hWnd,hDC ); break; case WM_DESTROY: DragAcceptFiles( hWnd,FALSE ); PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd,uMsg,wParam,lParam ); } return 0; }
BOOL ShowFileInfo( HWND hWnd,HDC hDC,HDROP hDropInfo ) { POINT pt; WORD cFiles; HINSTANCE hCurrentInst; HICON hIcon; SHFILEINFO sfi; char lpszFile[ 80 ]; char szBuff[ 1024 ];
DragQueryPoint( hDropInfo,&pt ); cFiles = DragQueryFile( hDropInfo,( UINT )0xFFFFFFFF,( LPTSTR )NULL,( UINT )NULL ); if( cFiles > 1 ) { wsprintf( szBuff,"DragFileNumber: %d",( int )cFiles ); TextOut( hDC,pt.x,pt.y,szBuff,lstrlen( szBuff ) ); return FALSE; } else { DragQueryFile( hDropInfo,0,lpszFile,sizeof( lpszFile ) ); if( SHGetFileInfo( lpszFile,0,&sfi,sizeof( SHFILEINFO ),SHGFI_DISPLAYNAME | SHGFI_TYPENAME ) ) { memset( szBuff,0,sizeof( szBuff ) ); wsprintf( szBuff,"Name: %s Type: %s",sfi.szDisplayName,sfi.szTypeName ); } hCurrentInst = ( HINSTANCE )GetWindowLong( hWnd,GWL_HINSTANCE ); hIcon = ExtractIcon( hCurrentInst,lpszFile,0 ); if( hIcon == NULL || hIcon == ( HICON )1 ) { TextOut( hDC,pt.x,pt.y,szBuff,lstrlen( szBuff ) ); } else { DrawIcon( hDC,pt.x,pt.y,hIcon ); TextOut( hDC,pt.x,pt.y + 32,szBuff,lstrlen( szBuff ) ); } } return TRUE; }
 
|