📄 win32explrentry.c
字号:
/************************************************
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 + -