57 lines
2.0 KiB
C++
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;
|
|
}
|
|
|