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

📄 zwinframe.cpp

📁 sybain下的手机编程源码,类似windows下的资源管理器
💻 CPP
字号:
// zWinFrame.cpp: implementation of the zWinFrame class.
//
//////////////////////////////////////////////////////////////////////

#include "../stdafx.h"
#include "../PExplorer.h"

#include "zWinFrame.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

zWinFrame::zWinFrame()
{
	m_iView = IDM_VIEW_TREE;
	m_iPos = WINDOW_SPLIT;

	//菜单
	m_hWndCB = NULL;

	//托盘
	m_bWinHide = FALSE;
}

zWinFrame::~zWinFrame()
{
}

LRESULT zWinFrame::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	SHACTIVATEINFO sai;
	switch(uMsg)
	{
	case WM_LBUTTONDOWN:	OnLButtonDown(wParam,lParam);	break;
	case WM_LBUTTONUP:		OnLButtonUp(wParam,lParam);		break;
	case WM_MOUSEMOVE:		OnMouseMove(wParam,lParam);		break;
	case WM_COMMAND:		OnCommand(wParam,lParam);		break;
	case WM_NOTIFY:			OnNotify(wParam,lParam);		break;
	case WM_ERASEBKGND:	return 0;
	case WM_SIZE:			OnSize(wParam,lParam);			break;
	case 0x3e8:				//菜单弹出消息
		break;
	case WM_DRAWITEM:		//custom drawing code for owner-draw listview control
		LPDRAWITEMSTRUCT lpdis;
		lpdis = (LPDRAWITEMSTRUCT)lParam;
		break;
	case WM_MEASUREITEM:	//列表视图自己绘制时使用
		LPMEASUREITEMSTRUCT lpmi;
		lpmi = (LPMEASUREITEMSTRUCT)lParam;
		break;
	case WM_SETTINGCHANGE:
		if (wParam == SPI_SETSIPINFO)
		{
			memset(&sai, 0, sizeof(SHACTIVATEINFO));
			SHHandleWMSettingChange(hWnd,wParam,lParam, &sai);
			SIPINFO si = {0};
			si.cbSize = sizeof(si);
			SHSipInfo(SPI_GETSIPINFO, 0, &si, 0);
			int iDelta = (si.fdwFlags & SIPF_ON) ? 0 : MENU_HEIGHT;
			int cx = si.rcVisibleDesktop.right - si.rcVisibleDesktop.left;
			int cy = si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top - iDelta;
//			MoveWindow(m_tree.m_hCtrl, 0, 26, cx, cy, TRUE);
		}
		break;
//	case WM_ACTIVATE:
//		if (SPI_SETSIPINFO == wParam)
//		{
//			memset(&sai, 0, sizeof(SHACTIVATEINFO));
//			SHHandleWMActivate(hWnd, wParam, lParam, &sai, 0);
//		}
//		break;
    case TRAY_NOTIFYICON:
		TrayNotifyMessage(wParam,lParam);
        break;
	}
	return zWin::WndProc(hWnd,uMsg,wParam,lParam);
}

void zWinFrame::OnNotify(WPARAM wParam, LPARAM lParam)
{
	TCHAR sz[MAX_PATH]={0};
	int idCtrl = (int)wParam;
	if (idCtrl== m_tree.m_nCtrlId)
	{
		m_tree.OnNotify((LPNMHDR)lParam);	
		NM_TREEVIEW* pLvdi = (NM_TREEVIEW*)lParam;
		switch(pLvdi->hdr.code)
		{
		case TVN_SELCHANGED:
			{
				zTreeNode * pNode = m_tree.GetCurrent();
				_tcscpy(sz,pNode->sPath);
				m_list.FlushDiskList(sz);
			}
			return;
		}
	}else if(idCtrl == m_list.m_nCtrlId)
	{
		m_list.OnNotify((LPNMHDR)lParam);
//	}else if(idCtrl == m_edit.m_nCtrlId)
//	{
//		m_edit.OnNotify((LPNMHDR)lParam);
	}
}

void zWinFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
	TCHAR sz[200]={0};
	int wmId, wmEvent;
	wmId    = LOWORD(wParam); 
	wmEvent = HIWORD(wParam); 
	switch (wmId)
	{	
	case IDM_APP_EXIT:
		DestroyWindow(m_hWnd);
		PostQuitMessage(88);
		break;
//	case IDM_FILE_FLUSH_TREE:
//		FlushDiskTree();
//		break;
//	case IDM_FILE_FLUSH_LIST:
//		FlushDiskList();
//		break;
	case IDOK:
	case IDCANCEL:
//		if (!m_bWinHide)
		{
			::OutputDebugString(_T("按下OK,bHide:FALSE->TRUE.\n"));
			ShowWindow(SW_HIDE);
			m_bWinHide = TRUE;
		}
		break;
	case IDM_VIEW_LIST:		FlushView(IDM_VIEW_LIST);		break;
	case IDM_VIEW_TREE:		FlushView(IDM_VIEW_TREE);		break;
	case IDM_VIEW_BOTH:		FlushView(IDM_VIEW_BOTH);		break;
	}
}


void zWinFrame::OnDraw(HDC hDC)
{
	RECT rc;
	::GetClientRect(m_hWnd,&rc);
	::FillRect(hDC,&rc,::GetSysColorBrush(3));
}

void zWinFrame::OnLButtonDown(WPARAM wParam,LPARAM lParam)
{
	bMouseDown = TRUE;
	nMouseX = LOWORD(lParam);
	nMouseY = HIWORD(lParam);

	::SetCapture(this->m_hWnd);
	TCHAR sz[100]={0};
	wsprintf(sz,_T("MouseDown,%d,%d\n"),nMouseX,nMouseY);
	::OutputDebugString(sz);
}

void zWinFrame::OnLButtonUp(WPARAM wParam,LPARAM lParam)
{
	short int x = LOWORD(lParam);
	short int y = HIWORD(lParam);
	::ReleaseCapture();
	if (bMouseDown)		//正在托动窗口
	{
//		nCx = nMouseY -y;
//		if (nCx==0) return;

//		HWND hParent = ::GetParent(m_hWnd);
//		::SendMessage(hParent,WM_WINMOVE,0,(LPARAM)nCx);

		nMouseX = x;
		nMouseY = y;
//		TCHAR sz[100]={0};
//		wsprintf(sz,_T("MouseUp,%d,%d & %d\n"),x,y,nCx);
//		::OutputDebugString(sz);
	}
	bMouseDown = FALSE;
}

void zWinFrame::OnMouseMove(WPARAM wParam,LPARAM lParam)
{
	short int x = LOWORD(lParam);
	short int y = HIWORD(lParam);
//	if (bMouseDown)		//正在托动窗口
//	{
//		nCx = nMouseY -y;
//		if (nCx==0) return;

//		HWND hParent = ::GetParent(m_hWnd);
//		::SendMessage(hParent,WM_WINMOVE,0,(LPARAM)nCx);

//		nMouseX = x;
//		nMouseY = y;
//		return;
//	}
}

