Схватил сегодня интерстный глюк. Хранит моя программа настройки в реестре. Все хорошо, только при перезагрузке все вновь созданные ключи исчезают. Как это я так ухитрился? Причем глюк не только на моей машине! Что не так?
| Код | #define _WIN32_WINNT 0x0500 #include <windows.h> #include <stdio.h> #include <commctrl.h> #include "resource.h"
#pragma comment(lib, "comctl32.lib") #pragma comment(lib, "gdi32.lib")
#define MAX_STRLEN 50 #define APPNAME "NewApp"
bool bIsSprtBlnkn;
HWND hMainWnd; HINSTANCE hInst; INITCOMMONCONTROLSEX icex; int iL = 10; int iT = 20; int iW = 160; int iH = 200; int iClH = 115; char sMsg[MAX_STRLEN]; //An error messages char sMsg2[MAX_STRLEN];
LONG WINAPI MainWndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);
void SaveSettings(HWND hWnd); void LoadSettings(HWND hWnd);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { LoadSettings(NULL); WNDCLASS wnd; hInst = hInstance; memset(&wnd, 0, sizeof(wnd)); wnd.hbrBackground = CreateSolidBrush(RGB(255, 255, 255)); wnd.hCursor = LoadCursor(NULL, IDC_ARROW); wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION); wnd.hInstance = hInst; wnd.lpfnWndProc = MainWndProc; wnd.lpszClassName = APPNAME; if (!RegisterClass(&wnd)) { return 1; }
hMainWnd = CreateWindow(APPNAME, "", WS_OVERLAPPEDWINDOW, iL, iT, iW, iH, NULL, NULL, hInst, NULL); if (!hMainWnd) { return 1; } ShowWindow(hMainWnd, nCmdShow); UpdateWindow(hMainWnd);
MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.lParam; }
LONG WINAPI MainWndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, wPar, lPar); } return 0; }
VOID SetSettings() { bIsSprtBlnkn = true; }
void SaveSettings(HWND hWnd) { HKEY hKey; DWORD data; char cName[1024]; sprintf(cName,"%s%s", "Software\\", APPNAME); if (RegOpenKeyEx(HKEY_CURRENT_USER, cName, 0,0, &hKey)!=ERROR_SUCCESS) if (RegCreateKeyEx(HKEY_CURRENT_USER, cName, 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)!=ERROR_SUCCESS) { MessageBox(hMainWnd, "Error", "", MB_OK|MB_ICONERROR); } else { data = (DWORD)bIsSprtBlnkn; RegSetValueEx(hKey, "bIsSprtBlnkn", 0, REG_DWORD, (BYTE*)&data, sizeof(DWORD)); } RegCloseKey(hKey); }
void LoadSettings(HWND hWnd) { HKEY hKey; DWORD data; DWORD dwType; DWORD dwSize; char cName[1024]; sprintf(cName,"%s%s\\", "Software\\", APPNAME); if (RegOpenKeyEx(HKEY_CURRENT_USER, cName, 0, KEY_READ, &hKey)!=ERROR_SUCCESS) { MessageBox(hMainWnd, "Error", "", MB_OK|MB_ICONERROR); SetSettings(); SaveSettings(NULL); } else { dwSize = sizeof(data); RegQueryValueEx(hKey, "bIsSprtBlnkn", 0, &dwType, (BYTE*)&data, &dwSize); bIsSprtBlnkn = (BOOL)data; } RegCloseKey(hKey); }
| |