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