⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freeze.cpp

📁 plc软件的源代码 支持PIC ATMEGA单片机
💻 CPP
字号:
/*
 * A library for storing parameters in the registry.
 *
 * Jonathan Westhues, 2002
 */
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

/*
 * store a window's position in the registry, or fail silently if the registry calls don't work
 */
void FreezeWindowPosF(HWND hwnd, char *subKey, char *name)
{
    RECT r;
    GetWindowRect(hwnd, &r);

    HKEY software;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
        return;

    char *keyName = (char *)malloc(strlen(name) + 30);
    if(!keyName)
        return;

    HKEY sub;
    if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_left", name);
    if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.left), sizeof(DWORD)) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_right", name);
    if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.right), sizeof(DWORD)) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_top", name);
    if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.top), sizeof(DWORD)) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_bottom", name);
    if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.bottom), sizeof(DWORD)) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_maximized", name);
    DWORD v = IsZoomed(hwnd);
    if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(v), sizeof(DWORD)) != ERROR_SUCCESS)
        return;

    free(keyName);
}

/*
 * retrieve a window's position from the registry, or do nothing if there is no info saved
 */
void ThawWindowPosF(HWND hwnd, char *subKey, char *name)
{
    HKEY software;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
        return;

    HKEY sub;
    if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS)
        return;

    char *keyName = (char *)malloc(strlen(name) + 30);
    if(!keyName)
        return;

    DWORD l;
    RECT  r;

    sprintf(keyName, "%s_left", name);
    l = sizeof(DWORD);
    if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.left), &l) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_right", name);
    l = sizeof(DWORD);
    if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.right), &l) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_top", name);
    l = sizeof(DWORD);
    if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.top), &l) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_bottom", name);
    l = sizeof(DWORD);
    if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.bottom), &l) != ERROR_SUCCESS)
        return;

    sprintf(keyName, "%s_maximized", name);
    DWORD v;
    l = sizeof(DWORD);
    if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS)
        return;
    if(v)
        ShowWindow(hwnd, SW_MAXIMIZE);

    MoveWindow(hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);

    free(keyName);
}

/*
 * store a DWORD setting in the registry
 */
void FreezeDWORDF(DWORD val, char *subKey, char *name)
{
    HKEY software;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
        return;

    HKEY sub;
    if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS)
        return;
  
    if(RegSetValueEx(sub, name, 0, REG_DWORD, (BYTE *)&val, sizeof(DWORD)) != ERROR_SUCCESS)
        return;
}

/*
 * retrieve a DWORD setting, or return the default if that setting is unavailable
 */
DWORD ThawDWORDF(DWORD val, char *subKey, char *name)
{
    HKEY software;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
        return val;

    HKEY sub;
    if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS)
        return val;

    DWORD l = sizeof(DWORD);
    DWORD v;
    if(RegQueryValueEx(sub, name, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS)
        return val;

    return v;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -