source: trunk/src/WTLx/ListViewEdit.hpp @ 398

Revision 398, 3.2 KB checked in by Eoin, 12 years ago (diff)
Line 
1
2//         Copyright Eoin O'Callaghan 2006 - 2008.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9#include "stdAfx.hpp"
10#include "atldlgx.h"
11
12#include <boost/array.hpp>
13
14namespace WTLx
15{
16
17template <class T>
18class CEditListViewImpl
19{
20public:
21
22        BEGIN_MSG_MAP(CEditListViewImpl)
23        END_MSG_MAP()
24
25private:
26};
27
28typedef CInPlaceEditor<MAX_PATH> CItemEditor;
29
30typedef ATL::CWinTraits<WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|LVS_REPORT|LVS_SHOWSELALWAYS, WS_EX_CLIENTEDGE> CEditListViewCtrlTraits;
31
32template <class T, class TBase = CListViewCtrl, class TWinTraits = CEditListViewCtrlTraits>
33class ATL_NO_VTABLE CEditListViewCtrlImpl: public ATL::CWindowImpl<T, TBase, TWinTraits>, public CEditListViewImpl<T>
34{
35        typedef CEditListViewCtrlImpl< T, TBase, TWinTraits> thisClass;
36        typedef ATL::CWindowImpl<T, TBase, TWinTraits> baseClass;
37
38public:
39        DECLARE_WND_SUPERCLASS(NULL, TBase::GetWndClassName())
40
41        BEGIN_MSG_MAP_EX(thisClass)
42                REFLECTED_NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDoubleClick)
43               
44        DEFAULT_REFLECTION_HANDLER()
45        END_MSG_MAP()
46       
47        void SubclassWindow(HWND hWndNew)
48        {
49                HAL_DEV_MSG(L"SubclassWindow");
50
51                ATLASSERT(::IsWindow(hWndNew));
52        baseClass::SubclassWindow(hWndNew);
53                hjk = hWndNew;
54        }
55
56        LRESULT OnDoubleClick(int i, LPNMHDR pnmh, BOOL&)
57        {
58                LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pnmh;
59                LVHITTESTINFO hit;
60
61                hit.pt = lpnmitem->ptAction;
62                SubItemHitTest(&hit);
63
64                HAL_DEV_MSG(wformat(L"OnDoubleClick %1% %2%") % hit.iItem % hit.iSubItem);
65
66                if (hit.iItem != -1 && hit.iSubItem != -1)
67                {
68                        const int buffer_size = MAX_PATH;
69                        boost::array<wchar_t, buffer_size> buffer;
70
71                        GetItemText(hit.iItem, hit.iSubItem, buffer.elems, buffer_size);
72                       
73                        CRect rect;
74                        CPoint pt;
75                        GetSubItemRect(hit.iItem, hit.iSubItem, LVIR_BOUNDS, rect);
76                        GetItemPosition(hit.iItem, &pt);
77
78                        //rect.InflateRect(-1,-1);
79            //rect.OffsetRect(pt);
80
81                        HAL_DEV_MSG(wformat(L"rect %1%,%2%-%3%,%4%") % rect.left % rect.top % rect.right % rect.bottom);
82                       
83                        CRect rc(0,0, 50, 20);
84                        CRect rc1;
85                        CRect rc2;
86                        CRect rc3;
87                        CRect rc4;
88
89                        GetWindowRect(rc1); 
90                        ::GetWindowRect(GetParent(), rc2); 
91
92                        HAL_DEV_MSG(wformat(L"rc %1%,%2%-%3%,%4%") % rc1.left % rc1.top % rc1.right % rc1.bottom);
93                        HAL_DEV_MSG(wformat(L"rc2 %1%,%2%-%3%,%4%") % rc2.left % rc2.top % rc2.right % rc2.bottom);
94
95                        //OffsetRect(rcOwner, -rect.left, -rect.top);
96                        //OffsetRect(rcOwner, -rc.left, -rc.top);
97                        //OffsetRect(rect, rcOwner.right, rcOwner.bottom);
98
99                        //rect.OffsetRect(rcOwner.left - rc.left, rcOwner.top - rc.top);
100
101                        //rect.OffsetRect(rect1.left, rect1.top);
102
103                        bool bRes = CItemEditor::Edit(rc, buffer.elems, GetForegroundWindow()); 
104
105                        HAL_DEV_MSG(wformat(L"CItemEditor::Edit %1%") % bRes); 
106                }
107                return true;
108        }
109
110        void OnLButtonDblClk(UINT nFlags, CPoint point)
111        {
112                HAL_DEV_MSG(L"OnLButtonDblClk");
113        }
114
115        HWND hjk;
116};
117
118class CEditListViewCtrl : public CEditListViewCtrlImpl<CEditListViewCtrl>
119{
120public:
121        DECLARE_WND_SUPERCLASS(_T("WTLx_EditListViewCtrl"), GetWndClassName())
122};
123
124
125};
Note: See TracBrowser for help on using the repository browser.