fixed changing of string values

svn path=/trunk/; revision=7386
This commit is contained in:
Thomas Bluemel 2004-01-01 16:45:26 +00:00
parent 3a7d842ffb
commit f5f5b2ebc8
2 changed files with 80 additions and 51 deletions

View file

@ -67,7 +67,14 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
switch(uMsg) { switch(uMsg) {
case WM_INITDIALOG: case WM_INITDIALOG:
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName); if(editValueName && strcmp(editValueName, _T("")))
{
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
}
else
{
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, _T("(Default)"));
}
SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData); SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
return TRUE; return TRUE;
case WM_COMMAND: case WM_COMMAND:
@ -75,16 +82,33 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
case IDOK: case IDOK:
if ((hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA))) { if ((hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA))) {
if ((len = GetWindowTextLength(hwndValue))) { if ((len = GetWindowTextLength(hwndValue))) {
if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR)))) { if(stringValueData)
stringValueData = valueData; {
if (!GetWindowText(hwndValue, stringValueData, len + 1)) if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR)))) {
*stringValueData = 0; stringValueData = valueData;
if (!GetWindowText(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
}
else
{
if ((valueData = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(TCHAR)))) {
stringValueData = valueData;
if (!GetWindowText(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
}
} }
} }
else
{
if(stringValueData)
*stringValueData = 0;
}
} }
/* Fall through */ EndDialog(hwndDlg, IDOK);
break;
case IDCANCEL: case IDCANCEL:
EndDialog(hwndDlg, wParam); EndDialog(hwndDlg, IDCANCEL);
return TRUE; return TRUE;
} }
} }
@ -103,23 +127,41 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
editValueName = valueName; editValueName = valueName;
lRet = RegQueryValueEx(hKey, valueName, 0, &type, 0, &valueDataLen); lRet = RegQueryValueEx(hKey, valueName, 0, &type, 0, &valueDataLen);
if(lRet != ERROR_SUCCESS && (!strcmp(valueName, _T("")) || valueName == NULL))
{
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
type = REG_SZ;
valueDataLen = 0;
stringValueData = NULL;
}
if (lRet != ERROR_SUCCESS) { if (lRet != ERROR_SUCCESS) {
error(hwnd, IDS_BAD_VALUE, valueName); error(hwnd, IDS_BAD_VALUE, valueName);
goto done; goto done;
} }
if ( (type == REG_SZ) || (type == REG_EXPAND_SZ) ) { if ( (type == REG_SZ) || (type == REG_EXPAND_SZ) ) {
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen))) { if(valueDataLen > 0)
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen); {
goto done; if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen))) {
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
}
lRet = RegQueryValueEx(hKey, valueName, 0, 0, stringValueData, &valueDataLen);
if (lRet != ERROR_SUCCESS) {
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
} }
lRet = RegQueryValueEx(hKey, valueName, 0, 0, stringValueData, &valueDataLen); else
if (lRet != ERROR_SUCCESS) { {
error(hwnd, IDS_BAD_VALUE, valueName); stringValueData = NULL;
goto done;
} }
if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_STRING), hwnd, modify_string_dlgproc) == IDOK) { if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_STRING), hwnd, modify_string_dlgproc) == IDOK) {
lRet = RegSetValueEx(hKey, valueName, 0, type, stringValueData, lstrlen(stringValueData) + 1); if(stringValueData)
lRet = RegSetValueEx(hKey, valueName, 0, type, stringValueData, lstrlen(stringValueData) + 1);
else
lRet = RegSetValueEx(hKey, valueName, 0, type, NULL, 0);
if (lRet == ERROR_SUCCESS) result = TRUE; if (lRet == ERROR_SUCCESS) result = TRUE;
} }
} else if ( type == REG_DWORD ) { } else if ( type == REG_DWORD ) {
@ -129,7 +171,8 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
} }
done: done:
HeapFree(GetProcessHeap(), 0, stringValueData); if(stringValueData)
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = NULL; stringValueData = NULL;
return result; return result;

View file

@ -41,7 +41,7 @@ typedef struct tagLINE_INFO
LPTSTR name; LPTSTR name;
void* val; void* val;
size_t val_len; size_t val_len;
} LINE_INFO; } LINE_INFO, *PLINE_INFO;
/******************************************************************************* /*******************************************************************************
* Global and Local Variables: * Global and Local Variables:
@ -60,6 +60,8 @@ LPCTSTR GetValueName(HWND hwndLV)
{ {
int item, len, maxLen; int item, len, maxLen;
LPTSTR newStr; LPTSTR newStr;
LVITEM LVItem;
PLINE_INFO lineinfo;
if (!g_valueName) g_valueName = HeapAlloc(GetProcessHeap(), 0, 1024); if (!g_valueName) g_valueName = HeapAlloc(GetProcessHeap(), 0, 1024);
if (!g_valueName) return NULL; if (!g_valueName) return NULL;
@ -70,13 +72,21 @@ LPCTSTR GetValueName(HWND hwndLV)
item = ListView_GetNextItem(hwndLV, -1, LVNI_FOCUSED); item = ListView_GetNextItem(hwndLV, -1, LVNI_FOCUSED);
if (item == -1) return NULL; if (item == -1) return NULL;
do { do {
ListView_GetItemText(hwndLV, item, 0, g_valueName, maxLen); LVItem.mask = LVIF_PARAM;
len = _tcslen(g_valueName); LVItem.iItem = item;
if (len < maxLen - 1) break; if(ListView_GetItem(hwndLV, &LVItem))
newStr = HeapReAlloc(GetProcessHeap(), 0, g_valueName, maxLen * 2); {
if (!newStr) return NULL; lineinfo = (PLINE_INFO)LVItem.lParam;
g_valueName = newStr; g_valueName = lineinfo->name;
maxLen *= 2; len = _tcslen(g_valueName);
if (len < maxLen - 1) break;
newStr = HeapReAlloc(GetProcessHeap(), 0, g_valueName, maxLen * 2);
if (!newStr) return NULL;
g_valueName = newStr;
maxLen *= 2;
}
else
break;
} while (TRUE); } while (TRUE);
return g_valueName; return g_valueName;
@ -327,33 +337,9 @@ static LRESULT CALLBACK ListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR
ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd); ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
break; break;
case NM_DBLCLK: { case NM_DBLCLK:
NMITEMACTIVATE* nmitem = (LPNMITEMACTIVATE)lParam; {
LVHITTESTINFO info; SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
if (nmitem->hdr.hwndFrom != hWnd) break;
/* if (nmitem->hdr.idFrom != IDW_LISTVIEW) break; */
/* if (nmitem->hdr.code != ???) break; */
#ifdef _MSC_VER
switch (nmitem->uKeyFlags) {
case LVKF_ALT: /* The ALT key is pressed. */
/* properties dialog box ? */
break;
case LVKF_CONTROL: /* The CTRL key is pressed. */
/* run dialog box for providing parameters... */
break;
case LVKF_SHIFT: /* The SHIFT key is pressed. */
break;
}
#endif
info.pt.x = nmitem->ptAction.x;
info.pt.y = nmitem->ptAction.y;
if (ListView_HitTest(hWnd, &info) != -1) {
LVITEM item;
item.mask = LVIF_PARAM;
item.iItem = info.iItem;
if (ListView_GetItem(hWnd, &item)) {}
}
} }
break; break;