Files
Work/dialog/DLGTMPL.CPP
2024-08-07 09:16:27 -04:00

57 lines
2.0 KiB
C++

#include <common/widestr.hpp>
#include <dialog/dlgtmpl.hpp>
DialogTemplate::operator DLGTEMPLATE *(void)
{
DLGTEMPLATE *lpDLGTEMPLATE=0;
DLGITEMTEMPLATE *lpDLGITEMTEMPLATE;
BYTE *lpCharByte;
DWORD sizeData;
if(!itemCount())return lpDLGTEMPLATE;
sizeData=MaxTemplateBytes;
mItemData.size(sizeData,GMEM_FIXED|GMEM_ZEROINIT);
lpDLGTEMPLATE=(DLGTEMPLATE*)((BYTE*)&mItemData[0]);
::memcpy(lpDLGTEMPLATE,&((DLGTEMPLATE&)*this),sizeof(DLGTEMPLATE));
lpCharByte=((BYTE*)lpDLGTEMPLATE)+sizeof(DLGTEMPLATE);
*((WORD*)lpCharByte)=0x0000; // no menu
lpCharByte+=sizeof(WORD);
if(className().isNull()){*((WORD*)lpCharByte)=0x0000;lpCharByte+=sizeof(WORD);}
else lpCharByte=copyString(lpCharByte,className());
if(titleText().isNull()){*((WORD*)lpCharByte)=0x0000;lpCharByte+=sizeof(WORD);}
else lpCharByte=copyString(lpCharByte,titleText());
if(style()&DS_SETFONT)
{
*((WORD*)lpCharByte)=pointSize();
lpCharByte+=sizeof(WORD);
lpCharByte=copyString(lpCharByte,typeFace());
}
lpCharByte=alignBoundary(lpCharByte);
lpDLGITEMTEMPLATE=(DLGITEMTEMPLATE*)lpCharByte;
for(short itemIndex=0;itemIndex<itemCount();itemIndex++)
{
DialogItemTemplate dlgItem(mDlgItems[itemIndex]);
if(dlgItem.className().isNull())continue;
::memcpy(lpDLGITEMTEMPLATE,&dlgItem,sizeof(DLGITEMTEMPLATE));
lpCharByte=((BYTE*)lpDLGITEMTEMPLATE)+sizeof(DLGITEMTEMPLATE);
lpCharByte=copyString(lpCharByte,dlgItem.className());
lpCharByte=copyString(lpCharByte,dlgItem.titleText());
*((WORD*)lpCharByte)=0;
lpCharByte+=sizeof(WORD);
lpCharByte=alignBoundary(lpCharByte);
lpDLGITEMTEMPLATE=(DLGITEMTEMPLATE*)lpCharByte;
}
return lpDLGTEMPLATE;
}
BYTE *DialogTemplate::copyString(BYTE *lpCharByte,const String &someString)const
{
WideString wideString(someString);
if(!wideString.size())return lpCharByte;
for(short itemIndex=0;itemIndex<wideString.size();itemIndex++)
((WORD*)lpCharByte)[itemIndex]=(WORD)wideString.operator[](itemIndex);
lpCharByte+=wideString.size()*sizeof(WORD);
return lpCharByte;
}