mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 23:14:53 +00:00
fixed changing of string values
svn path=/trunk/; revision=7386
This commit is contained in:
parent
3a7d842ffb
commit
f5f5b2ebc8
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue