📄 pickupinidlg.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;
PTCHAR szBuf,szBuf_tmp;
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);
szBuf = new TCHAR[real_len-2];
szBuf_tmp = szBuf;
lstrcpy(szBuf, (PTCHAR)(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);
szBuf = new TCHAR[_tcsclen(pszWideChar+1)];
szBuf_tmp = szBuf;
lstrcpy(szBuf, pszWideChar);
//除去前面的回车换行,空格TAB
while(*szBuf == '\t' || *szBuf == '\r' || *szBuf == '\n' || *szBuf == ' ')
szBuf++;
//////////////
delete pszWideChar;
}
delete pFileBuf;
while (1)
{
//// CString szTemp;
TCHAR szTemp[MAX_PATH];
//// int nPos;
PTCHAR nPos;
//// if (szBuf.IsEmpty())
if (!szBuf)
goto _GetPrivateProfileString_EXIT;
//// nPos = szBuf.FindOneOf(TEXT("\r\n"));
nPos = _tcsstr(szBuf,TEXT("\r\n"));
//// if (nPos == -1)
DWORD tmp = (DWORD)(nPos - szBuf);
if (nPos == 0)
{
//// szTemp = szBuf;
///// szBuf.Empty();
lstrcpyn(szTemp, szBuf,MAX_PATH);
szBuf = NULL;
// break;
//szTemp='['
//::AfxMessageBox(szTemp);
}
else
{
/* szTemp = szBuf.Left(nPos);
szBuf = szBuf.Right(szBuf.GetLength() - nPos);
szBuf.TrimLeft(TEXT("\r\n"));
*/
lstrcpyn(szTemp, szBuf, MAX_PATH-1);
szTemp[tmp] = '\0';
szBuf = szBuf + tmp + 2;
//除去前面的回车换行,空格TAB
while(*szBuf == '\t' || *szBuf == '\r' || *szBuf == '\n' || *szBuf == ' ')
szBuf++;
}
//// szTemp.TrimLeft(TEXT("\t "));
//// szTemp.TrimRight(TEXT("\t "));
//// if (szTemp.Left(1) == TEXT('[') && szTemp.Right(1) == TEXT(']'))
if (szTemp[0] == '[' && szTemp[tmp-1] == ']')
{
//// szTemp = szTemp.Right(szTemp.GetLength() - 1);
//// szTemp = szTemp.Left(szTemp.GetLength() - 1);
lstrcpy(szTemp,(PTCHAR)(szTemp+1));
szTemp[tmp-2] = '\0';
// 如果没有[]
if (lpAppName == NULL)
{
//// memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp,(szTemp.GetLength() + 1)* sizeof(TCHAR));
//// nSize += szTemp.GetLength() + 1;
memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp,(tmp - 1)* sizeof(TCHAR));
nSize += tmp - 1;
}
//如果有[]
//// else if(szTemp.Compare(lpAppName) == 0)
else if(lstrcmp(szTemp,lpAppName) == 0)
{
while (1)
{
//// if (szBuf.IsEmpty())
if (!szBuf)
{
///////////这里是我用来实现lpDefault功能的一个全局变量,呵呵
//// hubo=1;
///////////
goto _GetPrivateProfileString_EXIT;
}
//// nPos = szBuf.FindOneOf(TEXT("\r\n"));
nPos = _tcsstr(szBuf,TEXT("\r\n"));
//// if (nPos == -1)
if (!nPos)
{
//// szTemp = szBuf;
//// szBuf.Empty();
lstrcpyn(szTemp, szBuf, MAX_PATH-1);
szBuf = NULL;
}
else
{
//// szTemp = szBuf.Left(nPos);
//// szBuf = szBuf.Right(szBuf.GetLength() - nPos);
//// szBuf.TrimLeft(TEXT("\r\n"));
tmp = (DWORD)(nPos - szBuf);
lstrcpyn(szTemp, szBuf, MAX_PATH-1);
szTemp[tmp] = '\0';
szBuf = (TCHAR *)(szBuf + tmp + 2);
}
//// nPos = szTemp.Find(TEXT("="));
nPos = _tcsstr(szTemp,TEXT("="));
//// if (nPos == -1)
if (nPos == 0)
goto _GetPrivateProfileString_EXIT;
//// CString szTemp1;
TCHAR szTemp1[MAX_PATH];
int tmp1 = (int)(nPos-szTemp);
//// szTemp1 = szTemp.Left(nPos);
//// szTemp1.TrimLeft(TEXT("\t "));
//// szTemp1.TrimRight(TEXT("\t "));
lstrcpyn(szTemp1, szTemp,tmp+1);
szTemp1[tmp1] = '\0';
if (lpKeyName == NULL)
{
//// memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(szTemp1.GetLength() + 1)* sizeof(TCHAR));
//// nSize += szTemp1.GetLength() + 1;
memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(lstrlen(szTemp1) + 1)* sizeof(TCHAR));
nSize += lstrlen(szTemp1) + 1;
}
else if (lstrcmp(szTemp1,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;
*/ //int tmp1 =
lstrcpy(szTemp1,(PTCHAR)(nPos+1));
memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(lstrlen(szTemp1) + 1)* sizeof(TCHAR));
nSize += lstrlen(szTemp1) + 1;
goto _GetPrivateProfileString_EXIT;
}
///////////////////////////////////
//// else if(szTemp1.Compare(lpKeyName) != 0)
{
/// hubo=1;
// if(nSize >= )
// goto _GetPrivateProfileString_EXIT;
}
//////////////////////////////////
}
}
}
}
_GetPrivateProfileString_EXIT:
lpReturnedString[nSize] = TEXT('\0');
szBuf = szBuf_tmp;
delete []szBuf;
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));
}
LPTSTR CPickUpINIDlg::lstrcpyn(LPTSTR lpString1, LPCTSTR lpString2, int iMaxLength)
{
TCHAR *lptc1 = lpString1;
TCHAR *lptc2 = (LPTSTR)lpString2;
int n = iMaxLength;
// while ( *lptc1++ );
while ( n-- )
*lptc1++ = *lptc2++;
*lptc1 = TEXT('\0');
return lpString1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -