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) {
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);
return TRUE;
case WM_COMMAND:
@ -75,16 +82,33 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
case IDOK:
if ((hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA))) {
if ((len = GetWindowTextLength(hwndValue))) {
if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR)))) {
stringValueData = valueData;
if (!GetWindowText(hwndValue, stringValueData, len + 1))
*stringValueData = 0;
if(stringValueData)
{
if ((valueData = HeapReAlloc(GetProcessHeap(), 0, stringValueData, (len + 1) * sizeof(TCHAR)))) {
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:
EndDialog(hwndDlg, wParam);
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
}
}
@ -103,23 +127,41 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
editValueName = valueName;
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) {
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
}
if ( (type == REG_SZ) || (type == REG_EXPAND_SZ) ) {
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen))) {
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;
if(valueDataLen > 0)
{
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);
if (lRet != ERROR_SUCCESS) {
error(hwnd, IDS_BAD_VALUE, valueName);
goto done;
else
{
stringValueData = NULL;
}
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;
}
} else if ( type == REG_DWORD ) {
@ -129,7 +171,8 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
}
done:
HeapFree(GetProcessHeap(), 0, stringValueData);
if(stringValueData)
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = NULL;
return result;

View file

@ -41,7 +41,7 @@ typedef struct tagLINE_INFO
LPTSTR name;
void* val;
size_t val_len;
} LINE_INFO;
} LINE_INFO, *PLINE_INFO;
/*******************************************************************************
* Global and Local Variables:
@ -60,6 +60,8 @@ LPCTSTR GetValueName(HWND hwndLV)
{
int item, len, maxLen;
LPTSTR newStr;
LVITEM LVItem;
PLINE_INFO lineinfo;
if (!g_valueName) g_valueName = HeapAlloc(GetProcessHeap(), 0, 1024);
if (!g_valueName) return NULL;
@ -70,13 +72,21 @@ LPCTSTR GetValueName(HWND hwndLV)
item = ListView_GetNextItem(hwndLV, -1, LVNI_FOCUSED);
if (item == -1) return NULL;
do {
ListView_GetItemText(hwndLV, item, 0, g_valueName, maxLen);
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;
LVItem.mask = LVIF_PARAM;
LVItem.iItem = item;
if(ListView_GetItem(hwndLV, &LVItem))
{
lineinfo = (PLINE_INFO)LVItem.lParam;
g_valueName = lineinfo->name;
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);
return g_valueName;
@ -327,33 +337,9 @@ static LRESULT CALLBACK ListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR
ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
break;
case NM_DBLCLK: {
NMITEMACTIVATE* nmitem = (LPNMITEMACTIVATE)lParam;
LVHITTESTINFO info;
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)) {}
}
case NM_DBLCLK:
{
SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
}
break;