- Add the (not yet dynamic) context menu
- Implement right click node select

svn path=/trunk/; revision=68167
This commit is contained in:
Ged Murphy
2015-06-17 08:15:08 +00:00
parent ab14879b70
commit fc3ebc1877
5 changed files with 113 additions and 45 deletions
+77 -11
View File
@@ -34,7 +34,7 @@ struct RefreshThreadData
{
CDeviceView *This;
BOOL ScanForChanges;
BOOL UpdateView;
BOOL UpdateView;
};
@@ -46,7 +46,8 @@ CDeviceView::CDeviceView(
m_hMainWnd(hMainWnd),
m_hTreeView(NULL),
m_hPropertyDialog(NULL),
m_hShortcutMenu(NULL),
m_hMenu(NULL),
m_hContextMenu(NULL),
m_ViewType(DevicesByType),
m_ShowHidden(FALSE),
m_RootClassImage(-1),
@@ -72,7 +73,7 @@ CDeviceView::Initialize()
WC_TREEVIEW,
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | TVS_HASLINES |
TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_LINESATROOT,
TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_LINESATROOT,
0, 0, 0, 0,
m_hMainWnd,
(HMENU)IDC_TREEVIEW,
@@ -89,6 +90,11 @@ CDeviceView::Initialize()
SetWindowTheme(m_hTreeView, L"explorer", NULL);
}
// Create the context menu and make properties the default item
m_hMenu = LoadMenuW(g_hInstance, MAKEINTRESOURCEW(IDR_POPUP));
m_hContextMenu = GetSubMenu(m_hMenu, 0);
SetMenuDefaultItem(m_hContextMenu, IDC_PROPERTIES, FALSE);
return !!(m_hTreeView);
}
@@ -103,11 +109,13 @@ CDeviceView::Uninitialize()
ZeroMemory(&m_ImageListData, sizeof(SP_CLASSIMAGELIST_DATA));
}
DestroyMenu(m_hMenu);
return true;
}
void
CDeviceView::Size(
LRESULT
CDeviceView::OnSize(
_In_ int x,
_In_ int y,
_In_ int cx,
@@ -122,12 +130,64 @@ CDeviceView::Size(
cx,
cy,
SWP_NOZORDER);
return 0;
}
LRESULT
CDeviceView::OnRightClick(
_In_ LPNMHDR NmHdr
)
{
HTREEITEM hItem = TreeView_GetNextItem(NmHdr->hwndFrom, 0, TVGN_DROPHILITE);
if (hItem)
{
TreeView_SelectItem(NmHdr->hwndFrom, hItem);
}
return 0;
}
LRESULT
CDeviceView::OnContextMenu(
_In_ LPARAM lParam
)
{
HTREEITEM hSelected = TreeView_GetSelection(m_hTreeView);
RECT rc;
if (TreeView_GetItemRect(m_hTreeView,
hSelected,
&rc,
TRUE))
{
POINT pt;
if (GetCursorPos(&pt) &&
ScreenToClient(m_hTreeView, &pt) &&
PtInRect(&rc, pt))
{
INT xPos = GET_X_LPARAM(lParam);
INT yPos = GET_Y_LPARAM(lParam);
TrackPopupMenuEx(m_hContextMenu,
TPM_RIGHTBUTTON,
xPos,
yPos,
m_hMainWnd,
NULL);
}
}
return 0;
}
void
CDeviceView::Refresh(_In_ ViewType Type,
_In_ bool ScanForChanges,
_In_ bool UpdateView)
CDeviceView::Refresh(
_In_ ViewType Type,
_In_ bool ScanForChanges,
_In_ bool UpdateView
)
{
// Enum devices on a seperate thread to keep the gui responsive
@@ -192,7 +252,9 @@ CDeviceView::SetFocus()
}
bool
CDeviceView::HasProperties(_In_ LPTV_ITEMW TvItem)
CDeviceView::HasProperties(
_In_ LPTV_ITEMW TvItem
)
{
CNode *Node = GetNode(TvItem);
if (Node)
@@ -203,7 +265,9 @@ CDeviceView::HasProperties(_In_ LPTV_ITEMW TvItem)
}
bool
CDeviceView::IsDisabled(_In_ LPTV_ITEMW TvItem)
CDeviceView::IsDisabled(
_In_ LPTV_ITEMW TvItem
)
{
CNode *Node = GetNode(TvItem);
if (Node)
@@ -214,7 +278,9 @@ CDeviceView::IsDisabled(_In_ LPTV_ITEMW TvItem)
}
bool
CDeviceView::CanDisable(_In_ LPTV_ITEMW TvItem)
CDeviceView::CanDisable(
_In_ LPTV_ITEMW TvItem
)
{
CNode *Node = GetNode(TvItem);
if (Node)
+12 -8
View File
@@ -20,7 +20,8 @@ class CDeviceView
HWND m_hMainWnd;
HWND m_hTreeView;
HWND m_hPropertyDialog;
HWND m_hShortcutMenu;
HMENU m_hMenu;
HMENU m_hContextMenu;
ViewType m_ViewType;
HTREEITEM m_hTreeRoot;
@@ -39,13 +40,21 @@ public:
bool Initialize();
bool Uninitialize();
VOID Size(
LRESULT OnSize(
_In_ int x,
_In_ int y,
_In_ int cx,
_In_ int cy
);
LRESULT OnRightClick(
_In_ LPNMHDR NmHdr
);
LRESULT OnContextMenu(
_In_ LPARAM lParam
);
VOID Refresh(
_In_ ViewType Type,
_In_ bool ScanForChanges,
@@ -55,12 +64,7 @@ public:
VOID DisplayPropertySheet();
VOID SetFocus();
//VOID SetDeviceListType(ListDevices List)
//{
// m_ListDevices = List;
//}
VOID ShowHiddenDevices(_In_ bool ShowHidden)
VOID SetHiddenDevices(_In_ bool ShowHidden)
{
m_ShowHidden = ShowHidden;
}
+13 -24
View File
@@ -16,7 +16,6 @@
#define BTN_PROPERTIES 0
#define BTN_SCAN_HARDWARE 1
#define BTN_SEPERATOR -1
#define BTN_ENABLE_DRV 2
#define BTN_DISABLE_DRV 3
#define BTN_UPDATE_DRV 4
@@ -124,7 +123,7 @@ CMainWindow::Initialize(LPCTSTR lpCaption,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
CW_USEDEFAULT,
CW_USEDEFAULT,
500,
550,
500,
NULL,
NULL,
@@ -230,9 +229,6 @@ CMainWindow::ScanForHardwareChanges()
return true;
}
bool
CMainWindow::CreateToolBar()
{
@@ -311,7 +307,7 @@ CMainWindow::CreateStatusBar()
return bRet;
}
void CMainWindow::UpdateContext(_In_ LPTV_ITEMW TvItem)
void CMainWindow::UpdateUiContext(_In_ LPTV_ITEMW TvItem)
{
WORD State;
@@ -437,10 +433,10 @@ CMainWindow::OnSize()
lvHeight = rcClient.bottom - iToolHeight - iStatusHeight;
// Resize the device view
m_DeviceView->Size(0,
iToolHeight,
rcClient.right,
lvHeight);
m_DeviceView->OnSize(0,
iToolHeight,
rcClient.right,
lvHeight);
return 0;
}
@@ -449,27 +445,20 @@ LRESULT
CMainWindow::OnNotify(LPARAM lParam)
{
LPNMHDR NmHdr = (LPNMHDR)lParam;
LRESULT Ret;
switch (NmHdr->code)
{
case TVN_SELCHANGED:
{
LPNMTREEVIEW NmTreeView = (LPNMTREEVIEW)lParam;
UpdateContext(&NmTreeView->itemNew);
UpdateUiContext(&NmTreeView->itemNew);
break;
}
case TVN_DELETEITEMW:
case NM_RCLICK:
{
LPNMTREEVIEW NmTreeView = (LPNMTREEVIEW)lParam;
NmTreeView->action = NmTreeView->action;
break;
}
case NM_DBLCLK:
{
m_DeviceView->DisplayPropertySheet();
Ret = m_DeviceView->OnRightClick(NmHdr);
break;
}
@@ -486,7 +475,7 @@ CMainWindow::OnNotify(LPARAM lParam)
LRESULT
CMainWindow::OnContext(LPARAM lParam)
{
return 0;
return m_DeviceView->OnContextMenu(lParam);
}
LRESULT
@@ -535,12 +524,12 @@ CMainWindow::OnCommand(WPARAM wParam,
if (CurCheckState == MF_CHECKED)
{
// Inform the device view of the change
m_DeviceView->ShowHiddenDevices(false);
m_DeviceView->SetHiddenDevices(false);
NewCheckState = MF_UNCHECKED;
}
else if (CurCheckState == MF_UNCHECKED)
{
m_DeviceView->ShowHiddenDevices(true);
m_DeviceView->SetHiddenDevices(true);
NewCheckState = MF_CHECKED;
}
else
@@ -44,7 +44,7 @@ private:
bool CreateToolBar();
bool CreateStatusBar();
void UpdateContext(_In_ LPTV_ITEMW TvItem);
void UpdateUiContext(_In_ LPTV_ITEMW TvItem);
bool StatusBarLoadString(
HWND hStatusBar,
+10 -1
View File
@@ -9,6 +9,7 @@ BEGIN
POPUP "Action"
BEGIN
MENUITEM "Update driver software..." IDC_UPDATE_DRV
MENUITEM "Enable" IDC_ENABLE_DRV
MENUITEM "Disable" IDC_DISABLE_DRV
MENUITEM "Uninstall" IDC_UNINSTALL_DRV
MENUITEM SEPARATOR
@@ -36,7 +37,15 @@ IDR_POPUP MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "Properties", IDC_PROPERTIES, GRAYED
MENUITEM "Update driver software..." IDC_UPDATE_DRV
MENUITEM "Enable" IDC_ENABLE_DRV
MENUITEM "Disable" IDC_DISABLE_DRV
MENUITEM "Uninstall" IDC_UNINSTALL_DRV
MENUITEM SEPARATOR
MENUITEM "Scan for hardware changes" IDC_SCAN_HARDWARE
MENUITEM "Add hardware" IDC_ADD_HARDWARE, GRAYED
MENUITEM SEPARATOR
MENUITEM "Properties", IDC_PROPERTIES
END
END