//*******************************
//* IconView.H - YangTze - 1999 *
//*******************************
// WinMain
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 );
// IconView�Ӵ��ڻص�����
LRESULT CALLBACK IconViewWndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam );
// ���ڶԻ���ص�����
BOOL CALLBACK AboutDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam );
// ��ȡԴ����Ի���ص�����
BOOL CALLBACK PWDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam );
// ͼ����Ϣ�Ի���ص�����
BOOL CALLBACK IconInfoDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam );
// ����Դ����
BOOL MakeCode();
// ��ʼ��ͼ���б�
void InitImageList( void );
// ��ʼ��Ŀ¼��
void InitTree( void );
// ��ȡȫ��·��
void GetFullPath( HTREEITEM hTI,LPSTR str );
// ��ȡ�ڵ��ı�
void GetItemText( HTREEITEM hTI,LPSTR str );
// ��ȡ�ڵ�ͼ������
int GetItemImage( HTREEITEM hTI );
// ����ڵ�
HTREEITEM InsertItem( HTREEITEM hTI,LPSTR str,int imgOpen,int imgClose );
// ɾ�������ӽڵ�
void DeleteAllChild( HTREEITEM hTI );
// ��Ŀ¼
BOOL MakeSubItem( HTREEITEM hTI );
// ���ù�������Χ
void xSetScrollRange( HWND hWnd,int ScrollMax );
// �����ⴰ���л���ͼ��
void xDrawIcon();
//********************************
//* IconViewR.H - YangTze - 1999 *
//********************************
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by IconView.rc
//
#define IDI_ICON1 101
#define IDI_ICON2 102
#define IDC_COPY 1000
#define IDC_HINT 1005
#define IDC_FOOTBALL 1006
#define IDC_COPYRIGHTS 1007
#define IDC_FOOTBALLMSG 1008
#define IDC_ICONVIEW 1009
#define IDC_EDIT1 1010
#define IDC_EDIT2 1011
#define IDM_FILE_ABOUT 40003
#define IDM_FILE_EXIT 40004
#define IDM_FILE_LARGEICON 40005
#define IDM_FILE_SMALLICON 40006
#define IDM_FILE_GETCODE 40009
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 142
#define _APS_NEXT_COMMAND_VALUE 40010
#define _APS_NEXT_CONTROL_VALUE 1012
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
//********************************
//* IconView.RC - YangTze - 1999 *
//********************************
//Microsoft Developer Studio generated resource script.
//
#include "IconViewR.H"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"IconViewR.H\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
ICONVIEW ICON DISCARDABLE "IconView.ico"
SFOOTBALL ICON DISCARDABLE "icon3.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
ICONVIEWMENU MENU DISCARDABLE
BEGIN
POPUP "(&F) �ļ�"
BEGIN
MENUITEM "(&L) ��ͼ��( 32x32 )", IDM_FILE_LARGEICON, CHECKED
MENUITEM "(&S) Сͼ��( 16x16 )", IDM_FILE_SMALLICON
MENUITEM SEPARATOR
MENUITEM "(&G) ���� IconView Դ���뵽������...", IDM_FILE_GETCODE
MENUITEM SEPARATOR
MENUITEM "(&A) ���� IconView...", IDM_FILE_ABOUT
MENUITEM SEPARATOR
MENUITEM "(&E) �˳�", IDM_FILE_EXIT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
CDROM BITMAP DISCARDABLE "bitmap1.bmp"
FILE BITMAP DISCARDABLE "bmp00001.bmp"
FLOPYDRIVE BITMAP DISCARDABLE "bmp00002.bmp"
FOLD BITMAP DISCARDABLE "bmp00003.bmp"
HARDDRIVE BITMAP DISCARDABLE "bmp00004.bmp"
NETDRIVE BITMAP DISCARDABLE "bmp00005.bmp"
PC BITMAP DISCARDABLE "bmp00006.bmp"
OPENFOLD BITMAP DISCARDABLE "bmp00007.bmp"
NOFOLD BITMAP DISCARDABLE "bmp00008.bmp"
MASK BITMAP DISCARDABLE "bmp00010.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
ABOUTDLG DIALOGEX 0, 0, 183, 146
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_CLIENTEDGE
CAPTION "* ���� IconView"
FONT 9, "����"
BEGIN
DEFPUSHBUTTON "ȷ��(&O)",IDOK,73,121,54,18
ICON "ICONVIEW",IDC_ICONVIEW,7,7,20,20
CTEXT "IconView( MaxIcon = 4096 ) 1.0\n(C)1999 YangTze presents",
IDC_COPYRIGHTS,34,7,142,24,SS_SUNKEN,WS_EX_DLGMODALFRAME |
WS_EX_CLIENTEDGE
CTEXT "�����ѡ���ͼ�����ʾһ���Ի���",IDC_HINT,35,103,141,
10,SS_SUNKEN
RTEXT "����...Ϊ����ע������ \n������...Ϊ����ע�������� \n��������...Ϊ����ע���˼��� \n�������...Ϊ����ע���˹¶� \n���ö�...Ϊ����ע������� \n����...Ϊ����ע�������� \n�й�����...Ϊ����ע���˱��� ",
IDC_FOOTBALLMSG,35,38,141,60,0,WS_EX_STATICEDGE
ICON "SFOOTBALL",IDC_FOOTBALL,7,58,20,20,SS_REALSIZEIMAGE
END
ICONINFODLG DIALOGEX 0, 0, 145, 53
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_CLIENTEDGE
CAPTION "* ͼ�괦��"
FONT 9, "����"
BEGIN
DEFPUSHBUTTON "����(&R)",IDOK,64,28,74,18
PUSHBUTTON "���Ƶ�������(&C)",IDC_COPY,64,7,74,18
END
PASSWORD DIALOGEX 0, 0, 187, 78
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_CLIENTEDGE
CAPTION "* ��������ʫ�������ܻ�� IconView Դ����"
FONT 9, "����"
BEGIN
DEFPUSHBUTTON "ȷ��(&O)",IDOK,67,55,50,16
LTEXT "��",IDC_STATIC,30,18,10,9
LTEXT "��",IDC_STATIC,30,37,10,9,NOT WS_GROUP
EDITTEXT IDC_EDIT1,44,15,116,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2,43,35,116,12,ES_AUTOHSCROLL
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
"ABOUTDLG", DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 176
TOPMARGIN, 7
BOTTOMMARGIN, 139
END
"ICONINFODLG", DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 138
TOPMARGIN, 7
BOTTOMMARGIN, 46
END
"PASSWORD", DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 180
TOPMARGIN, 7
BOTTOMMARGIN, 71
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// CODE
//
MYCODE CODE DISCARDABLE "IconViewCode.txt"
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
//*********************************
//* IconView.CPP - YangTze - 1999 *
//*********************************
#include <windows.h>
#include <commctrl.h>
#include <direct.h>
#include "IconView.h"
#include "IconViewR.h"
// �Զ�����Ϣ
#define MYMSG WM_USER + 100
// ���ͼ����Ŀ
#define MaxICON 4096
// ͼ���ڷ�������ʾƫ����
#define OffSet 4
// ������/Ŀ¼����Ϣ��ʾ
char Msg[] = "����Ϣ - YangTze'99";
// ʵ�����
HINSTANCE hInst;
HWND hMainWnd;
RECT WinDim;
RECT rc;
BOOL IsSize;
BOOL IsCapture;
HCURSOR hSize;
HCURSOR hArrow;
HCURSOR hWait;
HRSRC hTemp;
DWORD CodeSize;
HGLOBAL hCode;
char *pMyCodeRes;
HGLOBAL hMyCode;
char *pMyCode;
// ��������
HWND hListBoxWnd;
HWND hTreeWnd;
HTREEITEM hCurTree;
HTREEITEM hTempTree;
HIMAGELIST ImageList;
char FullPath[ 255 ];
int imgPC,imgNetDrive,imgHardDrive,imgFlopyDrive;
int imgCDROM,imgFold,imgOpenFold,imgFile,imgNoFold;
HWND hIVWnd;
int xNum,yNum;
int IconNum;
int StartDisp;
int ScrollMax;
int IconSize = 32 + 8;
char CurFile[ 255 ];
BOOL LSIcon = TRUE;
HICON hLIcon[ MaxICON ];
HICON hSIcon[ MaxICON ];
POINT oldpt;
HBITMAP hMask = NULL;
HBITMAP hVBmp = NULL;
HDC hVDC = NULL;
int SelIconID;
HBITMAP hClipBmp;
HDC hVDlgDC;
HBITMAP hVDlgBmp;
int ScreenX;
int ScreenY;
//| WinMain
//|___________________________________________________________________________________________
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;
hInst = hInstance;
// ע����������
wc.style = 0;
wc.lpfnWndProc = ( WNDPROC )MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance,"IconView" );
wc.hCursor = LoadCursor( NULL,IDC_ARROW );
wc.hbrBackground = GetStockObject( LTGRAY_BRUSH );
wc.lpszMenuName = "IconViewMenu";
wc.lpszClassName = "IconViewClass";
if( !RegisterClass( &wc ) ) return FALSE;
// ע���Ӵ�����
wc.style = 0;
wc.lpfnWndProc = ( WNDPROC )IconViewWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor( NULL,IDC_ARROW );
wc.hbrBackground = GetStockObject( WHITE_BRUSH );
wc.lpszMenuName = NULL;
wc.lpszClassName = "IVClass";
if( !RegisterClass( &wc ) ) return FALSE;
else return TRUE;
}
//| ��������
//|__________________________________________________
BOOL InitInstance( HINSTANCE hInstance,int nCmdShow )
{
// ����������
hMainWnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
"IconViewClass",
"IconView",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if( !hMainWnd ) return FALSE;
hListBoxWnd = CreateWindow(
"LISTBOX",
NULL,
WS_BORDER | WS_CHILD | LBS_HASSTRINGS | LBS_SORT,
0,0,0,0,
hMainWnd,
NULL,
hInstance,
NULL
);
if( !hListBoxWnd ) return FALSE;
// ����Ŀ¼���Ӵ���
InitCommonControls();
hTreeWnd = CreateWindowEx(
WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME,
WC_TREEVIEW,
"",
WS_BORDER | WS_VISIBLE | WS_TABSTOP | WS_CHILD | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,// | WS_EX_CLIENTEDGE, // ���: TreeCtrl �»���
0,
0,
0,
0,
hMainWnd,
NULL,
hInst,
NULL
);
if( !hTreeWnd ) {
return FALSE;
}
else {
InitImageList();
InitTree();
}
// ����ͼ����ʾ�Ӵ���
hIVWnd = CreateWindowEx(
WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME,
"IVClass",
"",
WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD,
0,
0,
0,
0,
hMainWnd,
NULL,
hInst,
NULL
);
if( !hIVWnd ) return FALSE;
ShowWindow( hMainWnd,nCmdShow );
UpdateWindow( hMainWnd );
return TRUE;
}
//| �����ڻص�����
//|____________________________________________________________________________
LRESULT CALLBACK MainWndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
int img;
POINT pt;
HMENU hMainMenu;
HMENU hSubMenu;
NM_TREEVIEW *nmptr;
int ret;
switch( uMsg ) {
case WM_CREATE:
hWait = LoadCursor( NULL,IDC_WAIT );
hSize = LoadCursor( NULL,IDC_SIZEWE );
hArrow = LoadCursor( NULL,IDC_ARROW );
hTemp = FindResourceEx( ( HMODULE )hInst,"CODE","MYCODE",MAKELANGID( LANG_NEUTRAL,SUBLANG_NEUTRAL ) );
if( hTemp ) {
hCode = LoadResource( ( HMODULE )hInst,hTemp );
if( hCode ) {
CodeSize = SizeofResource( ( HMODULE )hInst,hTemp );
pMyCodeRes = ( char * )LockResource( hCode );
}
}
break;
case WM_SIZE:
GetClientRect( hWnd,&WinDim );
rc.left = WinDim.right / 3;
rc.right = WinDim.right / 3 + 1;
rc.top = WinDim.top;
rc.bottom = WinDim.bottom;
MoveWindow( hTreeWnd,0,0,WinDim.right / 3,WinDim.bottom,TRUE );
ShowWindow( hTreeWnd,SW_SHOW );
MoveWindow( hIVWnd,WinDim.right / 3 + 1,0,WinDim.right - WinDim.right / 3 - 1,WinDim.bottom,TRUE );
ShowWindow( hIVWnd,SW_SHOW );
break;
case WM_NOTIFY:
nmptr = ( NM_TREEVIEW * )( LPARAM )lParam;
// ѡ��
if( nmptr -> hdr.code == TVN_SELCHANGED ) {
hCurTree = nmptr -> itemNew.hItem;
img = GetItemImage( hCurTree );
GetFullPath( hCurTree,FullPath );
if( img == imgFile ) SendMessage( hIVWnd,MYMSG,0,0 );
}
// ����չ/�պ�
if( nmptr -> hdr.code == TVN_ITEMEXPANDED ) {
hCurTree = nmptr -> itemNew.hItem;
img = GetItemImage( hCurTree );
GetFullPath( hCurTree,FullPath );
if( nmptr -> action == TVE_COLLAPSE ) {
// �ڵ�պϴ���
if( img != imgPC ) {
DeleteAllChild( hCurTree );
InsertItem( hCurTree,Msg,imgNoFold,imgNoFold );
}
}
else if( nmptr -> action == TVE_EXPAND ) {
// �ڵ����
if( img != imgPC ) {
DeleteAllChild( hCurTree );
if( !MakeSubItem( hCurTree ) ) {
InsertItem( hCurTree,Msg,imgNoFold,imgNoFold );
}
}
}
}
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ) {
case IDM_FILE_LARGEICON:
LSIcon = TRUE;
IconSize = 32 + 8;
hMainMenu = GetMenu( hWnd );
hSubMenu = GetSubMenu( hMainMenu,0 );
CheckMenuItem( hSubMenu,IDM_FILE_LARGEICON,MF_BYCOMMAND | MF_CHECKED );
CheckMenuItem( hSubMenu,IDM_FILE_SMALLICON,MF_BYCOMMAND | MF_UNCHECKED );
SendMessage( hIVWnd,WM_SIZE,0,0 );
break;
case IDM_FILE_SMALLICON:
LSIcon = FALSE;
IconSize = 16 + 8;
hMainMenu = GetMenu( hWnd );
hSubMenu = GetSubMenu( hMainMenu,0 );
CheckMenuItem( hSubMenu,IDM_FILE_LARGEICON,MF_BYCOMMAND | MF_UNCHECKED );
CheckMenuItem( hSubMenu,IDM_FILE_SMALLICON,MF_BYCOMMAND | MF_CHECKED );
SendMessage( hIVWnd,WM_SIZE,0,0 );
break;
case IDM_FILE_GETCODE:
ret = DialogBox( hInst,"PASSWORD",hWnd,( DLGPROC )PWDlgProc );
if( ret == 0 ) {
MessageBox( hWnd,"�Բ���,������!","��ʾ",MB_ICONINFORMATION | MB_OK );
break;
}
if( !MakeCode() ) {
MessageBox( hWnd,"����Դ����ʱ��������!","��ʾ",MB_ICONINFORMATION | MB_OK );
break;
}
if( OpenClipboard( hWnd ) ) {
EmptyClipboard();
SetClipboardData( CF_TEXT,( HANDLE )hMyCode );
CloseClipboard();
}
else {
MessageBox( hWnd,"���ܴ�����!","����",MB_ICONINFORMATION | MB_OK );
}
break;
case IDM_FILE_ABOUT:
DialogBox( hInst,"ABOUTDLG",hWnd,( DLGPROC )AboutDlgProc );
break;
case IDM_FILE_EXIT:
PostQuitMessage( 0 );
break;
}
break;
case WM_MOUSEMOVE:
pt.x = LOWORD( lParam );
pt.y = HIWORD( lParam );
if( IsCapture ) {
MoveWindow( hTreeWnd,0,0,pt.x,WinDim.bottom,TRUE );
ShowWindow( hTreeWnd,SW_SHOW );
MoveWindow( hIVWnd,pt.x + 1,0,WinDim.right - pt.x - 1,WinDim.bottom,TRUE );
ShowWindow( hIVWnd,SW_SHOW );
rc.left = pt.x;
rc.right = pt.x + 1;
rc.top = WinDim.top;
rc.bottom = WinDim.bottom;
}
if( PtInRect( &rc,pt ) ) {
SetCursor( hSize );
IsSize = TRUE;
}
else {
SetCursor( hArrow );
IsSize = FALSE;
}
break;
case WM_LBUTTONDOWN:
if( IsSize ) {
IsCapture = TRUE;
SetCapture( hWnd );
}
break;
case WM_LBUTTONUP:
if( IsSize ) {
IsCapture = FALSE;
ReleaseCapture();
SetCursor( hArrow );
InvalidateRect( hIVWnd,NULL,TRUE );
}
break;
case WM_DESTROY:
if( hVDC ) DeleteDC( hVDC );
if( hVBmp ) DeleteObject( hVBmp );
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd,uMsg,wParam,lParam );
}
return 0;
}
//| ����Դ����
//|____________
BOOL MakeCode()
{
DWORD i;
if( !pMyCodeRes ) return FALSE;
hMyCode = GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE,CodeSize + 1 );
if( !hMyCode ) return FALSE;
pMyCode = ( char * )GlobalLock( hMyCode );
if( !pMyCode ) {
GlobalFree( hMyCode );
return FALSE;
}
for( i = 0;i < CodeSize;i ++ ) *( pMyCode + i ) = *( pMyCodeRes + i );
GlobalUnlock( hMyCode );
return TRUE;
}
//| ��ʼ��ͼ���б�
//|_______________________
void InitImageList( void )
{
HBITMAP bmp;
ImageList = ImageList_Create( 16,16,ILC_COLOR,9,0 );
bmp = LoadBitmap( hInst,"NoFold" );
imgNoFold = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"PC" );
imgPC = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"FLOPYDRIVE" );
imgFlopyDrive = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"HARDDRIVE" );
imgHardDrive = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"CDROM" );
imgCDROM = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"NETDRIVE" );
imgNetDrive = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"FOLD" );
imgFold = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"OPENFOLD" );
imgOpenFold = ImageList_Add( ImageList,bmp,NULL );
bmp = LoadBitmap( hInst,"FILE" );
imgFile = ImageList_Add( ImageList,bmp,NULL );
DeleteObject( bmp );
TreeView_SetImageList( hTreeWnd,ImageList,TVSIL_NORMAL );
}
//| ��ʼ��Ŀ¼���б�
//|__________________
void InitTree( void )
{
int drive;
UINT dt;
char dritem[ 4 ] = { 0,':','\\',0 };
int img;
hCurTree = InsertItem( TVI_ROOT,"PC:",imgPC,imgPC );
for( drive = 1; drive <= 26; drive ++ ) {
dritem[ 0 ] = drive + 'A' - 1;
dt = GetDriveType( dritem );
switch( dt ) {
case DRIVE_REMOVABLE:
img = imgFlopyDrive;
break;
case DRIVE_FIXED:
img = imgHardDrive;
break;
case DRIVE_REMOTE:
img = imgNetDrive;
break;
case DRIVE_CDROM:
img = imgCDROM;
break;
}
if( dt == DRIVE_UNKNOWN || dt == DRIVE_NO_ROOT_DIR ) continue;
dritem[ 2 ] = '\0';
hTempTree = InsertItem( hCurTree,dritem,img,img );
dritem[ 2 ] = '\\';
// Fold
hTempTree = InsertItem( hTempTree,Msg,imgNoFold,imgNoFold );
}
}
//| ��ȡ�ڵ��ı�
//|________________________________________
void GetItemText( HTREEITEM hTI,LPSTR str )
{
TV_ITEM tvi;
tvi.hItem = hTI;
tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE;
tvi.pszText = str;
tvi.cchTextMax = 255;
TreeView_GetItem( hTreeWnd,&tvi );
}
//| ��ȡ�ڵ�ͼ������
//|______________________________
int GetItemImage( HTREEITEM hTI )
{
TV_ITEM tvi;
tvi.hItem = hTI;
tvi.mask = TVIF_HANDLE | TVIF_IMAGE;
TreeView_GetItem( hTreeWnd,&tvi );
return tvi.iImage;
}
//| ɾ�������ӽڵ�
//|_________________________________
void DeleteAllChild( HTREEITEM hTI )
{
HTREEITEM hTemp;
for( ;; ) {
hTemp = TreeView_GetChild( hTreeWnd,hTI );
if( hTemp == NULL ) break;
TreeView_DeleteItem( hTreeWnd,hTemp );
}
}
//| ������Ŀ
//|_____________________________________________________________________
HTREEITEM InsertItem( HTREEITEM hTI,LPSTR str,int imgOpen,int imgClose )
{
TV_INSERTSTRUCT tvs;
TV_ITEM tvi;
tvs.hInsertAfter = TVI_LAST;
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.pszText = str;
tvi.iImage = imgClose;
tvi.iSelectedImage = imgOpen;
tvs.hParent = hTI;
tvs.item = tvi;
return TreeView_InsertItem( hTreeWnd,&tvs );
}
//| ��ȡȫ��·��
//|________________________________________
void GetFullPath( HTREEITEM hTI,LPSTR str )
{
HTREEITEM pht;
char itemtext[ 255 ];
char buf[ 4096 ];
GetItemText( hTI,itemtext );
lstrcpy( str,itemtext );
pht = hTI;
while( pht = TreeView_GetParent( hTreeWnd,pht ) ) {
GetItemText( pht,itemtext );
lstrcpy( buf,itemtext );
lstrcat( buf,"\\" );
lstrcat( buf,str );
lstrcpy( str,buf );
}
lstrcat( str,"\\" );
}
//| ��Ŀ¼
//|______________________________
BOOL MakeSubItem( HTREEITEM hTI )
{
char filename[ 255 ];
char str[ 255 ];
WIN32_FIND_DATA wfd;
HANDLE hSearch;
HTREEITEM hTemp;
int Num;
int i,j;
Num = 0;
// �л�����ѡ���Ŀ¼
if( !SetCurrentDirectory( &FullPath[ 4 ] ) ) return FALSE;
// ��������Ŀ¼���ļ�
if( ( hSearch = FindFirstFile( "*.*",&wfd ) ) == INVALID_HANDLE_VALUE ) return FALSE;
while( TRUE ) {
lstrcpy( filename,wfd.cFileName );
if( lstrcmp( filename,"." ) && lstrcmp( filename,".." ) ) {
if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
wsprintf( str,"D:%s",filename );
SendMessage( hListBoxWnd,LB_ADDSTRING,0,( LPARAM )( LPCTSTR )str );
Num ++;
}
else {
wsprintf( str,"F:%s",filename );
SendMessage( hListBoxWnd,LB_ADDSTRING,0,( LPARAM )( LPCTSTR )str );
Num ++;
}
}
if( !FindNextFile( hSearch,&wfd ) ) break;
}
FindClose( hSearch );
j = SendMessage( hListBoxWnd,LB_GETCOUNT,0,0 );
for( i = 0;i < j;i ++ ) {
SendMessage( hListBoxWnd,LB_GETTEXT,i,( LPARAM )( LPCTSTR )str );
if( str[ 0 ] == 'D' ) {
hTemp = InsertItem( hTI,&str[ 2 ],imgOpenFold,imgFold );
InsertItem( hTemp,Msg,imgNoFold,imgNoFold );
}
else if( str[ 0 ] == 'F' ) {
hTemp = InsertItem( hTI,&str[ 2 ],imgFile,imgFile );
}
}
for( i = 0;i < j; i ++ ) {
SendMessage( hListBoxWnd,LB_DELETESTRING,0,0 );
}
if( Num ) return TRUE;
else return FALSE;
}
//| ���ڶԻ���ص�����
//|_________________________________________________________________________
BOOL CALLBACK AboutDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam )
{
switch( message ) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch( LOWORD( wParam ) ) {
case IDOK:
EndDialog( hDlg,TRUE );
break;
default:
return FALSE;
}
}
return FALSE;
}
//| ��ȡԴ����Ի���ص�����
//|______________________________________________________________________
BOOL CALLBACK PWDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam )
{
char str1[ 20 ];
char str2[ 20 ];
int i;
switch( message ) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch( LOWORD( wParam ) ) {
case IDOK:
for( i = 0; i < 20; i ++ ) {
str1[ i ] = '\0';
str2[ i ] = '\0';
}
GetDlgItemText( hDlg,IDC_EDIT1,str1,10 );
GetDlgItemText( hDlg,IDC_EDIT2,str2,10 );
if( lstrcmp( str1,"��������" ) == 0 && lstrcmp( str2,"������ѩ" ) == 0 )
EndDialog( hDlg,1 );
else
EndDialog( hDlg,0 );
break;
default:
return FALSE;
}
}
return FALSE;
}
//| IconView ���ڻص�����
//|________________________________________________________________________________
LRESULT CALLBACK IconViewWndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hDC;
HDC hMemDC;
RECT rcIV;
POINT pt;
char Msg[ 255 ];
HICON hTest;
switch( uMsg ) {
case WM_CREATE:
hMask = LoadBitmap( hInst,"Mask" );
ScreenX = GetSystemMetrics( SM_CXSCREEN );
ScreenY = GetSystemMetrics( SM_CYSCREEN );
hDC = GetDC( hWnd );
hVDC = CreateCompatibleDC( hDC );
hVBmp = CreateCompatibleBitmap( hDC,ScreenX,ScreenY );
SelectObject( hVDC,hVBmp );
ReleaseDC( hWnd,hDC );
oldpt.x = 1234567890;
oldpt.y = 1234567890;
break;
case WM_SIZE:
GetClientRect( hWnd,&rcIV );
xNum = rcIV.right / IconSize;
yNum = rcIV.bottom / IconSize;
if( xNum > 0 && yNum > 0 ) {
StartDisp = 0;
ScrollMax = 0;
if( IconNum > xNum * yNum ) {
ScrollMax = ( IconNum - xNum * yNum ) / xNum + 1;
}
}
xSetScrollRange( hWnd,ScrollMax );
xDrawIcon();
InvalidateRect( hWnd,NULL,TRUE );
break;
case WM_VSCROLL:
switch( LOWORD(wParam) ) {
case SB_LINEDOWN:
case SB_PAGEDOWN:
if( StartDisp < ScrollMax ) {
StartDisp ++;
SetScrollPos( hWnd,SB_VERT,StartDisp,TRUE );
xDrawIcon();
InvalidateRect( hWnd,NULL,TRUE );
}
break;
case SB_LINEUP:
case SB_PAGEUP:
if( StartDisp > 0 ) {
StartDisp --;
SetScrollPos( hWnd,SB_VERT,StartDisp,TRUE );
xDrawIcon();
InvalidateRect( hWnd,NULL,TRUE );
}
break;
case SB_THUMBPOSITION:
StartDisp = HIWORD( wParam );;
SetScrollPos( hWnd,SB_VERT,StartDisp,TRUE );
xDrawIcon();
InvalidateRect( hWnd,NULL,TRUE );
break;
}
break;
case MYMSG:
SetCursor( hWait );
lstrcpy( CurFile,&FullPath[ 4 ] );
CurFile[ lstrlen( CurFile ) - 1 ] = '\0';
hTest = ( HICON )ExtractIconEx( CurFile,0,&hLIcon[ 0 ],&hSIcon[ 0 ],1 );
if( hTest == NULL || hTest == ( HICON )1 ) {
IconNum = 0;
}
else {
IconNum = ( int )ExtractIconEx( CurFile,-1,NULL,NULL,0 );
if( IconNum > MaxICON ) IconNum = MaxICON;
if( IconNum > 0 ) {
for( int i = 0;i < IconNum;i ++ )
ExtractIconEx( CurFile,i,&hLIcon[ i ],&hSIcon[ i ],1 );
}
}
wsprintf( Msg,"IconView - �ļ� %s �� %d ��ͼ��",CurFile,IconNum );
SetWindowText( hMainWnd,Msg );
StartDisp = 0;
ScrollMax = 0;
if( IconNum > xNum * yNum ) {
ScrollMax = ( IconNum - xNum * yNum ) / xNum + 1;
}
xSetScrollRange( hWnd,ScrollMax );
xDrawIcon();
InvalidateRect( hWnd,NULL,TRUE );
SetCursor( hArrow );
break;
case WM_PAINT:
if( IsCapture ) break;
hDC = BeginPaint( hWnd,&ps );
BitBlt(
hDC,ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom,
hVDC,ps.rcPaint.left,ps.rcPaint.top,
SRCCOPY
);
EndPaint( hWnd,&ps );
break;
case WM_MOUSEMOVE:
if( IconNum == 0 ) break;
pt.x = LOWORD( lParam ) / IconSize;
pt.y = HIWORD( lParam ) / IconSize;
if( pt.x >= xNum || pt.y >= yNum ) break;
SelIconID = pt.y * xNum + pt.x + StartDisp * xNum;
if( SelIconID >= IconNum ) break;
if( pt.x != oldpt.x || pt.y != oldpt.y ) {
hDC = GetDC( hWnd );
hMemDC = CreateCompatibleDC( hDC );
SelectObject( hMemDC,hMask );
// ���ⴰ��
BitBlt( hVDC,oldpt.x * IconSize + 1,oldpt.y * IconSize + 1,IconSize - 1,IconSize - 1,hMemDC,0,0,SRCINVERT );
BitBlt( hVDC,pt.x * IconSize + 1,pt.y * IconSize + 1,IconSize - 1,IconSize - 1,hMemDC,0,0,SRCINVERT );
// ��ʾ����
BitBlt( hDC,oldpt.x * IconSize + 1,oldpt.y * IconSize + 1,IconSize - 1,IconSize - 1,hMemDC,0,0,SRCINVERT );
BitBlt( hDC,pt.x * IconSize + 1,pt.y * IconSize + 1,IconSize - 1,IconSize - 1,hMemDC,0,0,SRCINVERT );
DeleteDC( hMemDC );
ReleaseDC( hWnd,hDC );
oldpt.x = pt.x;
oldpt.y = pt.y;
}
break;
case WM_LBUTTONDOWN:
if( SelIconID < IconNum ) {
DialogBox( hInst,"ICONINFODLG",hWnd,( DLGPROC )IconInfoDlgProc );
}
break;
default:
return DefWindowProc( hWnd,uMsg,wParam,lParam );
}
return 0;
}
//| ���ù�������Χ
//|____________________________________________
void xSetScrollRange( HWND hWnd,int ScrollMax )
{
SCROLLINFO si;
si.cbSize = sizeof( SCROLLINFO );
si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
si.nMin = 0;
si.nMax = ScrollMax;
si.nPage = 1;
si.nPos = 0;
si.nTrackPos = 0;
SetScrollInfo( hWnd,SB_VERT,&si,TRUE );
SetScrollPos( hWnd,SB_VERT,0,TRUE );
}
//| �����ⴰ���л���ͼ��
//|_____________________
void xDrawIcon()
{
int i,j,k;
HICON hIcon;
oldpt.x = 1234567890;
oldpt.y = 1234567890;
SelectObject( hVDC,GetStockObject( GRAY_BRUSH ) );
PatBlt( hVDC,0,0,ScreenX,ScreenY,PATCOPY );
SelectObject( hVDC,GetStockObject( WHITE_BRUSH ) );
PatBlt( hVDC,0,0,xNum * IconSize,yNum * IconSize,PATCOPY );
for( i = 0;i <= xNum;i ++ ) {
MoveToEx( hVDC,i * IconSize,0,NULL );
LineTo( hVDC,i * IconSize,IconSize * yNum );
}
for( i = 0;i <= yNum;i ++ ) {
MoveToEx( hVDC,0,i * IconSize,NULL );
LineTo( hVDC,IconSize * xNum,i * IconSize );
}
if( IconNum > 0 ) {
k = StartDisp * xNum;
for( i = 0;i < yNum;i ++ ) {
for( j = 0;j < xNum;j ++ ) {
if( LSIcon ) hIcon = hLIcon[ k ++ ];
else hIcon = hSIcon[ k ++ ];
DrawIconEx( hVDC,j * IconSize + OffSet,i * IconSize + OffSet,hIcon,0,0,0,NULL,DI_NORMAL );
if( k == IconNum ) break;
}
if( k == IconNum ) break;
}
}
}
//| ͼ����Ϣ�Ի���ص�����
//|____________________________________________________________________________
BOOL CALLBACK IconInfoDlgProc( HWND hDlg,UINT message,UINT wParam,LONG lParam )
{
HDC hDC;
PAINTSTRUCT ps;
HICON hIcon;
RECT rc;
int y;
char str[ 50 ];
switch( message ) {
case WM_INITDIALOG:
hDC = GetDC( hDlg );
hVDlgDC = CreateCompatibleDC( hDC );
hVDlgBmp = CreateCompatibleBitmap( hDC,IconSize - 8,IconSize - 8 );
SelectObject( hVDlgDC,hVDlgBmp );
SelectObject( hVDlgDC,GetStockObject( WHITE_BRUSH ) );
PatBlt( hVDlgDC,0,0,IconSize - 8,IconSize - 8,PATCOPY );
ReleaseDC( hDlg,hDC );
return TRUE;
case WM_PAINT:
wsprintf( str,"* �� %d ��ͼ��",SelIconID + 1 );
SetWindowText( hDlg,str );
GetClientRect( hDlg,&rc );
hDC = BeginPaint( hDlg,&ps );
y = ( rc.bottom - IconSize - 8 ) / 2;
if( LSIcon ) hIcon = hLIcon[ SelIconID ];
else hIcon = hSIcon[ SelIconID ];
DrawIconEx( hDC,20,y,hIcon,0,0,0,NULL,DI_NORMAL );
DrawIconEx( hVDlgDC,0,0,hIcon,0,0,0,NULL,DI_NORMAL );
EndPaint( hDlg,&ps );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ) {
case IDC_COPY:
if( OpenClipboard( hDlg ) ) {
EmptyClipboard();
hClipBmp = CopyImage( ( HANDLE )hVDlgBmp,IMAGE_BITMAP,IconSize - 8,IconSize - 8,LR_COPYDELETEORG );
SetClipboardData( CF_BITMAP,( HANDLE )hClipBmp );
CloseClipboard();
hClipBmp = NULL;
}
else {
MessageBox( hDlg,"���ܴ�����!","����",MB_ICONINFORMATION | MB_OK );
}
case IDOK:
DeleteDC( hVDlgDC );
DeleteObject( hVDlgBmp );
EndDialog( hDlg,TRUE );
break;
default:
return FALSE;
}
}
return FALSE;
}