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

📄 mainwnd.cpp

📁 在VC编程环境下
💻 CPP
字号:
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	文件:MainWnd.cpp

	版权:Firebird Software Workroom 保留

	声明:本源程序的版权受《中华人民共和国著作权法》以及其
		  它相关法律和条约的保护。任何有机会得到本源程序的
		  个人和机构,未经作者明确授权,不得将本源程序用于
		  任何商业目的(直接的或间接的)。对于非商业目的的使
		  用 (包括复制、传播、编译和修改), 原则上没有特别
		  的限制条款,但请在相关文档中说明其来源,并尊重原
		  作者的署名权。

	编写:秦传安	2000.5

	联络:Tel:(0792)6323086	E_mail:chings@163.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include "fclstd.h"
#include "AppFrameApp.h"
#include "resource.h"
#include "MainWnd.h"
#include "about.h"

#define IDW_TABCTRLBAR		0xE851
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMainWnd::CMainWnd()
{
	m_WndPlm.flags = WPF_RESTORETOMAXIMIZED;
	m_WndPlm.length = sizeof(WINDOWPLACEMENT);

	m_strCurDir[0] = '\0';
}

CMainWnd::~CMainWnd()
{
}
//////////////////////////////////////////////////////////////////////
LRESULT CMainWnd::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam)
{
	LRESULT lResult = 0;

	switch(msg)
	{
	case WM_MEASUREITEM:
		{
			LPMEASUREITEMSTRUCT pmis = (LPMEASUREITEMSTRUCT)lParam;
			if(pmis->CtlType == ODT_MENU)
			{
				CCoolMenu* pMenu = (CCoolMenu*)pmis->itemData;
				if(pMenu)
					pMenu->MeasureItem(pmis);
			}
			else
				lResult = CFBFrameWnd::WindowProc(msg,wParam,lParam);
		}
		break;
	case WM_DRAWITEM:
		{
			LPDRAWITEMSTRUCT pds = (LPDRAWITEMSTRUCT)lParam;
			if(pds->CtlType == ODT_MENU)
			{
				CCoolMenu* pMenu = (CCoolMenu*)pds->itemData;
				if(pMenu)
					pMenu->DrawItem(pds);
			}
			else
				lResult = CFBFrameWnd::WindowProc(msg,wParam,lParam);
		}
		break;
	default:
		lResult = CFBFrameWnd::WindowProc(msg,wParam,lParam);
	}

	return lResult;
}
////////////////////////////////////////////////////////////////////////////////////////
BOOL CMainWnd::OnCreate()
{
	if(!m_wndCoolBar.Create(NULL,this,CBS_BORDER_RECT|CBS_GRIPPER,26,26,IDW_COOLBAR))
		return FALSE;

	if(!m_wndMenuBar.Create(this,NULL,IDW_MAINMENU))
		return FALSE;
	//HMENU hMenu = LoadMenu(GetInstance(), MAKEINTRESOURCE(IDM_MAINMENU));
	m_MainMenu.LoadMenu(IDM_MAINMENU);
	if(!m_wndMenuBar.LoadMenu(&m_MainMenu/*hMenu*/,FALSE))
		return FALSE;

	CB_BANDINFO cbif;
	cbif.bShow = TRUE;
	cbif.cxMinSize = 300;
	cbif.cyMinSize = 20;
	cbif.nLines = 0;
	cbif.hWnd = m_wndMenuBar.m_hWnd;
	cbif.uID = IDM_MAINMENU;
	cbif.cchText = 0;
	m_wndCoolBar.AddBand(&cbif);

	if(!m_wndComboBox.Create(this,IDW_COMBOBOX,WS_VSCROLL|CBS_DROPDOWN))
		return FALSE;

	cbif.cxMinSize = 220;
	cbif.hWnd = m_wndComboBox.m_hWnd;
	cbif.uID = IDW_COMBOBOX;
	cbif.pText = "地址";
	cbif.cchText = 4;
	cbif.cyMinSize = 22;
	cbif.nLines = 0;
	m_wndCoolBar.AddBand(&cbif);

	if(!m_wndToolBar.Create(this,NULL,IDW_TOOLBAR))
		return FALSE;

	if(!m_wndToolBar.LoadToolBar(IDT_TOOLBAR))
		return FALSE;

	cbif.cchText = 0;
	cbif.cxMinSize = 300;
	cbif.cxText = NULL;
	cbif.cyMinSize = 22;
	cbif.hWnd = m_wndToolBar.m_hWnd;
	cbif.nLines = 1;
	cbif.uID = IDW_TOOLBAR;
	m_wndCoolBar.AddBand(&cbif);

	m_wndCoolBar.Docking(CB_DOCK_TOP);
	
	if(!m_wndStatusBar.Create(this,IDW_STATUSBAR))
		return FALSE;
	int pParts[4];
	pParts[0] = 180;
	pParts[1] = 240;
	pParts[2] = 300;
	pParts[3] = 420;
	m_wndStatusBar.SetParts(4,pParts);
	m_wndStatusBar.SetText(0,"就绪");

	if(!m_wndFileList.Create(this,IDW_FILELISTVIEW))
		return FALSE;
	m_wndFileList.SetBkImage("ListBack.bmp");
	
	InitDockWnd();

	//m_wndCoolBar.UseGradientBk(RGB(158,139,117),RGB(203,185,156),3);
	m_wndCoolBar.SetBkBitmap(LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_TB_BACK)));

	return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////
