⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32explrentry.c

📁 一个类似于写字板的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************
   THIS CODE AND INFORMATION IS PROVIDED 'AS IS' 
   WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO
   THE IMPLIED WARRANTIES OF MERCHANTABILITY 
   AND/OR FITNESS FOR A PARTICULAR PURPOSE.
   Author: Barretto VN  7/2002
*************************************************/


/********************************************************************************/
/* Include files								*/
/********************************************************************************/

#include "CCsplitter.h"
#include "resource.h"

#include <stdio.h>
#include <commctrl.h>
#include <shlobj.h>

#include "ShellFunc.h"
#include "TreeView.h"
#include "ListView.h"

#include "lptvid.h"
/********************************************************************************/
/* Constant definitions								*/
/********************************************************************************/

/********************************************************************************/
/* Function prototypes								*/
/********************************************************************************/

LRESULT CALLBACK MainWindowProc (
    HWND	hWnd,			// Window handle
    UINT	uMsg,			// Message code
    WPARAM	wParam,			// Message parameter
    LPARAM	lParam			// Message parameter
);
HWND explorer(HINSTANCE appInstance, HWND hParent);
void	CreateSplitter (HWND hParent);
BOOL WINAPI CreateStatusBar (HWND hOwnerWnd);
BOOL WINAPI CreateToolBar (HWND hOwnerWnd);
void    SetSplit(HWND hWnd);
void    CreateImageLists();

void 	BeginDrag(HWND hWndListView, NMLISTVIEW *lvItem);
void 	DropItem(LVITEM hSourceItem, HTREEITEM hTargetItem);
BOOL    MoveImage(POINT point);

/********************************************************************************/
/* Private data definitions							*/
/********************************************************************************/

static	HINSTANCE   appInstance;	// Application instance handle

static const char *sTitle = "Win32 System Browser";
static const char *sDeveloper = "Developer Barretto VN\nE-Mail : barretto_vn@mail.com";

#define TOOLBAR_HT   26
#define STATUSBAR_HT 15

static	HWND	    hSplitter;		// Splitter control window handle

HWND    hWndMain;
HWND    hWndTreeView;
HWND    hWndListView;
HWND    ghStatusBar;
HWND    ghToolBar;

HIMAGELIST	himlSmall = NULL;
HIMAGELIST	himlLarge = NULL;
BOOL	    g_fDragging = FALSE;
POINT       g_ptHotSpot; 
RECT        g_rcImage; 

/********************************************************************************/
/* Public procedure definitions							*/
/********************************************************************************/

HWND explorer(HINSTANCE hInstance, HWND hParent)
{
    WNDCLASSEX	wc;			// Window class data
    MSG		msg;			// Message data

	INITCOMMONCONTROLSEX iccex;

	//required to use the common controls
	iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
	iccex.dwICC = ICC_LISTVIEW_CLASSES;
	InitCommonControlsEx(&iccex);

    appInstance = hInstance;

    if (!InitCCsplitter ()) 
	{
		MessageBox (NULL, "InitCCsplitter failed in WinMain", NULL, MB_ICONSTOP|MB_OK);
		return 1;
    }

    ZeroMemory (&wc, sizeof (wc));
    wc.cbSize	     = sizeof (wc);
    wc.hInstance     = hInstance;
    wc.hCursor	     = LoadCursor (hInstance, MAKEINTRESOURCE(IDC_SPLIT_CURSOR)); //(NULL, IDC_ARROW);
    wc.hIcon	     = LoadIcon (appInstance, MAKEINTRESOURCE(IDI_MAINICON)); //IDI_APPLICATION);
    wc.hIconSm	     = LoadIcon (appInstance, MAKEINTRESOURCE(IDI_MAINICON)); //IDI_APPLICATION);
    wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); //NULL;
    wc.lpfnWndProc   = MainWindowProc;
    wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MAINMENU);
    wc.lpszClassName = "Win32ExplorerMainWindow";
    RegisterClassEx (&wc);

    hWndMain = CreateWindowEx (
	                       0,					// Extended window style
	                       wc.lpszClassName,			// Window class name
	                       "Win 32 System Browser",			// Window name
	                       WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,	// Window style
	                       CW_USEDEFAULT,				// Horizontal position
	                       CW_USEDEFAULT,				// Vertical position
	                       CW_USEDEFAULT, 				// Width
	                       CW_USEDEFAULT, 				// Height
	                       hParent,					// Parent window handle
	                       NULL,					// Menu handle
	                       hInstance,				// Application instance
 	                       0);					// Parameter

    if (hWndMain == NULL) 
	{
		MessageBox (0, "CreateWindowEx failed in WinMain", NULL, MB_ICONSTOP|MB_OK);
		return 1;
    }

    ShowWindow (hWndMain, SW_SHOW);

    return hWndMain;
}

/********************************************************************************/
/* Private procedure definitions						*/
/********************************************************************************/

static	LRESULT CALLBACK MainWindowProc (
	                                     HWND	hWnd,			// Window handle
	                                     UINT	uMsg,			// Message code
	                                     WPARAM	wParam,			// Message parameter
	                                     LPARAM	lParam)			// Message parameter
{
//HDC hdc;
HMENU	hMenu;			// Menu handle
LVITEM lvItem;
LVITEM hSourceItem;
HTREEITEM hTargetItem;
TVITEM tvItem;
TVHITTESTINFO tvHit;       // Hit test information
HTREEITEM hTarget, hPrevItem = NULL;
RECT rect;

hSourceItem.iItem = -1;

    hMenu = GetMenu (hWnd);

    switch (uMsg) {

	case WM_COMMAND:
		switch(LOWORD(wParam)) 
		{

			case IDM_FILE_EXIT:
			    SendMessage (hWnd, WM_CLOSE, 0, 0);
			    break;
		    case IDM_HELP_ABOUT:
				ShellAbout(NULL, 
					       sTitle , 
						   sDeveloper , 
						   LoadIcon (appInstance, MAKEINTRESOURCE(IDI_MAINICON)));
			    break;
			case IDM_VIEW_LARGEICONS:
				onViewStyle(LOWORD(wParam) , hWndMain);
				break;
			case IDM_VIEW_SMALLICONS:
				onViewStyle(LOWORD(wParam), hWndMain);
				break;
			case IDM_VIEW_LIST:
				onViewStyle(LOWORD(wParam), hWndMain);
				break;
			case IDM_VIEW_DETAIL:
				onViewStyle(LOWORD(wParam), hWndMain);
				break;

		}

		return TRUE;
	
	case WM_CREATE:

		CreateSplitter (hWnd);
		hWndTreeView = CreateTreeView (appInstance, hWnd, hSplitter);
		hWndListView = CreateListView (appInstance, hWnd, hSplitter);
		CreateStatusBar(hWnd);
        CreateToolBar (hWnd);
		SetSplit(hWnd);
		CreateImageLists();
		InitTreeView();

		break;

	case WM_DESTROY:
		PostQuitMessage (0);
		return TRUE;

	case WM_NOTIFY:
		switch (((NMHDR *)lParam)->idFrom)
		{
			case ID_TREEVIEW:
			{
				tvItem = ((NM_TREEVIEW*)lParam)->itemNew;
				if(((NMHDR *)lParam)->code == TVN_ITEMEXPANDING)
				{
					PopulateTree(tvItem); 
				}
				if(((NMHDR *)lParam)->code == TVN_SELCHANGING)
				{
					PopulateList(tvItem); 
				}
				break;
			}

			case ID_LISTVIEW:
			{IShellFolder *psfProgFiles = NULL;
			LPTVITEMDATA* lptvid = NULL;
			LPITEMIDLIST pidlItems = NULL;
				char fn[256];
			    ZeroMemory(&lvItem, sizeof(lvItem));
				
				
				lvItem.pszText = fn;
				lvItem.cchTextMax = 256;
				
			    GetSelectedItem((LPNMHDR)lParam , &lvItem);
				/*
				lptvid = (LPTVITEMDATA*)lvItem.lParam;
				if (lptvid->bRoot)
					psfProgFiles = lptvid->lpsfParent;
				else
				{
					lptvid->lpsfParent->lpVtbl->BindToObject(lptvid->lpsfParent , lptvid->lpi, NULL, &IID_IShellFolder, (LPVOID *) &psfProgFiles);
				}*/
				if((((NMHDR *)lParam)->code == NM_DBLCLK) ||
					(((NMHDR *)lParam)->code == NM_RCLICK))
				{

				  ShowStdMenu(lvItem , ((NMHDR *)lParam)->code == NM_DBLCLK ? FALSE : TRUE , appInstance);
				  //psfProgFiles->lpVtbl->GetDisplayNameOf(psfProgFiles, pidlItems, /*SHGDN_INFOLDER | SHGDN_FOREDITING */SHGDN_FORPARSING , fn);

				}
				if(((NMHDR *)lParam)->code == LVN_GETDISPINFO) 
				{
					LV_DISPINFO    *lpdi = (LV_DISPINFO *)(LPNMHDR)lParam;
					setDisplayInfo(lpdi);
					lpdi->item.mask |= LVIF_DI_SETITEM;	// dont ask us again
				}
				if(((NMHDR *)lParam)->code == LVN_BEGINDRAG) 
				{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -