📄 复件 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;
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 + -