--- /dev/null
+/*
+ * ReactOS Column List Box
+ * Copyright (C) 2005 Thomas Weidenmueller
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+/*
+ * PROJECT: ReactOS Column List Box
+ * FILE: lib/clb/clb.c
+ * PURPOSE: Column List Box
+ * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
+ *
+ * UPDATE HISTORY:
+ * 10/29/2005 Created
+ */
+#include <precomp.h>
+
+static HINSTANCE hDllInstance;
+
+static const WCHAR ClbClassName[] = L"ColumnListBox";
+static const WCHAR ClbColumns[] = L"Column1;Column2;Column3";
+
+typedef struct _CLB_PRIVATEDATA
+{
+ HWND hwnd;
+} CLB_PRIVATEDATA, *PCLB_PRIVATEDATA;
+
+static const CLBS_INFO ClbsSupportedStyles[] =
+{
+ {
+ CLBS_NOTIFY,
+ 0x0,
+ L"CLBS_NOTIFY"
+ },
+ {
+ CLBS_SORT,
+ 0x0,
+ L"CLBS_SORT"
+ },
+ {
+ CLBS_DISABLENOSCROLL,
+ 0x0,
+ L"CLBS_DISABLENOSCROLL"
+ },
+ {
+ CLBS_VSCROLL,
+ 0x0,
+ L"CLBS_VSCROLL"
+ },
+ {
+ CLBS_BORDER,
+ 0x0,
+ L"CLBS_BORDER"
+ },
+ {
+ CLBS_POPOUT_HEADINGS,
+ 0x0,
+ L"CLBS_POPOUT_HEADINGS"
+ },
+ {
+ CLBS_SPRINGLY_COLUMNS,
+ 0x0,
+ L"CLBS_SPRINGLY_COLUMNS"
+ },
+ {
+ LBS_OWNERDRAWFIXED,
+ 0x0,
+ L"LBS_OWNERDRAWFIXED"
+ }
+};
+
+/*
+ * @unimplemented
+ */
+DWORD
+WINAPI
+ClbAddData(IN DWORD Unknown1,
+ IN DWORD Unknown2,
+ IN DWORD Unknown3)
+{
+ DPRINT1("ClbAddData(0x%x, 0x%x, 0x%x)\n", Unknown1, Unknown2, Unknown3);
+ return 0;
+}
+
+
+/*
+ * @unimplemented
+ */
+DWORD
+WINAPI
+ClbSetColumnWidths(IN DWORD Unknown1,
+ IN DWORD Unknown2,
+ IN DWORD Unknown3)
+{
+ DPRINT1("ClbSetColumnWidths(0x%x, 0x%x, 0x%x)\n", Unknown1, Unknown2, Unknown3);
+ return 0;
+}
+
+
+/*
+ * @unimplemented
+ */
+LRESULT
+CALLBACK
+ClbWndProc(IN HWND hwnd,
+ IN UINT uMsg,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+{
+ PCLB_PRIVATEDATA PrivData;
+ LRESULT Ret = 0;
+
+ DPRINT1("ClbWndProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwnd, uMsg, wParam, lParam);
+
+ PrivData = (PCLB_PRIVATEDATA)GetWindowLongPtr(hwnd,
+ 0);
+ if (PrivData == NULL && uMsg != WM_CREATE)
+ {
+ goto HandleDefMsg;
+ }
+
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ PrivData = HeapAlloc(GetProcessHeap(),
+ 0,
+ sizeof(CLB_PRIVATEDATA));
+ if (PrivData == NULL)
+ {
+ Ret = (LRESULT)-1;
+ break;
+ }
+ PrivData->hwnd = hwnd;
+ break;
+
+ case WM_DESTROY:
+ HeapFree(GetProcessHeap(),
+ 0,
+ PrivData);
+ break;
+
+ default:
+HandleDefMsg:
+ Ret = DefWindowProc(hwnd,
+ uMsg,
+ wParam,
+ lParam);
+ break;
+ }
+
+ return Ret;
+}
+
+
+static INT_PTR CALLBACK
+ClbpStyleDlgProc(IN HWND hwndDlg,
+ IN UINT uMsg,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+{
+ INT_PTR Ret = FALSE;
+
+ DPRINT1("ClbpStyleDlgProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwndDlg, uMsg, wParam, lParam);
+
+ switch (uMsg)
+ {
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ case IDCANCEL:
+ EndDialog(hwndDlg,
+ (INT_PTR)LOWORD(wParam));
+ break;
+ }
+ break;
+
+ case WM_CLOSE:
+ EndDialog(hwndDlg,
+ IDCANCEL);
+ break;
+
+ case WM_INITDIALOG:
+ Ret = TRUE;
+ break;
+ }
+
+ return Ret;
+}
+
+
+/*
+ * @implemented
+ */
+INT_PTR
+WINAPI
+ClbStyleW(IN HWND hWndParent,
+ IN LPARAM dwInitParam)
+{
+ return DialogBoxParam(hDllInstance,
+ MAKEINTRESOURCE(IDD_COLUMNLISTBOXSTYLES),
+ hWndParent,
+ ClbpStyleDlgProc,
+ dwInitParam);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+CustomControlInfoW(OUT LPCUSTOM_CONTROL_INFO CustomControlInfo OPTIONAL)
+{
+ if (CustomControlInfo != NULL)
+ {
+ wcscpy(CustomControlInfo->ClassName,
+ ClbClassName);
+
+ CustomControlInfo->Zero1 = 0;
+
+ wcscpy(CustomControlInfo->ClassName2,
+ ClbClassName);
+
+ CustomControlInfo->Unknown1 = 0x60; /* FIXME - ??? */
+ CustomControlInfo->Unknown2 = 0x50; /* FIXME - ??? */
+ CustomControlInfo->Unknown3 = 0x50A10013; /* FIXME - ??? */
+
+ CustomControlInfo->Zero2 = 0;
+ CustomControlInfo->Zero3 = 0;
+
+ CustomControlInfo->StylesCount = sizeof(ClbsSupportedStyles) / sizeof(ClbsSupportedStyles[0]);
+ CustomControlInfo->SupportedStyles = ClbsSupportedStyles;
+
+ wcscpy(CustomControlInfo->Columns,
+ ClbColumns);
+
+ CustomControlInfo->ClbStyleW = ClbStyleW;
+
+ CustomControlInfo->Zero4 = 0;
+ CustomControlInfo->Zero5 = 0;
+ CustomControlInfo->Zero6 = 0;
+ }
+
+ return TRUE;
+}
+
+BOOL
+WINAPI
+DllMain(IN HINSTANCE hinstDLL,
+ IN DWORD dwReason,
+ IN LPVOID lpvReserved)
+{
+ BOOL Ret = TRUE;
+
+ switch (dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ WNDCLASS ClbWndClass;
+
+ hDllInstance = hinstDLL;
+
+ InitCommonControls();
+
+ /* register the control's window class */
+ ClbWndClass.style = CS_GLOBALCLASS | CS_OWNDC;
+ ClbWndClass.lpfnWndProc = ClbWndProc;
+ ClbWndClass.cbClsExtra = 0;
+ ClbWndClass.cbWndExtra = sizeof(PCLB_PRIVATEDATA);
+ ClbWndClass.hInstance = hinstDLL,
+ ClbWndClass.hIcon = NULL;
+ ClbWndClass.hCursor = LoadCursor(NULL,
+ (LPWSTR)IDC_ARROW);
+ ClbWndClass.hbrBackground = NULL;
+ ClbWndClass.lpszMenuName = NULL;
+ ClbWndClass.lpszClassName = ClbClassName;
+
+ if (!RegisterClass(&ClbWndClass))
+ {
+ Ret = FALSE;
+ break;
+ }
+ break;
+ }
+
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ break;
+
+ case DLL_PROCESS_DETACH:
+ UnregisterClass(ClbClassName,
+ hinstDLL);
+ break;
+ }
+ return Ret;
+}
+
--- /dev/null
+LIBRARY clb.dll
+
+EXPORTS
+ClbAddData@12 @1
+ClbSetColumnWidths@12 @2
+ClbStyleW@8 @3
+ClbWndProc@16 @4
+CustomControlInfoW@4 @5
+
+; EOF
--- /dev/null
+<module name="clb" type="win32dll" baseaddress="${BASEADDRESS_CLB}" installbase="system32" installname="clb.dll">
+ <importlibrary definition="clb.def" />
+ <include base="clb">.</include>
+ <define name="UNICODE" />
+ <define name="_UNICODE" />
+ <define name="__USE_W32API" />
+ <define name="_WIN32_IE">0x0500</define>
+ <define name="_WIN32_WINNT">0x0600</define>
+ <define name="WINVER">0x0600</define>
+ <library>ntdll</library>
+ <library>kernel32</library>
+ <library>user32</library>
+ <library>gdi32</library>
+ <library>comctl32</library>
+ <file>clb.c</file>
+ <file>clb.rc</file>
+ <pch>precomp.h</pch>
+</module>
--- /dev/null
+#include <windows.h>
+#include <reactos/resource.h>
+#include "resource.h"
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Column List Box\0"
+#define REACTOS_STR_INTERNAL_NAME "clb\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "clb.dll\0"
+#include <reactos/version.rc>
+
+#include "clb_En.rc"
+#include "clb_Ja.rc"
--- /dev/null
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDD_COLUMNLISTBOXSTYLES DIALOGEX 0, 0, 227, 215
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Column List Box Styles"
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ GROUPBOX "Column List Box Styles", -1, 6, 7, 158, 71
+ CHECKBOX "&Standard", 1710, 10, 20, 42, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Border", 1713, 10, 30, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "S&ort", 1705, 10, 40, 26, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "Notif&y", 1706, 10, 50, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "V&ert. Scroll Bar", 1707, 10, 60, 64, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Multiple Selection", -1, 79, 20, 72, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED
+ CHECKBOX "E&xtended Selection", -1, 79, 30, 77, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED
+ CHECKBOX "&Popout Headings", 1714, 79, 40, 68, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Springy Columns", 1715, 79, 50, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ GROUPBOX "Basic Styles", -1, 6, 80, 158, 34
+ CHECKBOX "&Visible", 1701, 10, 92, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Disabled", 1702, 10, 102, 41, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Group", 1703, 79, 92, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Tab Stop", 1704, 79, 102, 44, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "OK", IDOK, 37, 125, 40, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Cancel", IDCANCEL, 93, 125, 40, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP
+ CHECKBOX "&Disable No-Scroll", 1708, 79, 60, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+END
+
--- /dev/null
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+
+IDD_COLUMNLISTBOXSTYLES DIALOGEX 0, 0, 227, 215
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "\97ñ\83\8a\83X\83g \83{\83b\83N\83X\82Ì\8c`\8e®"
+FONT 9, "MS UI Gothic", 0, 0, 0x0
+BEGIN
+ GROUPBOX "\97ñ\83\8a\83X\83g \83{\83b\83N\83X\82Ì\8c`\8e®", -1, 6, 7, 158, 71
+ CHECKBOX "\95W\8f\80(&S)", 1710, 10, 20, 42, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\8b«\8aE\90ü(&B)", 1713, 10, 30, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\95À\82×\91Ö\82¦(&O)", 1705, 10, 40, 26, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\92Ê\92m(&Y)", 1706, 10, 50, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\90\82\92¼\83X\83N\83\8d\81[\83\8b \83o\81[(&E)", 1707, 10, 60, 64, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\95¡\90\94\91I\91ð(&M)", -1, 79, 20, 72, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED
+ CHECKBOX "\8ag\92£\91I\91ð(&X)", -1, 79, 30, 77, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED
+ CHECKBOX "\83|\83b\83v\83A\83E\83g\8c©\8fo\82µ(&P)", 1714, 79, 40, 68, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\83o\83l\8e®\82Ì\97ñ(&S)", 1715, 79, 50, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ GROUPBOX "\8aî\96{\8c`\8e®", -1, 6, 80, 158, 34
+ CHECKBOX "\89Â\8e\8b(&V)", 1701, 10, 92, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\96³\8cø(&D)", 1702, 10, 102, 41, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\83O\83\8b\81[\83v(&G)", 1703, 79, 92, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\83^\83u\95\9d(&T)", 1704, 79, 102, 44, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "OK", IDOK, 37, 125, 40, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "\83L\83\83\83\93\83Z\83\8b", IDCANCEL, 93, 125, 40, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP
+ CHECKBOX "\94ñ\83X\83N\83\8d\81[\83\8b\82Ì\96³\8cø(&D)", 1708, 79, 60, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
+END
+
--- /dev/null
+#ifndef __CLBDLL_H
+#define __CLBDLL_H
+
+#define CLBS_NOTIFY 0x1
+#define CLBS_SORT 0x2
+#define CLBS_DISABLENOSCROLL 0x1000
+#define CLBS_VSCROLL 0x200000
+#define CLBS_BORDER 0x800000
+#define CLBS_POPOUT_HEADINGS 0x200
+#define CLBS_SPRINGLY_COLUMNS 0x0
+
+typedef struct _CLBS_INFO
+{
+ DWORD Style;
+ DWORD Unknown; /* FIXME - ExStyle??? */
+ LPCWSTR StyleName;
+} CLBS_INFO, *LPCLBS_INFO;
+
+typedef struct _CUSTOM_CONTROL_INFO
+{
+ WCHAR ClassName[32];
+ DWORD Zero1; /* sizeof(DWORD) or sizeof(PVOID)? */
+ WCHAR ClassName2[32];
+ DWORD Unknown1; /* FIXME - size correct? */
+ DWORD Unknown2; /* FIXME - size correct? */
+ DWORD Unknown3; /* FIXME - size correct? */
+ DWORD Zero2; /* FIXME - size correct? */
+ DWORD Zero3; /* FIXME - size correct? */
+ DWORD StylesCount;
+ const CLBS_INFO *SupportedStyles;
+ WCHAR Columns[256];
+ INT_PTR (WINAPI *ClbStyleW)(IN HWND hWndParent,
+ IN LPARAM dwInitParam);
+ DWORD Zero4; /* FIXME - size correct? */
+ DWORD Zero5; /* FIXME - size correct? */
+ DWORD Zero6; /* FIXME - size correct? */
+} CUSTOM_CONTROL_INFO, *LPCUSTOM_CONTROL_INFO;
+
+LRESULT CALLBACK ClbWndProc(HWND,UINT,WPARAM,LPARAM);
+INT_PTR WINAPI ClbStyleW(HWND,LPARAM);
+BOOL WINAPI CustomControlInfoW(LPCUSTOM_CONTROL_INFO);
+
+#endif /* __CLBDLL_H */
--- /dev/null
+#include <windows.h>
+#include <commctrl.h>
+#include <clbdll.h>
+
+#include "resource.h"
+
+ULONG DbgPrint(PCH Format,...);
+#define DPRINT1 DbgPrint
+
+/* EOF */
--- /dev/null
+#ifndef __CLB_RESOURCE_H
+#define __CLB_RESOURCE_H
+
+#define IDD_COLUMNLISTBOXSTYLES 1700
+
+#endif /* __CLB_RESOURCE_H */
<file>regedit.rc</file>
<pch>regedit.h</pch>
</module>
+<directory name="clb">
+ <xi:include href="clb/clb.rbuild" />
+</directory>
\ No newline at end of file