1. Set
HKEY hkFolder;
DWORD dwDisposition = REG_CREATED_NEW_KEY;
if(!m_vctNode.empty()) m_vctNode.clear();
if (ERROR_SUCCESS == ::RegCreateKeyEx(HKEY_CURRENT_USER, REGISTSUBFOLDER, NULL, _T("NODEITEM"),
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkFolder, &dwDisposition))
{
DWORD nSize = vctpNode.size();
NODEITEM * pNode = new NODEITEM[nSize];
for(int i=0;i<vctpNode.size();i++)
{
m_vctNode.push_back(*(vctpNode[i]));
pNode[i] = (*(vctpNode[i]));
}
RegSetValueEx(hkFolder, _T("NODEITEM"), NULL, REG_BINARY, (BYTE*) pNode, nSize * sizeof(NODEITEM));
delete [] pNode;
}
RegCloseKey(hkFolder);
2. Get
vGetAppCacheFolder();
HKEY hkFolder;
DWORD cbData = 0;
DWORD nType = REG_BINARY;
bool bResult = false;
NODEITEM *pNode = NULL;
LONG nRet1 = RegOpenKey(HKEY_CURRENT_USER, REGISTSUBFOLDER, &hkFolder);
cbData = 0;
LONG nRet2 = RegQueryValueEx(hkFolder, _T("NODEITEM"), NULL, &nType, (BYTE*)pNode, &cbData);
DWORD nApplySize = cbData/sizeof(NODEITEM);
pNode = new NODEITEM[nApplySize];
memset(pNode, 0, nApplySize);
nRet2 = RegQueryValueEx(hkFolder, _T("NODEITEM"), NULL, &nType, (BYTE*)pNode, &cbData);
if ( nRet1 == ERROR_SUCCESS && nRet2 == ERROR_SUCCESS )
{
m_vctNode.clear();
int nSize = cbData/sizeof(NODEITEM);
for (int ci=0; ci < nSize; ci++)
{
try{
m_vctNode.push_back((pNode[ci]));
}
catch(exception* e){
delete e;
m_vctNode.clear();
delete [] pNode;
return false;
}
}
bResult = true;
}else
{
FORMATMESSAGE(nRet2);
}
try
{
delete [] pNode;
}catch(exception* e)
{
m_vctNode.clear();
delete e;
}
RegCloseKey(hkFolder);
return bResult;
2011年2月21日 星期一
2011年2月17日 星期四
vector::erase和iterator的問題
vector 在erase後,原本的iterator會失效 (被移除了)
所以在使用for-loop + erase要注意
std::vector::erase()會回傳一個有效的iterator
example::
std::vector<int> myVector;
std::vector<int>::iterator it;
for(it = myVector.begin(); it !=myVector.end();)
{
if(*it != 1)
it = myVector.erase(it);
else
++it;
}
所以在使用for-loop + erase要注意
std::vector::erase()會回傳一個有效的iterator
example::
std::vector<int> myVector;
std::vector<int>::iterator it;
for(it = myVector.begin(); it !=myVector.end();)
{
if(*it != 1)
it = myVector.erase(it);
else
++it;
}
2011年2月16日 星期三
How To Check If Computer Is Running A 32 Bit or 64 Bit Operating System in Registry
1.HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0
Identifier REG_SZ x86 Family 6 Model 14 Stepping 12
Platform ID REG_DWORD 0x00000020(32)
2. HKLM\SYSTEM\CurrentCongtrolSet\Control\Session Manager\Envirornment
PROCESSOR_ARCHITECTURE REG_SZ x86
3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
BuildLabEx REG_SZ 7600.16695.x86fre.win7_gdr.101026-1503
Identifier REG_SZ x86 Family 6 Model 14 Stepping 12
Platform ID REG_DWORD 0x00000020(32)
2. HKLM\SYSTEM\CurrentCongtrolSet\Control\Session Manager\Envirornment
PROCESSOR_ARCHITECTURE REG_SZ x86
3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
BuildLabEx REG_SZ 7600.16695.x86fre.win7_gdr.101026-1503
2011年2月14日 星期一
CPen
CPen pen(PS_SOLID,2,RGB(192,192,192));
CPen *oldPen;
oldPen = pDC->SelectObject(&pen1);
pDC->MoveTo(10,10);\\ 起點
pDC->LineTo(200,20);\\ 線的終點
pDC->SelectObject(oldPen);
example:
for(int i=0;i<5;i++)
{
CPen* pPen = &Pen;
CPen *pOldPen = pDC->SelectObject( pPen );
pDC->MoveTo(0,row);
pDC->LineTo(nWidth,row);
pDC->SelectObject( &pOldPen );
row+=20;
}
CPen *oldPen;
oldPen = pDC->SelectObject(&pen1);
pDC->MoveTo(10,10);\\ 起點
pDC->LineTo(200,20);\\ 線的終點
pDC->SelectObject(oldPen);
example:
for(int i=0;i<5;i++)
{
CPen* pPen = &Pen;
CPen *pOldPen = pDC->SelectObject( pPen );
pDC->MoveTo(0,row);
pDC->LineTo(nWidth,row);
pDC->SelectObject( &pOldPen );
row+=20;
}
2011年2月9日 星期三
取消CDockablePane的Close button (修改CDockablePane的風格)
1. OnCreate
the AFX_DEFAULT_DOCKING_PANE_STYLE defined is
static const DWORD AFX_DEFAULT_DOCKING_PANE_STYLE = AFX_CBRS_FLOAT | AFX_CBRS_CLOSE | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE;
把AFX_CBRS_CLOSE移除即可
m_wndClassView.Create( strFileViewWnd, this, CRect( 0, 0, 200, 200 ), TRUE, ID_PANE_FILEVIEW_WND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE ) ;
2. GetControlBarStyle() and SetControlBarStyle( dwStyle )
DWORD dwStyle = m_wndClassView.GetControlBarStyle();
dwStyle &= ~( AFX_CBRS_CLOSE | AFX_CBRS_RESIZE | AFX_CBRS_FLOAT| AFX_CBRS_AUTOHIDE);
m_wndClassView.SetControlBarStyle( dwStyle );
the AFX_DEFAULT_DOCKING_PANE_STYLE defined is
static const DWORD AFX_DEFAULT_DOCKING_PANE_STYLE = AFX_CBRS_FLOAT | AFX_CBRS_CLOSE | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE;
把AFX_CBRS_CLOSE移除即可
m_wndClassView.Create( strFileViewWnd, this, CRect( 0, 0, 200, 200 ), TRUE, ID_PANE_FILEVIEW_WND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE ) ;
2. GetControlBarStyle() and SetControlBarStyle( dwStyle )
DWORD dwStyle = m_wndClassView.GetControlBarStyle();
dwStyle &= ~( AFX_CBRS_CLOSE | AFX_CBRS_RESIZE | AFX_CBRS_FLOAT| AFX_CBRS_AUTOHIDE);
m_wndClassView.SetControlBarStyle( dwStyle );
2011年2月8日 星期二
CTime CString 互轉
CString -> CTime
TCHAR *tcValidTimeFrom, *tcValidTimeTo;
int iHour, iMinute,iSecond;
tcValidTimeFrom = (TCHAR*)(LPCTSTR) csValidTimeFrom; _stscanf(tcValidTimeFrom, _T("%d:%d:%d"), &iHour, &iMinute, &iSecond);
CTime ctimeValidFrom(1970,1,1,iHour,iMinute,iSecond);
CTime -> CString
CTime time;
CString csDate;
CString csDate = time.Format(_T("%Y\%m\%d"));
TCHAR *tcValidTimeFrom, *tcValidTimeTo;
int iHour, iMinute,iSecond;
tcValidTimeFrom = (TCHAR*)(LPCTSTR) csValidTimeFrom; _stscanf(tcValidTimeFrom, _T("%d:%d:%d"), &iHour, &iMinute, &iSecond);
CTime ctimeValidFrom(1970,1,1,iHour,iMinute,iSecond);
CTime -> CString
CTime time;
CString csDate;
CString csDate = time.Format(_T("%Y\%m\%d"));
訂閱:
意見 (Atom)