Hallo zusammen,
ich kompilierte ein kleines Listviewprogramm(siehe unten) mit LCC-WIN32 und ich will ein inplaceediting einfügen .
doch das klappt nur mit der ersten Spalte.
Wie kann ich nun die Einträge der zweiten spalte bearbeiten ohne eine zusätzliche DialogBox?
Danke im Voraus
joerg
[email protected]
// listview.c-----------------------------------------
// *************************************************************
// Created with BCX – The BASIC To C Translator (ver 2.81)
// BCX © 1999, 2000, 2001, 2002 by Kevin Diggins
// *************************************************************
#include // Win32 Header File
#include // Win32 Header File
#include // Win32 Header File
#include // Win32 Header File
#include // Win32 Header File
#include
#include
#include
#include
#include
#include
#include „resource.h“ //js
// *************************************************
// User Defined Constants
// *************************************************
#define CaptionName1 „ListViewBeispiel“
#define ClassName1 „BCX_LV“
#define ID_hListView 101
// *************************************************
// User Global Variables
// *************************************************
static int BCX_GetDiaUnit;
static int LV_Breite;
static int LV_Hoehe;
static int FensterBreite;
static int FensterHoehe;
static HWND hListView,hFormular;
static LV_COLUMN lvUeberschrift;
static LV_ITEM lvEintrag;
// *************************************************
// User Data Statements
// *************************************************
char * DATA [] =
{
„Jimmy“,„Page“, „Steve“,„Vai“,
„Jimi“,„Hendrix“, „Jan“,„Hammer“,
„Jeff“,„Beck“, „Jerry“,„Garcia“,
„Joe“,„Satriani“, „Eric“,„Johnson“,
„Yngwie“,„Mahlsteen“,„Neil“,„Young“,
„John“,„Lennon“, „Eric“,„Clapton“,
„EOD“,
};
// *************************************************
// User’s Prototypes
// *************************************************
int MakeListView (HWND, HINSTANCE);
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void CenterWindow (HWND);
void FormLoad (HWND);
// *************************************************
// User Subs and Functions
// *************************************************
int MakeListView (HWND hWnd, HINSTANCE hInst)
{
// -----------------------------
static int i;
static int lvStyle;
// -----------------------------
hListView=CreateWindowEx(lvStyle,„SysListView32“,"",WS_CHILD|WS_TABSTOP|WS_VISIBLE|0x241|WS_BORDER,13*FensterBreite,15*FensterHoehe,110*FensterBreite,70*FensterHoehe,hWnd,(HMENU)ID_hListView,hInst,NULL);
SendMessage(hListView,(UINT)WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),(LPARAM)0);
lvStyle=LVS_EX_GRIDLINES/*LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES */| LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE;
SendMessage(hListView,(UINT)LVM_SETEXTENDEDLISTVIEWSTYLE,(WPARAM)0,(LPARAM)lvStyle);
lvUeberschrift.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
lvUeberschrift.fmt=LVCFMT_LEFT;
lvUeberschrift.cx=100;
lvUeberschrift.pszText=„Vorname“;
lvUeberschrift.iSubItem=0;
ListView_InsertColumn(hListView,0,&lvUeberschrift);
lvUeberschrift.cx=100;
lvUeberschrift.pszText=„Nachname“;
lvUeberschrift.iSubItem=1;
ListView_InsertColumn(hListView,1,&lvUeberschrift);
lvEintrag.mask=LVIF_TEXT;
while(strcmp(DATA[i],„EOD“)!=0)
{
lvEintrag.pszText=DATA[i];
lvEintrag.iSubItem=0;
ListView_InsertItem(hListView,&lvEintrag);
i++;
lvEintrag.pszText=DATA[i];
lvEintrag.iSubItem=1;
ListView_SetItem(hListView,&lvEintrag);
i++;
}
// ====================================================================
// Un-Comment to autosize the columns, accounting for column headings
// ====================================================================
ListView_SetColumnWidth(hListView,0,LVSCW_AUTOSIZE_USEHEADER);
ListView_SetColumnWidth(hListView,1,LVSCW_AUTOSIZE_USEHEADER);
// ====================================================================
ListView_SetTextColor(hListView,RGB(0,128,0));
InvalidateRect(hListView,0,1);
return i;
}
//---------------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine, int CmdShow)
{
static WNDCLASSEX Wc;
memset(&Wc,0,sizeof(Wc));
static MSG Msg;
memset(&Msg,0,sizeof(Msg));
Wc.cbSize = sizeof(WNDCLASSEX);
Wc.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
Wc.lpfnWndProc=WndProc;
Wc.cbClsExtra=0;
Wc.cbWndExtra=0;
Wc.hInstance=hInst;
Wc.hIcon=LoadIcon(hInst,„JSICON“);
Wc.hCursor=LoadCursor(NULL,IDC_ARROW);
Wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
Wc.lpszMenuName=„MYMENU“;
Wc.lpszClassName=ClassName1;
Wc.hIconSm = Wc.hIcon;
RegisterClassEx(&Wc);
InitCommonControls();
FormLoad(hInst);
// ******************[This Message Pump Allows Tabbing]******************
while(GetMessage(&Msg,NULL,0,0))
{
if(!IsWindow(hFormular)||!IsDialogMessage(hFormular,&Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
return Msg.wParam;
//-------------------------------------------------------------------------
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
int iSelected;
LV_DISPINFO *lvinfo;
char buf[64];
static HWND hEdit;
switch(Msg)
{
case WM_NOTIFY:
if ((int)wParam == ID_hListView) { //Menü wurde angeklickt
lvinfo = (LV_DISPINFO *)lParam;
switch (lvinfo->hdr.code) {
case LVN_BEGINLABELEDIT:
hEdit = ListView_GetEditControl(hListView);
break;
case LVN_ENDLABELEDIT:
GetWindowText(hEdit, buf, sizeof(buf));
ListView_SetItemText(hListView, lvinfo->item.iItem, 0, buf);
break;
case LVN_COLUMNCLICK:
SendMessage(hListView,LVM_SORTITEMS,0,0L);
break;
case NM_DBLCLK: // editieren
SendMessage(hWnd,WM_COMMAND,IDM_EDIT,0);
break;
}
}
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDM_DELALL: // alle Einträge löschen
ListView_DeleteAllItems(hListView);
break;
case IDM_EDIT:
iSelected = ListView_GetNextItem(hListView, -1, /*LVNI_ALL | */LVNI_SELECTED);//Zeilennummer
ListView_EditLabel(hListView, iSelected);
break;
case IDM_SORT:
SendMessage(hListView,LVM_SORTITEMS,0,0L);
break;
case IDM_END:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
return 0L;
}
//----------------------------------------------------------------------------
void CenterWindow (HWND hWnd)
{
static RECT wRect;
memset(&wRect,0,sizeof(wRect));
static DWORD x,y;
memset(&x,0,sizeof(x));
memset(&y,0,sizeof(y));
GetWindowRect(hWnd,&wRect);
x=(GetSystemMetrics(SM_CXSCREEN)-(wRect.right-wRect.left))/2;
y=(GetSystemMetrics(SM_CYSCREEN)-(wRect.bottom-wRect.top+GetSystemMetrics(SM_CYCAPTION)))/2;
SetWindowPos(hWnd,NULL,x,y,0,0,SWP_NOSIZE|SWP_NOZORDER);
}
//----------------------------------------------------------------------------
void FormLoad (HWND hInst)
{
// **************************************************************************
// Scale Dialog Units To Screen Units
// **************************************************************************
BCX_GetDiaUnit=GetDialogBaseUnits();
LV_Breite=LOWORD(BCX_GetDiaUnit);
LV_Hoehe=HIWORD(BCX_GetDiaUnit);
FensterBreite=LV_Breite/2;
FensterHoehe=LV_Hoehe/4;
// **************************************************************************
hFormular=CreateWindow(ClassName1,CaptionName1,DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU,0,0,140*FensterBreite,115*FensterHoehe,NULL,(HMENU)NULL,hInst,NULL);
// **************************************************************************
MakeListView(hFormular,hInst);
CenterWindow(hFormular);
UpdateWindow(hFormular);
ShowWindow(hFormular,1);
}
//----------------------------------------------------------------------------eof
/////////////////////////////////////////////////////////////////////////////
//listview.rc
// Menu
#include
#include „resource.h“
JSICON ICON DISCARDABLE „js.ico“
//------------------------------------------------------
MYMENU MENU DISCARDABLE
BEGIN
POPUP „&Datei“
BEGIN
MENUITEM „&Ende“, IDM_END
END
POPUP „Listview“
BEGIN
MENUITEM „Eintrag &bearbeiten“, IDM_EDIT
MENUITEM „&alles löschen“, IDM_DELALL
MENUITEM „&sortieren“, IDM_SORT
END
END
//----------------------------------------------------------------------------eof
//resource.h
#include
#define IDM_END 1000
#define IDM_EDIT 1009
#define IDM_SORT 1015
#define IDM_DELALL 10074
//----------------------------------------------------------------------------eof
;mk.bat :
lrc listview.rc
lcc -A -g5 listview.c
lcclnk -subsystem windows listview.obj listview.res