void CMainWnd::ReCalcLayout(LPRECT prc)
{
	m_wndCoolBar.ReCalcLayout(prc);
	m_wndStatusBar.ReCalcLayout(prc);
	m_wndTabBar.ReCalcLayout(prc);
	m_wndFileList.ReCalcLayout(prc);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void CMainWnd::OnCommand(UINT uCode,UINT uID,HWND hwndCtrl)
{
	switch(uID)
	{
	case ID_VIEWADDRBAR:
		{
			BOOL flag = m_wndMenuBar.GetMenuItemCheckState(uID);
			m_wndMenuBar.CheckMenuItem(uID,!flag);
			m_wndCoolBar.ShowBand(IDW_COMBOBOX,!flag);
		}
		break;
	case ID_VIEWTOOLBAR:
		{
			BOOL flag = m_wndMenuBar.GetMenuItemCheckState(uID);
			m_wndMenuBar.CheckMenuItem(uID,!flag);
			m_wndCoolBar.ShowBand(IDW_TOOLBAR,!flag);
		}
		break;
	case ID_VIEWSTATUSBAR:
		{
			BOOL flag = m_wndMenuBar.GetMenuItemCheckState(uID);
			m_wndMenuBar.CheckMenuItem(uID,!flag);
			int cmd = SW_SHOW;
			if(flag)
				cmd = SW_HIDE;
			ShowWindow(m_wndStatusBar.m_hWnd,cmd);

			RECT rc;
			GetClientRect(m_hWnd,&rc);
			ReCalcLayout(&rc);
		}
		break;
	case ID_VIEWFOLDER:
		{
			BOOL flag = m_wndMenuBar.GetMenuItemCheckState(uID);
			m_wndMenuBar.CheckMenuItem(uID,!flag);
			int show = SW_SHOW;
			if(flag)
				show = SW_HIDE;
			ShowWindow(m_wndTabBar.m_hWnd,show);

			RECT rc;
			GetClientRect(m_hWnd,&rc);
			ReCalcLayout(&rc);
		}
		break;
	case ID_ABOUT:
		{
			CAboutDlg About;
			About.Create(this,IDD_ABOUTBOX);
			About.DoModal();
		}
		break;
	case ID_APP_EXIT:
		OnClose();
		PostQuitMessage(0);
		break;
	case ID_FILEOPEN:
		OnFileOpen();
		break;
	default:
		break;
	}
}
/////////////////////////////////////////////////////////////////////////////////////
void CMainWnd::OnCustomNotify(UINT code,UINT uID,LPARAM lParam)
{
	switch(code)
	{
	case FB_TCN_SELCHANGED:
		SetCurDir((LPTSTR)lParam);
		break;
	case FB_TABN_SELCHANGED:
		if(lParam == IDW_DIRTREE_LOCAL)
		{
			if(m_strCurDir[0] != '\0')
				m_wndFileList.FillFileList(m_strCurDir);
		}
		else if(lParam == IDW_DIRTREE_REMOT)
			m_wndFileList.RemoveAll();
		break;
	case FB_CBN_SELCHANGED:
		{
			LPTSTR szPath = (LPTSTR)lParam;
			m_wndDirTree.TunnelTree(szPath);
			SetCurDir(szPath);
		}
		break;
	case FB_TTN_SHOWING://ToolTip显示的时候发此消息
		m_wndStatusBar.SetText(0,(LPSTR)lParam);
		break;
	case FB_TTN_HIDEN://ToolTip消失的时候发此消息
		m_wndStatusBar.SetText(0,"就绪");
		break;
	case FB_CBN_CLOSE:
		if(uID == IDW_TABCTRLBAR)
			m_wndMenuBar.CheckMenuItem(ID_VIEWFOLDER,FALSE);
		break;
	}
}
/////////////////////////////////////////////////////////////////////////////////////
void CMainWnd::OnFileOpen()
{
}
///////////////////////////////////////////////////////////////////////////////////////////
BOOL CMainWnd::InitDockWnd()
{
	if(m_wndDirTree.Create(this,IDW_DIRTREE_LOCAL) == FALSE)
		return FALSE;
	m_wndDirTree.SetBkImage("TreeBack.bmp");

	UINT style = WS_VISIBLE| WS_CHILD| TVS_HASLINES | TVS_LINESATROOT |
				 TVS_HASBUTTONS | TVS_SHOWSELALWAYS |
				 CCS_NOPARENTALIGN|CCS_NODIVIDER|CCS_NORESIZE;
	if(!m_wndRemotFolder.Create(this,style,IDW_DIRTREE_REMOT))
		return FALSE;
	m_wndRemotFolder.SetBkImage("TreeBack.bmp");

	if(!m_wndTabBar.Create("文件夹查看",this,CBS_FLYBY,180,120,IDW_TABCTRLBAR))
		return FALSE;

	if(!m_wndTabCtrl.Create(&m_wndTabBar,NULL,CCS_BOTTOM))
		return FALSE;
	m_wndTabCtrl.SetOwner(this);

	HIMAGELIST himl = ImageList_LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_TABBARIMG), 16, 1, RGB(0,255,0));
	m_wndTabCtrl.SetImageList(himl);
	m_wndTabCtrl.AddView(&m_wndDirTree,"本地",TRUE);
	m_wndTabCtrl.AddView(&m_wndRemotFolder,"远程",TRUE);
	m_wndTabCtrl.SetActiveView(0);

	m_wndTabBar.SetChild(m_wndTabCtrl.m_hWnd);
	m_wndTabBar.Docking(CB_DOCK_LEFT);

	//从注册表中得到窗口初始位置和尺寸的数据
	if(GetApp()->RegGetBinary("Setings","WindowPlacement",(LPBYTE)&m_WndPlm,sizeof(WINDOWPLACEMENT)))
		SetWindowPlacement(m_hWnd,&m_WndPlm);

	return TRUE;
}
////////////////////////////////////////////////////////////////////////////
void CMainWnd::SetCurDir(LPTSTR szPath)
{
	if(!szPath || (lstrcmpi(szPath,m_strCurDir) == 0))
		return;

	lstrcpy(m_strCurDir,szPath);

	if(szPath[0] != '\0')
	{
		int index = m_wndComboBox.Find(szPath);
		if(index == CB_ERR)
		{
			m_wndComboBox.InsertString(0,szPath);
			m_wndComboBox.SetCurSel(0);
		}
		else if(index != m_wndComboBox.GetCurSel())
			m_wndComboBox.SetCurSel(index);

		m_wndFileList.FillFileList(szPath);
	}
	else
		m_wndFileList.RemoveAll();
}
//####################################################################
void CMainWnd::OnClose()
{
	WINDOWPLACEMENT wplm;
	wplm.length = sizeof(WINDOWPLACEMENT);
	wplm.flags = WPF_RESTORETOMAXIMIZED;
	GetWindowPlacement(m_hWnd,&wplm);
	GetApp()->RegSetBinary("Setings","WindowPlacement",(LPBYTE)&wplm,sizeof(WINDOWPLACEMENT));
}
//####################################################################

⌨️ 快捷键说明

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