// Windows/Control/ListView.cpp | |
#include "StdAfx.h" | |
#include "ListView.h" | |
#ifndef _UNICODE | |
extern bool g_IsNT; | |
#endif | |
namespace NWindows { | |
namespace NControl { | |
bool CListView::CreateEx(DWORD exStyle, DWORD style, | |
int x, int y, int width, int height, | |
HWND parentWindow, HMENU idOrHMenu, | |
HINSTANCE instance, LPVOID createParam) | |
{ | |
return CWindow::CreateEx(exStyle, WC_LISTVIEW, TEXT(""), style, x, y, width, | |
height, parentWindow, idOrHMenu, instance, createParam); | |
} | |
bool CListView::GetItemParam(int index, LPARAM ¶m) const | |
{ | |
LVITEM item; | |
item.iItem = index; | |
item.iSubItem = 0; | |
item.mask = LVIF_PARAM; | |
bool aResult = GetItem(&item); | |
param = item.lParam; | |
return aResult; | |
} | |
int CListView::InsertColumn(int columnIndex, LPCTSTR text, int width) | |
{ | |
LVCOLUMN ci; | |
ci.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; | |
ci.pszText = (LPTSTR)text; | |
ci.iSubItem = columnIndex; | |
ci.cx = width; | |
return InsertColumn(columnIndex, &ci); | |
} | |
int CListView::InsertItem(int index, LPCTSTR text) | |
{ | |
LVITEM item; | |
item.mask = LVIF_TEXT | LVIF_PARAM; | |
item.iItem = index; | |
item.lParam = index; | |
item.pszText = (LPTSTR)text; | |
item.iSubItem = 0; | |
return InsertItem(&item); | |
} | |
int CListView::SetSubItem(int index, int subIndex, LPCTSTR text) | |
{ | |
LVITEM item; | |
item.mask = LVIF_TEXT; | |
item.iItem = index; | |
item.pszText = (LPTSTR)text; | |
item.iSubItem = subIndex; | |
return SetItem(&item); | |
} | |
#ifndef _UNICODE | |
int CListView::InsertColumn(int columnIndex, LPCWSTR text, int width) | |
{ | |
LVCOLUMNW ci; | |
ci.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; | |
ci.pszText = (LPWSTR)text; | |
ci.iSubItem = columnIndex; | |
ci.cx = width; | |
return InsertColumn(columnIndex, &ci); | |
} | |
int CListView::InsertItem(int index, LPCWSTR text) | |
{ | |
LVITEMW item; | |
item.mask = LVIF_TEXT | LVIF_PARAM; | |
item.iItem = index; | |
item.lParam = index; | |
item.pszText = (LPWSTR)text; | |
item.iSubItem = 0; | |
return InsertItem(&item); | |
} | |
int CListView::SetSubItem(int index, int subIndex, LPCWSTR text) | |
{ | |
LVITEMW item; | |
item.mask = LVIF_TEXT; | |
item.iItem = index; | |
item.pszText = (LPWSTR)text; | |
item.iSubItem = subIndex; | |
return SetItem(&item); | |
} | |
#endif | |
static LRESULT APIENTRY ListViewSubclassProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) | |
{ | |
CWindow window(hwnd); | |
CListView2 *w = (CListView2 *)(window.GetUserDataLongPtr()); | |
if (w == NULL) | |
return 0; | |
return w->OnMessage(message, wParam, lParam); | |
} | |
LRESULT CListView2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) | |
{ | |
#ifndef _UNICODE | |
if (g_IsNT) | |
return CallWindowProcW(_origWindowProc, *this, message, wParam, lParam); | |
else | |
#endif | |
return CallWindowProc(_origWindowProc, *this, message, wParam, lParam); | |
} | |
void CListView2::SetWindowProc() | |
{ | |
SetUserDataLongPtr((LONG_PTR)this); | |
#ifndef _UNICODE | |
if (g_IsNT) | |
_origWindowProc = (WNDPROC)SetLongPtrW(GWLP_WNDPROC, (LONG_PTR)ListViewSubclassProc); | |
else | |
#endif | |
_origWindowProc = (WNDPROC)SetLongPtr(GWLP_WNDPROC, (LONG_PTR)ListViewSubclassProc); | |
} | |
/* | |
LRESULT CListView3::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) | |
{ | |
LRESULT res = CListView2::OnMessage(message, wParam, lParam); | |
if (message == WM_GETDLGCODE) | |
{ | |
// when user presses RETURN, windows sends default (first) button command to parent dialog. | |
// we disable this: | |
MSG *msg = (MSG *)lParam; | |
WPARAM key = wParam; | |
bool change = false; | |
if (msg) | |
{ | |
if (msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) | |
change = true; | |
} | |
else if (wParam == VK_RETURN) | |
change = true; | |
if (change) | |
res |= DLGC_WANTALLKEYS; | |
} | |
return res; | |
} | |
*/ | |
}} |