📄 mainwnd.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 + -