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

📄 复件 pickupinidlg.cpp

📁 EVC 实现GetPrivateProfileString的功能
💻 CPP
字号:
// PickUpINIDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PickUpINI.h"
#include "PickUpINIDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPickUpINIDlg dialog

CPickUpINIDlg::CPickUpINIDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPickUpINIDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPickUpINIDlg)
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPickUpINIDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPickUpINIDlg)
	// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPickUpINIDlg, CDialog)
//{{AFX_MSG_MAP(CPickUpINIDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPickUpINIDlg message handlers

BOOL CPickUpINIDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



DWORD CPickUpINIDlg::GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName)
{
	
//	CFile iniFile; 
	PBYTE pFileBuf;
	CString szBuf;
	DWORD dwLength;
	
	if (lpFileName == NULL || lpReturnedString == NULL) 
	{  
		return 0;
	}
	*lpReturnedString = TCHAR('\0');
	nSize = 0;
	//打开文件不成问题
	HANDLE iniFile  = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
////	if(!iniFile.Open(lpFileName, CFile::modeRead))
	if(!iniFile)
	{
		return 0;
	}
////	dwLength = iniFile.GetLength(); 
		dwLength = GetFileSize(iniFile, NULL);
	
	if (dwLength == 0)
	{
		return 0;
	}
	pFileBuf = new BYTE[dwLength + 2];
	if (pFileBuf == NULL)
	{
		return 0;
	}
	//初始化新分配的内存,设定初始值为0
	memset(pFileBuf, 0x0, dwLength + 2); 
////	iniFile.Read((void *)pFileBuf, dwLength); 
	DWORD real_len;
	if(!ReadFile(iniFile, (void *)pFileBuf, dwLength, &real_len,NULL))
	{
		CloseHandle(iniFile);
		return 0;
	}
/////	iniFile.Close(); 
	CloseHandle(iniFile);
	if (pFileBuf[0] == 0xFF && pFileBuf[1] == 0xFE) 
	{
		szBuf = (LPCWSTR)(pFileBuf + 2);
	}
	else
	{
		PTCHAR pszWideChar = new TCHAR[dwLength + 1];
		MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS|MB_COMPOSITE|MB_USEGLYPHCHARS, (LPCSTR )pFileBuf, dwLength, pszWideChar,dwLength); 
		
		//以下为我修改过的地方。因为我一点一点测试这个别人写的函数程序的时候,发现这里出了问题。于是我进行了修改,不过我认为我的修改并不好
		szBuf.Format(_T("%s"), pszWideChar);
		//////////////
		
		delete pszWideChar;
	}
	delete pFileBuf;
	while (1) 
	{
		CString szTemp; 
		int nPos;
		if (szBuf.IsEmpty()) 
			goto _GetPrivateProfileString_EXIT;
		nPos = szBuf.FindOneOf(TEXT("\r\n")); 
		
		if (nPos == -1) 
		{
			szTemp = szBuf; 
			szBuf.Empty(); 
			//szTemp='['
			//::AfxMessageBox(szTemp);
		}
		else 
		{
			szTemp = szBuf.Left(nPos); 
			szBuf = szBuf.Right(szBuf.GetLength() - nPos);
			szBuf.TrimLeft(TEXT("\r\n")); 
		}
		szTemp.TrimLeft(TEXT("\t ")); 
		szTemp.TrimRight(TEXT("\t "));
		int tmp = szTemp.GetLength();
		if (szTemp.Left(1) == TEXT('[') && szTemp.Right(1) == TEXT(']')) 
		{
			szTemp = szTemp.Right(szTemp.GetLength() - 1);
			szTemp = szTemp.Left(szTemp.GetLength() - 1);
			//   如果没有[]
			if (lpAppName == NULL) 
			{
				memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp,(szTemp.GetLength() + 1)* sizeof(TCHAR)); 
				nSize += szTemp.GetLength() + 1;
			}
			//如果有[]
			else if(szTemp.Compare(lpAppName) == 0)
			{
				while (1)
				{
					if (szBuf.IsEmpty()) 
					{
						///////////这里是我用来实现lpDefault功能的一个全局变量,呵呵
						////      hubo=1;
						///////////
						
						goto _GetPrivateProfileString_EXIT;
					}
					nPos = szBuf.FindOneOf(TEXT("\r\n")); 
					if (nPos == -1)
					{
						szTemp = szBuf;
						szBuf.Empty();
					}
					else
					{
						szTemp = szBuf.Left(nPos); 
						szBuf = szBuf.Right(szBuf.GetLength() - nPos); 
						szBuf.TrimLeft(TEXT("\r\n")); 
					}
					nPos = szTemp.Find(TEXT("=")); 
					if (nPos == -1)
						goto _GetPrivateProfileString_EXIT;
					CString szTemp1;
					szTemp1 = szTemp.Left(nPos); 
					szTemp1.TrimLeft(TEXT("\t "));
					szTemp1.TrimRight(TEXT("\t ")); 
					if (lpKeyName == NULL)
					{
						memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(szTemp1.GetLength() + 1)* sizeof(TCHAR)); 
						nSize += szTemp1.GetLength() + 1; 
					}
					else if (szTemp1.Compare(lpKeyName) == 0)
					{
						szTemp1 = szTemp.Right(szTemp.GetLength() - nPos - 1); 
						szTemp1.TrimLeft(TEXT("\t ")); 
						szTemp1.TrimRight(TEXT("\t ")); 
						memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(szTemp1.GetLength() + 1)* sizeof(TCHAR)); 
						nSize += szTemp1.GetLength() + 1;
						goto _GetPrivateProfileString_EXIT;
					}
					
					///////////////////////////////////
					
					else if(szTemp1.Compare(lpKeyName) != 0)
						
					{
						
						///     hubo=1;
//						if(nSize >= )
//						goto _GetPrivateProfileString_EXIT;
						
					}
					
					//////////////////////////////////
				}
			}
		}
	}
