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

📄 setupreg.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 * PROJECT:         ReactOS International Control Panel
 * LICENSE:         GPL - See COPYING in the top level directory
 * FILE:            dll/cpl/intl/setupreg.c
 * PURPOSE:         ReactOS International Control Panel
 * PROGRAMMERS:     Alexey Zavyalov (gen_x@mail.ru)
*/
 
/* INCLUDES *****************************************************************/

#include <windows.h>
#include <commctrl.h>
#include <cpl.h>

#include "intl.h"
#include "resource.h"

/* GLOBALS ******************************************************************/

#define NUM_SHEETS           4

/* FUNCTIONS ****************************************************************/

/* Insert the space  */
WCHAR*
InsSpacePos(const WCHAR *wszInsStr, const int nPos)
{
	WCHAR* pwszDestStr;
	pwszDestStr=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE);
    
    int nDestStrCnt=0;
    int nStrCnt;
    int nStrSize;

	wcscpy(pwszDestStr,wszInsStr);  
    
    nStrSize = wcslen(wszInsStr);

    for(nStrCnt=0; nStrCnt<nStrSize; nStrCnt++)
    {
        if(nStrCnt==nStrSize-nPos)
        {
            pwszDestStr[nDestStrCnt]=' ';
            nDestStrCnt++;
        }
        pwszDestStr[nDestStrCnt]=wszInsStr[nStrCnt];
        nDestStrCnt++;
    }
    pwszDestStr[nDestStrCnt]='\0';
    
    return pwszDestStr;
}

/* Insert the spaces by format string separated by ';' */
WCHAR*
InsSpacesFmt(const WCHAR *wszSourceStr, const WCHAR *wszFmtStr)
{
	WCHAR* pwszDestStr;
	pwszDestStr=(WCHAR*) malloc(255);

 	WCHAR* pwszTempStr;

    WCHAR wszFmtVal[255];

	int nFmtCount=0;
	int nValCount=0;
    int nLastVal=0;
    int nSpaceOffset=0;
    
    BOOL wasNul=FALSE;

	wcscpy(pwszDestStr,wszSourceStr);

    /* if format is clean return source string */
    if(!*wszFmtStr) return pwszDestStr;

    /* Search for all format values */
    for(nFmtCount=0;nFmtCount<=(int)wcslen(wszFmtStr);nFmtCount++)
    {
        if(wszFmtStr[nFmtCount]==';' || wszFmtStr[nFmtCount]=='\0')
        {
            if(_wtoi(wszFmtVal)==0 && !wasNul)
            {
                wasNul=TRUE;
                break;
            }
            /* If was 0, repeat spaces */
            if(wasNul)
            {
                nSpaceOffset+=nLastVal;
            }
            else
            {
                nSpaceOffset+=_wtoi(wszFmtVal);
            }
            wszFmtVal[nValCount]='\0';
            nValCount=0;
            /* insert space to finded position plus all pos before */
            pwszTempStr=InsSpacePos(pwszDestStr,nSpaceOffset);
            wcscpy(pwszDestStr,pwszTempStr);
            free(pwszTempStr);
            /* num of spaces total increment */

            if(!wasNul)
            {
                nSpaceOffset++;
                nLastVal=_wtoi(wszFmtVal);
            }
              
        }
        else
        {
            wszFmtVal[nValCount++]=wszFmtStr[nFmtCount];
        }
    }

    /* Create spaces for rest part of string */
    if(wasNul && nLastVal!=0)
    {
        for(nFmtCount=nSpaceOffset+nLastVal;nFmtCount<wcslen(pwszDestStr);nFmtCount+=nLastVal+1)
        {
            pwszTempStr=InsSpacePos(pwszDestStr,nFmtCount);
            wcscpy(pwszDestStr,pwszTempStr);
            free(pwszTempStr);
        }
    }

    return pwszDestStr;
}

/* Replace given template in source string with string to replace and return recieved string */
WCHAR*
ReplaceSubStr(const WCHAR *wszSourceStr,
              const WCHAR *wszStrToReplace,
              const WCHAR *wszTempl)
{
	int nCharCnt;
	int nSubStrCnt;
	int nDestStrCnt;
    int nFirstCharCnt;

	WCHAR* wszDestStr;
	wszDestStr=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE*sizeof(WCHAR));

	nDestStrCnt=0;
    nFirstCharCnt=0;

    wcscpy(wszDestStr,L"");

    while(nFirstCharCnt<(int)wcslen(wszSourceStr))
	{
        if(wszSourceStr[nFirstCharCnt]==wszTempl[0])
        {
            nSubStrCnt=0;
            for(nCharCnt=nFirstCharCnt;nCharCnt<nFirstCharCnt+(int)wcslen(wszTempl);nCharCnt++)
            {
                if(wszSourceStr[nCharCnt]==wszTempl[nSubStrCnt])
                {
                    nSubStrCnt++;
                }
                else
                {
                    break;
                }
                if((int)wcslen(wszTempl)==nSubStrCnt)
                {
                    wcscat(wszDestStr,wszStrToReplace);
                    nDestStrCnt=(int)wcslen(wszDestStr);
                    nFirstCharCnt+=(int)wcslen(wszTempl)-1;
                    break;
                }
            }
        }
        else 
        {
            wszDestStr[nDestStrCnt++]=wszSourceStr[nFirstCharCnt];
            wszDestStr[nDestStrCnt]='\0';
        }
        nFirstCharCnt++;
	}

	return wszDestStr;
}

static
VOID
InitPropSheetPage(PROPSHEETPAGE *PsPage, WORD IdDlg, DLGPROC DlgProc)
{
    ZeroMemory(PsPage, sizeof(PROPSHEETPAGE));
    PsPage->dwSize = sizeof(PROPSHEETPAGE);
    PsPage->dwFlags = PSP_DEFAULT;
    PsPage->hInstance = hApplet;
    PsPage->pszTemplate = MAKEINTRESOURCE(IdDlg);
    PsPage->pfnDlgProc = DlgProc;
}

/* Create applets */
LONG
APIENTRY
SetupApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam)
{

    PROPSHEETPAGE PsPage[NUM_SHEETS];
    PROPSHEETHEADER psh;
    TCHAR Caption[MAX_STR_SIZE];

    UNREFERENCED_PARAMETER(lParam);
    UNREFERENCED_PARAMETER(wParam);
    UNREFERENCED_PARAMETER(uMsg);
    UNREFERENCED_PARAMETER(hwnd);

    LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));

    ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
    psh.dwSize = sizeof(PROPSHEETHEADER);
    psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_PROPTITLE;
    psh.hwndParent = NULL;
    psh.hInstance = hApplet;
    psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON));
    psh.pszCaption = Caption;
    psh.nPages = sizeof(PsPage) / sizeof(PROPSHEETPAGE);
    psh.nStartPage = 0;
    psh.ppsp = PsPage;

    InitPropSheetPage(&PsPage[0], IDD_NUMSOPTSSETUP, NumsOptsSetProc);
    InitPropSheetPage(&PsPage[1], IDD_CURRENCYOPTSSETUP, CurrencyOptsSetProc);
    InitPropSheetPage(&PsPage[2], IDD_TIMEOPTSSETUP, TimeOptsSetProc);
    InitPropSheetPage(&PsPage[3], IDD_DATEOPTSSETUP, DateOptsSetProc);

    return (LONG)(PropertySheet(&psh) != -1);
}

/* EOF */

⌨️ 快捷键说明

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