windows sdk 实现文件拖拽 不是使用mfc
2013-12-10 17:30
363 查看
#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; }
相关文章推荐
- 让自己的软件实现拖拽打开文件(使用WM_DROPFILES消息和DragQueryFile函数)
- MFC中实现单个控件接收拖拽文件的功能
- MFC----文件拖拽的实现OnDropFiles
- MFC实现文件拖拽功能
- 在MFC中实现拖拽文件到对话框中的编辑控件中
- VC/MFC 实现文件拖拽获取文件名(WM_DROPFILES)
- 使用MFC的CFileDialog实现选择多个文件
- mfc实现文件的拖拽操作
- MFC实现拖拽文件
- MFC实现拖拽文件
- 使用AJAX实现文件拖拽上传功能详解
- Java实现拖拽文件上传dropzone.js的简单使用示例代码
- VS2008中,MFC对话框类实现类似QQ拖拽上传文件的功能,CWnd::OnDropFiles
- MFC中实现单个控件接收拖拽文件的功能
- 关于使用RESTful api上传文件,基于jax rs接口,不是实现
- (转)使用MFC的WinINet库来实现图片文件的上传
- MFC----文件拖拽的实现OnDropFiles
- 使用VC的MFC实现读配置文件
- Mouse without Borders是微软的一个软件实验项目,这款软件可让鼠标自由在局域网中的多台电脑间移动,键盘输入实现无缝切换,还可以直接用鼠标相互拖拽文件。 如果经常需要同时使用两台以
- MFC中窗口实现拖拽文件功能