Repository navigation
Expand file tree
/
Copy pathtypelibview.cpp
More file actions
65 lines (50 loc) · 1.79 KB
/
Copy pathtypelibview.cpp
File metadata and controls
65 lines (50 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "StdAfx.h"
#include "typelibview.h"
TypeLibView::TypeLibView(): m_bMsgHandled(0)
{
}
LRESULT TypeLibView::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
auto pcs = reinterpret_cast<LPCREATESTRUCT>(lParam);
if (!m_tree.Create(*this, rcDefault, nullptr,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TVS_HASLINES |
TVS_LINESATROOT | TVS_SHOWSELALWAYS, 0, 0U, pcs->lpCreateParams)) {
return -1;
}
if (!m_idlView.Create(*this, rcDefault, nullptr,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |
ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE
| ES_NOOLEDRAGDROP | ES_READONLY)) {
return -1;
}
auto bResult = CSplitterWindow::OnCreate(uMsg, wParam, lParam, bHandled);
SetSplitterPane(SPLIT_PANE_LEFT, m_tree);
SetSplitterPane(SPLIT_PANE_RIGHT, m_idlView);
SetSplitterPosPct(50);
SelectItem(pcs->lpCreateParams);
return bResult;
}
LRESULT TypeLibView::OnTVSelChanged(LPNMHDR pnmhdr)
{
if (pnmhdr == nullptr || pnmhdr->hwndFrom != m_tree
|| !m_idlView.IsWindow()) {
return 0;
}
auto item = CTreeItem(reinterpret_cast<LPNMTREEVIEW>(pnmhdr)->itemNew.hItem, &m_tree);
CComPtr<ITypeLib> pTypeLib;
auto hr = m_tree.GetTypeLib(&pTypeLib);
if (FAILED(hr)) {
return 0;
}
m_idlView.SendMessage(WM_SELCHANGED, reinterpret_cast<WPARAM>(pTypeLib.p), item.GetData());
return 0;
}
void TypeLibView::SelectItem(LPVOID pv)
{
ATLASSERT(m_tree.IsWindow());
ATLASSERT(m_idlView.IsWindow());
auto pdata = static_cast<LPOBJECTDATA>(pv);
if (pdata != nullptr && pdata->guid != GUID_NULL) {
m_tree.SelectType(pdata->guid);
}
}