void zWinFrame::OnCreate()
{
	//建立菜单
	//菜单
	m_bar.CreateBar(m_hInst,m_hWnd,IDM_MENU);
	m_bar.AddBitmapSys();
	m_bar.AddBitmap(IDR_TOOLBAR1,3);
	m_bar.AddButtons(4);
//	m_hWndCB = CreateRpCommandBar(IDM_MENU);
	//建立托盘
	HICON h = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_ICON4));
	m_tray.TrayIconAdd(m_hWnd,TRAY_NOTIFYICON,h);

	//载入小图标
	m_imagelist.SetInstance(m_hInst);
	m_imagelist.Load(IDB_BITMAP1,16,10,NULL);

	//建立主TREE图
	RECT rc1= {0};
	RECT rc2 = {0};
	::GetClientRect(m_hWnd,&rc2);

	m_tree.CreateEx(TREEID,0,0,rc2.right-rc2.left,rc2.bottom-rc2.top,m_hWnd,m_hInst);
	m_tree.SetImageList(&m_imagelist);
	m_tree.SetFile(&m_file);
	m_tree.m_Flag.TrunFlagsShowChildNumber(FALSE);
	m_tree.m_Flag.TrunFlagsShowItemProperties(FALSE);
	m_tree.m_Flag.TrunFlagsShowImageIcon(TRUE);

	m_list.CreateEx(LISTID,0,0,rc2.right-rc2.left,rc2.bottom-rc2.top,m_hWnd,m_hInst);
	m_list.SetImageList(&m_imagelist);
	m_list.SetFile(&m_file);
	m_list.InsertDiskList();

	m_tree.FlushDiskTree();
//	m_tree.ExpandRoot();
	FlushView(IDM_VIEW_TREE);
}

void zWinFrame::OnDestory()
{
	m_bar.DestoryBar();

	m_tray.TrayIconDelete();
}

void zWinFrame::FlushView(UINT id)
{
	m_iView = id;

	RECT rc;
	GetWindowRect(this->m_hWnd, &rc);
	int xPos = 0;
	int yPos = 26;					//标题栏高度
	int wCx = rc.right-rc.left;
	int wCy = rc.bottom - 26 - 25;	//标题栏和菜单的高度
	int iSep = 1;					//间隔线

	switch(id)
	{
	case IDM_VIEW_TREE:
		{
//			::OutputDebugString(_T("ViewTree\n"));
			::ShowWindow(m_tree.m_hCtrl,SW_SHOW);
			::ShowWindow(m_list.m_hCtrl,SW_HIDE);
			MoveWindow(m_tree.m_hCtrl, xPos,yPos,wCx,wCy, TRUE);
		}
		break;
	case IDM_VIEW_LIST:
		{
//			::OutputDebugString(_T("ViewList\n"));
			::ShowWindow(m_tree.m_hCtrl,SW_HIDE);
			::ShowWindow(m_list.m_hCtrl,SW_SHOW);
			MoveWindow(m_list.m_hCtrl,xPos,yPos,wCx,wCy, TRUE);
		}
		break;
	case IDM_VIEW_BOTH:
		{
//			::OutputDebugString(_T("ViewBoth\n"));
			::ShowWindow(m_tree.m_hCtrl,SW_SHOW);
			::ShowWindow(m_list.m_hCtrl,SW_SHOW);
			int iPos = yPos + m_iPos;
			MoveWindow(m_tree.m_hCtrl, xPos,yPos,wCx,m_iPos, TRUE);
			MoveWindow(m_list.m_hCtrl, xPos,iPos+iSep,wCx,wCy-m_iPos-iSep, TRUE);
		}
		break;
	}
}

void zWinFrame::OnSize(WPARAM wParam,LPARAM lParam)
{
	FlushView(m_iView);
}

void zWinFrame::TrayNotifyMessage(WPARAM wParam,LPARAM lParam)
{
    switch (lParam)
    {
    case WM_LBUTTONDOWN:
        if (wParam == TRAY_UID)
        {
            if (m_bWinHide)
            {
				::OutputDebugString(_T("按下TRAY,bHide:TRUE->FALSE.\n"));
                ::ShowWindow(m_hWnd, SW_SHOW);
                SetForegroundWindow(m_hWnd);	// make us come to the front
                m_bWinHide = FALSE;
            } 
			else 
			{
				::OutputDebugString(_T("按下TRAY,bHide:FALSE->TRUE.\n"));
				m_bWinHide = TRUE;
			}
        }
        break;
    }
}


void zWinFrame::FlushDiskTree()
{
	m_tree.Reset();
	m_tree.FlushDiskTree();
}

void zWinFrame::FlushDiskList()
{
	m_list.FlushDiskList();
}

⌨️ 快捷键说明

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