📄 untshare.cpp
字号:
/*
版权声明:
本文件版权为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
*/
HGLOBAL CPropertyInfo::SaveData ()
{
CSharedFile file;
CArchive ar (&file, CArchive::store);
if (Serialize (ar) == TRUE)
{
ar.Close ();
DWORD dwLength = file.GetLength ();
HGLOBAL hGlobal = file.Detach ();
::GlobalUnlock (hGlobal);
::GlobalReAlloc (hGlobal, dwLength, GMEM_DDESHARE | GMEM_MOVEABLE);
// 注意由于Windows系统内存管理按字对齐的原因,最后hGlobal的大小(GloalSize返回)
// 可能会大于dwLength值0-3个字节。
return hGlobal;
}
else
return NULL;
}
BOOL CPropertyInfo::LoadData (LPBYTE pData, INT nDataSize)
{
init ();
if (pData != NULL && nDataSize > 0)
{
CMemFile file;
file.Attach (pData, nDataSize);
CArchive ar (&file, CArchive::load);
return Serialize (ar);
}
else
return TRUE;
}
void ChangeBorder (CWnd* pUnit, INT nBorderType)
{
DWORD dwStyle = NULL, dwExStyle = NULL;
switch (nBorderType)
{
// case 0: // 无边框
// break;
case 1: // 凹入式
dwExStyle = WS_EX_CLIENTEDGE;
break;
case 2: // 凸出式
dwExStyle = WS_EX_DLGMODALFRAME;
break;
case 3: // 浅凹入式
dwExStyle = WS_EX_STATICEDGE;
break;
case 4: // 镜框式
dwExStyle = WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME;
break;
case 5:
dwStyle = WS_BORDER;
break;
}
pUnit->ModifyStyleEx (WS_EX_STATICEDGE | WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME,
dwExStyle, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE |
SWP_FRAMECHANGED | SWP_DRAWFRAME);
pUnit->ModifyStyle (WS_BORDER, dwStyle,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE |
SWP_FRAMECHANGED | SWP_DRAWFRAME);
}
BOOL CreateImageList (CImageList* pimgList, LPBYTE p, INT nSize)
{
pimgList->DeleteImageList ();
if (nSize > sizeof (DWORD) + sizeof (COLORREF) &&
*(LPDWORD)p == IMAGE_LIST_DATA_MARK)
{
CMemFile file;
file.Attach (p + sizeof (DWORD) + sizeof (COLORREF),
nSize - sizeof (DWORD) - sizeof (COLORREF));
CArchive ar (&file, CArchive::load);
return pimgList->Read (&ar);
}
else
return FALSE;
}
COLORREF ProcessSysBackColor (COLORREF clr)
{
if (clr == CLR_DEFAULT)
return ::GetSysColor (COLOR_BTNFACE);
else
return clr;
}
// 绝对不会返回NULL或者窗口句柄无效的CWnd*指针。
CWnd* GetWndPtr (PMDATA_INF pInf)
{
return (CWnd*)NotifySys (NRS_GET_AND_CHECK_UNIT_PTR, pInf->m_unit.m_dwFormID,
pInf->m_unit.m_dwUnitID);
}
BOOL MyCreateFont (CFont& font, LOGFONT* pLogFont)
{
LOGFONT lgfont;
::CopyMemory ((LPBYTE)&lgfont, (LPBYTE)pLogFont, sizeof (LOGFONT));
lgfont.lfCharSet = DEFAULT_CHARSET;
lgfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
lgfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lgfont.lfQuality = PROOF_QUALITY;
lgfont.lfPitchAndFamily = DEFAULT_PITCH;
return font.CreateFontIndirect (&lgfont);
}
void ModiUnitStyle (CWnd* pUnit, DWORD dwAddStyle, DWORD dwRemoveStyle)
{
DWORD dwOldStyle = GetWindowLong (pUnit->m_hWnd, GWL_STYLE);
DWORD dwNewStyle = (dwOldStyle & ~dwRemoveStyle) | dwAddStyle;
if (dwNewStyle != dwOldStyle)
SetWindowLong (pUnit->m_hWnd, GWL_STYLE, dwNewStyle);
}
void SetUnitStyle (CWnd* pUnit, BOOL blSet, DWORD dwStyle)
{
ModiUnitStyle (pUnit, (blSet ? dwStyle : 0), (blSet ? 0 : dwStyle));
}
void SerializeCString (CString& str, CArchive& ar)
{
INT nSize;
if (ar.IsStoring() == TRUE)
{
nSize = str.GetLength () * sizeof (TCHAR);
ar << nSize;
if (nSize > 0)
ar.Write ((LPTSTR)(LPCTSTR)str, nSize);
}
else
{
str.Empty ();
ar >> nSize;
ASSERT (nSize >= 0);
if (nSize > 0)
{
LPTSTR p = str.GetBuffer (nSize);
ar.Read (p, nSize);
str.ReleaseBuffer();
}
}
}
void SetStr (CString& str, LPTSTR szText)
{
if (szText != NULL)
str = szText;
else
str.Empty ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -