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

📄 mainwnd.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			TCHAR szPath[MAX_PATH];
			wcscpy(szPath, m_ListView.m_szCurrentFolder);

			//揬傝晅偗慜偺僨傿儗僋僩儕偑側偄応崌丄忋埵僨傿儗僋僩儕傊堏摦
			while(GetFileAttributes(szPath) == 0xFFFFFFFF) {
				LPTSTR lpszTemp = wcsrchr(szPath, _T('\\'));
				if(lpszTemp) *lpszTemp = 0;
			} // End of while

			//昞帵傪峏怴
			OnViewUpdate(szPath);
		}
	}
}
//ADD END
///////////////////////////////////////////////////////////////
void CMainWnd::OnToolPclink()
{
	SHELLEXECUTEINFO sei;
	sei.cbSize = sizeof(SHELLEXECUTEINFO);
	sei.fMask = 0;
	sei.hwnd = m_hWnd;
	sei.lpVerb = _T("open");
	sei.lpFile = _T("repllog.exe");
	sei.lpParameters = NULL;
	sei.lpDirectory = m_szWindowsPath;
	sei.nShow = SW_SHOW;
	sei.hInstApp = g_hInst;
	ShellExecuteEx(&sei);
}
///////////////////////////////////////////////////////////////
void CMainWnd::OnToolActivesync() 
{
	SHELLEXECUTEINFO sei;
	sei.cbSize = sizeof(SHELLEXECUTEINFO);
	sei.fMask = 0;
	sei.hwnd = m_hWnd;
	sei.lpVerb = _T("open");
	sei.lpFile = _T("async.asy");
	sei.lpParameters = NULL;
	sei.lpDirectory = m_szWindowsPath;
	sei.nShow = SW_SHOW;
	sei.hInstApp = g_hInst;
	ShellExecuteEx(&sei);
}
///////////////////////////////////////////////////////////////
void CMainWnd::OnToolIRRecive()
{
	//MOD START TODA (from GSFinder ver.1.99)
	SHELLEXECUTEINFO sei;
	sei.cbSize = sizeof(SHELLEXECUTEINFO);
	sei.fMask = 0;
	sei.hwnd = this->m_hWnd;
	sei.lpVerb = _T("open");
	sei.lpParameters = NULL;
	sei.lpDirectory = m_szWindowsPath;
	sei.nShow = SW_SHOW;
	sei.hInstApp = g_hInst;

	if (GetFileAttributes(_T("\\Windows\\beam.exe")) != 0xFFFFFFFF)
		sei.lpFile = _T("beam.exe");
	else 
		sei.lpFile = _T("irsquirt.exe");

	ShellExecuteEx(&sei);
	//MOD END
}
///////////////////////////////////////////////////////////////
void CMainWnd::SaveModulePath()
{
	TCHAR szPath[MAX_PATH];
	GetModuleFileName(g_hInst, szPath, MAX_PATH);
	HKEY hKey = 0;
	DWORD dwDisposition;
	//MOD START TODA (from GSFiner ver.1.99)
	if (RegCreateKeyEx(HKEY_CURRENT_USER, REG_KEY_GSF, 0,
		_T(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS)
	//MOD END
	{
		BYTE lpData[MAX_PATH*2];
		memcpy(lpData, &szPath, sizeof(szPath));
		RegSetValueEx(hKey, _T("Path"), 0, REG_SZ, lpData, sizeof(szPath));

		RegCloseKey(hKey);
	}
}
///////////////////////////////////////////////////////////////
void CMainWnd::OnActivate(int nActive)
{
	if (nActive == WA_INACTIVE)	{
		m_hwndPrev = GetFocus();
#ifdef __POCKET_PC
		m_dwLastSipInfo = GetIMStatus();
#endif
	}
	else if (nActive == WA_ACTIVE) {
		SetFocus(m_hwndPrev);
		//DEL START TODA (from GSFiner ver.1.99)
		//DWORD dwStatus = GetIMStatus();
		//if (m_dwLastSipInfo != dwStatus)
		//DEL END
		RecalcLayout();
	}
}
///////////////////////////////////////////////////////////////
void CMainWnd::OnSettingChange(int nFlag)
{
#ifdef __POCKET_PC
    if (nFlag == SPI_SETSIPINFO)
		RecalcLayout();
#endif
}

///////////////////////////////////////////////////////////////
void CMainWnd::RecalcLayout()
{
#ifdef __POCKET_PC
	SIPINFO si;
	memset(&si, 0, sizeof(si));
	si.cbSize = sizeof(si);
	if (SipGetInfo(&si)) {
		if (si.fdwFlags & SIPF_ON) {
			OnSize(RECT_WIDTH(&si.rcVisibleDesktop), RECT_HEIGHT(&si.rcVisibleDesktop));

			//慖戰偟偰偄傞傕偺傪尒偊傞傛偆偵偡傞
			for (int i = 0; i < ListView_GetItemCount(m_ListView.m_hWnd); i++)
			{
				if (ListView_GetItemState(m_ListView.m_hWnd, i, LVIS_FOCUSED) == LVIS_FOCUSED)
				{
					ListView_EnsureVisible(m_ListView.m_hWnd, i, FALSE);
					break;
				}
			}
		}
		else
		{
			//ADD START TODA (儊僯儏乕偺崅偝傪摦揑偵庢摼)
			DWORD y = GetSystemMetrics(SM_CYMENU) + 3;
			//ADD END
			OnSize(RECT_WIDTH(&si.rcVisibleDesktop), RECT_HEIGHT(&si.rcVisibleDesktop) - y); //MOD TODA (MENU_HEIGHT -> y)
		}
	}
	m_dwLastSipInfo = si.fdwFlags;
#else
	RECT rc;
	GetClientRect(m_hWnd, &rc);
	OnSize(RECT_WIDTH(&rc), RECT_HEIGHT(&rc));
#endif
}

//ADD START TODA
///////////////////////////////////////////////////////////////
void CMainWnd::RecalcBarLayout(WPARAM wParam, LPARAM lParam)
{
	//僐儅儞僪僶乕偺僒僀僘挷惍
	if(m_CmdBands.m_Settings.bShowToolBar ||
	   m_CmdBands.m_Settings.bShowAddressBar)
		SendMessage(m_CmdBands.m_hWnd, WM_SIZE, wParam, lParam);
	//僗僥乕僞僗僶乕偺僒僀僘挷惍
	if(m_bShowStatusWnd) {
		SendMessage(m_StatusWnd.m_hWnd, WM_SIZE, wParam, lParam);
		m_StatusWnd.OnSize(LOWORD(lParam), HIWORD(lParam));
	}
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnMouseMove(LPARAM lParam, int nStartPos, int nLastWidth, int nLastHeight)
{
	//MOD START TODA (堏摦斖埻愝掕 from Y.Nagamidori)
	if(m_bViewSide)
	{
		int x = LOWORD(lParam);

		//堏摦斖埻愝掕(壓尷/忋尷)
		int min = 20;
		int max = GetSystemMetrics(SM_CXSCREEN) - 20;

		//堏摦斖埻僠僃僢僋
		if (x > min && x < max)
		{
			m_nTreeViewWidth = nLastWidth + (x - nStartPos);
			RecalcLayout();
		}
	}
	else
	{
		int y = HIWORD(lParam);

		//僣儕乕價儏乕偺嵗昗庢摼(壓尷)
		RECT rc;
		POINT pt;
		GetWindowRect(m_TreeView.m_hWnd, &rc);
		pt.x = rc.right;
		pt.y = rc.top;
		ScreenToClient(m_hWnd, &pt);
		int min = pt.y + 20;

		//儕僗僩價儏乕偺嵗昗庢摼(忋尷)
		GetWindowRect(m_ListView.m_hWnd, &rc);
		pt.x = rc.right;
		pt.y = rc.bottom;
		ScreenToClient(m_hWnd, &pt);
		int max = pt.y - 20;

		//堏摦斖埻僠僃僢僋
		if (y > min && y < max)
		{
			m_nTreeViewHeight = nLastHeight + (y - nStartPos);
			RecalcLayout();
		}
	}
	//MOD END
}
///////////////////////////////////////////////////////////////
//ADD END

//ADD START TODA
///////////////////////////////////////////////////////////////
HIMAGELIST CMainWnd::ListViewImageCreate(LPNMLISTVIEW lpNMLV)
{
	HWND hList = m_ListView.m_hWnd;

#ifdef __POCKET_PC
	//僀儊乕僕儕僗僩嶌惉
	POINT ptImg;
	HIMAGELIST hDrag = ListView_CreateDragImage(hList, lpNMLV->iItem, &ptImg);
#else
	//僀儊乕僕儕僗僩僗僞僀儖曄峏
	DWORD dwStyle = GetWindowLong(hList, GWL_STYLE);
	DWORD dwBack = dwStyle;
	if((dwBack & LVS_TYPEMASK) == LVS_REPORT)
	{
		dwStyle &= ~LVS_TYPEMASK;
		dwStyle |= LVS_LIST;
		SetWindowLong(hList, GWL_STYLE, dwStyle);
	}

	//僀儊乕僕儕僗僩嶌惉
	POINT ptImg;
	HIMAGELIST hDrag = ListView_CreateDragImage(hList, lpNMLV->iItem, &ptImg);

	//僀儊乕僕儕僗僩僗僞僀儖曄峏(尦偵栠偡)
	if((dwBack & LVS_TYPEMASK) == LVS_REPORT)
		SetWindowLong(hList, GWL_STYLE, dwBack);
#endif
	//僪儔僢僌奐巒
	if(ImageList_BeginDrag(hDrag, 0, 0, 0))
	{
		ImageList_DragEnter(NULL, lpNMLV->ptAction.x, lpNMLV->ptAction.y);
		return hDrag;
	}

	//僄儔乕帪
	return 0;
}

///////////////////////////////////////////////////////////////
HIMAGELIST CMainWnd::TreeViewImageCreate(LPNMTREEVIEW lpNMTV)
{
	HWND hTree = m_TreeView.m_hWnd;

	//僀儊乕僕儕僗僩嶌惉
	HIMAGELIST hDrag = TreeView_CreateDragImage(hTree, lpNMTV->itemNew.hItem);

	//僪儔僢僌奐巒
	if(ImageList_BeginDrag(hDrag, 0, 0, 0))
	{
		ClientToScreen(hTree, &(lpNMTV->ptDrag));
		ImageList_DragEnter(NULL, lpNMTV->ptDrag.x, lpNMTV->ptDrag.y);
		return hDrag;
	}

	//僄儔乕帪
	return 0;
}

///////////////////////////////////////////////////////////////
void CMainWnd::ImageLeave()
{
	//堏摦慜偺僀儊乕僕儕僗僩傪攋婞
	ImageList_DragLeave(NULL);
}

///////////////////////////////////////////////////////////////
void CMainWnd::ImageMove(POINT ptWnd)
{
	//僀儊乕僕儕僗僩傪堏摦埵抲傊昤夋
	ClientToScreen(m_hWnd, &ptWnd);
	ImageList_DragMove(ptWnd.x, ptWnd.y);
	ImageList_DragEnter(NULL, ptWnd.x, ptWnd.y);
}

///////////////////////////////////////////////////////////////
void CMainWnd::ImageDestory(HIMAGELIST hDrag)
{
	//僀儊乕僕儕僗僩傪攋婞
	ImageList_DragLeave(NULL);
	ImageList_EndDrag();
	ImageList_Destroy(hDrag);
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnBeginDrag(NMHDR* lpNMH)
{
	m_hDragWnd = lpNMH->hwndFrom;

	//儅僂僗僉儍僾僠儍奐巒
	SetCapture(m_hWnd);

	//儕僗僩價儏乕偺僪儔僢僌仌僪儘僢僾幚峴敾掕
	if(!m_bDragDrop && m_hDragWnd == m_ListView.m_hWnd)
	{
		if(!m_ListView.m_nSelectItem)
		{
			m_ListView.m_nSelectStart = ((LPNMLISTVIEW)lpNMH)->iItem;
			m_bSelectFlg = TRUE;
			return;
		}
	}
	m_bSelectFlg = FALSE;

	//僪儔僢僌拞偺僀儊乕僕儕僗僩嶌惉
	if(m_hDragWnd == m_ListView.m_hWnd) {
		m_hDragImg = ListViewImageCreate((LPNMLISTVIEW)lpNMH);
	}
	else
	if(m_hDragWnd == m_TreeView.m_hWnd) {
		LPNMTREEVIEW lpnmv = (LPNMTREEVIEW)lpNMH;
		m_hDragImg = TreeViewImageCreate(lpnmv);
		m_hDragTree = lpnmv->itemNew.hItem;
	}
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnMouseMove(POINT ptWnd)
{
	//僪儔僢僌仌僪儘僢僾幚峴敾掕
	if(m_bSelectFlg)
	{
		m_ListView.OnMouseMoveArea(ptWnd);
		return;
	}

	//慜夞偺僀儊乕僕儕僗僩昞帵傪嶍彍
	ImageLeave();
	
	//僪儔僢僌拞偺僼僅乕僇僗張棟
	m_ListView.OnMouseMove(ptWnd);
	m_TreeView.OnMouseMove(ptWnd);

	//崱偺嵗昗偱僀儊乕僕儕僗僩傪昞帵
	ImageMove(ptWnd);
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnLButtopUp()
{
	//儅僂僗僉儍僾僠儍廔椆
	ReleaseCapture();

	//僪儔僢僌仌僪儘僢僾幚峴敾掕
	if(m_bSelectFlg) return;

	//僀儊乕僕儕僗僩嶍彍
	ImageDestory(m_hDragImg);

	//僪儘僢僾帪偺張棟
	if(!m_TreeView.OnLButtonUp(m_hDragWnd)) {
		m_TreeView.OnDropCansel();
	} else {
		return;
	}
	if(!m_ListView.OnLButtonUp(m_hDragWnd)) {
		m_ListView.OnDropCansel();
	}
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnDropCansel()
{
	//儅僂僗僉儍僾僠儍廔椆
	ReleaseCapture();

	//僪儔僢僌仌僪儘僢僾幚峴敾掕
	if(m_bSelectFlg) return;

	//僀儊乕僕儕僗僩嶍彍
	ImageDestory(m_hDragImg);

	//僪儔僢僌傾僀僥儉偺僉儍儞僙儖張棟
	m_ListView.OnDropCansel();
	m_TreeView.OnDropCansel();
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnSetFocus(HWND hWnd)
{
	static HWND hfcsWnd = 0;
	
	//僼僅乕僇僗僂傿儞僪僂偑曄傢偭偨応崌偺傒
//	if(hWnd != hfcsWnd) {
		if (hWnd == m_TreeView.m_hWnd)
			m_TreeView.OnSetFocus();
		else
			m_ListView.OnItemChanged();

		//怴偟偄僴儞僪儖傪曐懚
		hfcsWnd = hWnd;
//	}
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnDeviceChange(BOOL bDevice, BOOL bStart)
{
	static BOOL bNoUpdate = FALSE;

	if(bStart)
	{
		KillTimer(m_hWnd, ID_TIMER_DEVICECHANGE);
		SetTimer(m_hWnd, ID_TIMER_DEVICECHANGE, 2000, NULL);
		if(bDevice) bNoUpdate = TRUE;
	}
	else
	{
		KillTimer(m_hWnd, ID_TIMER_DEVICECHANGE);

		//僣儕乕價儏乕偺峏怴(儖乕僩攝壓偺傒)
		m_TreeView.SetCurrentFolder(_T(""), TRUE, FALSE);

		//儕僗僩價儏乕偺峏怴
		TCHAR szPath[MAX_PATH];
		wcscpy(szPath, m_ListView.m_szCurrentFolder);

		//旕峏怴僼儔僌偑OFF媦傃僷僗偑側偄応崌
		if(!bNoUpdate || GetFileAttributes(szPath) == 0xFFFFFFFF)
		{
			//揬傝晅偗慜偺僨傿儗僋僩儕偑側偄応崌丄忋埵僨傿儗僋僩儕傊堏摦
			while(GetFileAttributes(szPath) == 0xFFFFFFFF) {
				LPTSTR lpszTemp = wcsrchr(szPath, _T('\\'));
				if(lpszTemp)
					*lpszTemp = 0;
				else
					break;
			} // End of while

			//儕僗僩價儏乕偺峏怴(儖乕僩傊堏摦)
			m_ListView.LoadFolderItem(szPath);
		}
		else
		//儖乕僩偺応崌
		if(!wcslen(szPath) || wcsicmp(szPath, GetRootName()) == 0)
		{
			//儕僗僩價儏乕偺峏怴
			m_ListView.LoadFolderItem(_T(""));
		}

		bNoUpdate = FALSE;
	}
}

///////////////////////////////////////////////////////////////
void CMainWnd::OnBeginLabelEdit()
{
	m_bPaste;

}

///////////////////////////////////////////////////////////////
void CMainWnd::OnEndLabelEdit()
{
}

///////////////////////////////////////////////////////////////
void CMainWnd::SetFont()
{
	static HFONT hFont = 0;
	int nHeight = 0;

	if(hFont)
		DeleteObject(hFont);

	if(!m_bFontChange)
	{
		hFont = (HFONT)::GetStockObject(SYSTEM_FONT);
	}
	else
	{
		HDC hDC = GetDC(m_hWnd);
		int nHeight = (m_nFontSize * GetDeviceCaps(hDC, LOGPIXELSY)) / 72;
		ReleaseDC(m_hWnd, hDC);
		hFont = MyCreateFont(nHeight, DEFAULT_CHARSET, m_szFontName);
	}

	SendMessage(m_ListView.m_hWnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
	SendMessage(m_TreeView.m_hWnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
	
	InvalidateRect(m_hWnd, NULL, FALSE);
}
//ADD END

⌨️ 快捷键说明

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