_GetPrivateProfileString_EXIT:
	lpReturnedString[nSize] = TEXT('\0');
	return nSize;
}

BOOL CPickUpINIDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch(pMsg->message)
	{
	case WM_LBUTTONUP:
		static const TCHAR *ThemeColors = L"ThemeMetrics";
		TCHAR buf[MAX_PATH];
		GetPrivateProfileString(ThemeColors,L"ButtonGoPos",L"",buf,MAX_PATH,L"\\storage card\\ini.ini");
		CSize m_MainWindowBackGround=GetSize(buf);
		MessageBox(buf);
		break;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CPickUpINIDlg::SplitString(TCHAR *buf, int nCount, CStringList &strList)
{
	TCHAR *p1=buf;
	for (int i=0;i<nCount;i++)
	{
		TCHAR *p2=p1;
		while ((*p1 != ',') && (*p1 != '\0'))
		{
			p1++;
		}
		CString str(p2);
		str=str.Left(p1-p2) ;
		strList.AddTail(str);
		p1++;
	}
}

CSize CPickUpINIDlg::GetSize(TCHAR *buf)
{
	CStringList strList;
	SplitString(buf,2,strList);
	CSize sz;
	sz.cx =_tcstol(strList.GetAt(strList.FindIndex(0) ),NULL,10);
	sz.cy =_tcstol(strList.GetAt(strList.FindIndex(1) ),NULL,10);
	return sz;
}

CRect CPickUpINIDlg::GetRect(TCHAR *buf)
{
	CStringList strList;
	SplitString(buf,4,strList);
	CRect rc;
	rc.left  =_tcstol(strList.GetAt(strList.FindIndex(0) ),NULL,10);
	rc.top  =_tcstol(strList.GetAt(strList.FindIndex(1) ),NULL,10);
	rc.right   =_tcstol(strList.GetAt(strList.FindIndex(2) ),NULL,10);
	rc.bottom =_tcstol(strList.GetAt(strList.FindIndex(3) ),NULL,10);
	return rc;
}

COLORREF CPickUpINIDlg::GetColor(TCHAR *buf)
{
	CStringList strList;
	SplitString(buf,3,strList);
	return RGB(_tcstol(strList.GetAt(strList.FindIndex(0) ),NULL,10),
		_tcstol(strList.GetAt(strList.FindIndex(1)),NULL,10),
		_tcstol(strList.GetAt(strList.FindIndex(2)),NULL,10));	
}

⌨️ 快捷键说明

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