std::wstring CDialog::ReadString(Framework::CStream& stream) { std::wstring str; wchar_t ch = stream.Read16(); while(ch) { str += ch; ch = stream.Read16(); } return str; }
CDialog::SZ_OR_ORD CDialog::ReadSzOrOrd(Framework::CStream& stream) { SZ_OR_ORD szOrOrd; szOrOrd.ord = 0; szOrOrd.isString = stream.Read16(); if(szOrOrd.isString == 0xFFFF) { szOrOrd.ord = stream.Read16(); } else if(szOrOrd.isString != 0) { szOrOrd.str = ReadString(stream); } return szOrOrd; }
CDialog::DIALOGTEMPLATE CDialog::ReadDialogTemplate(Framework::CStream& stream) { DIALOGTEMPLATE dialog; dialog.dlgVer = stream.Read16(); dialog.signature = stream.Read16(); assert(dialog.dlgVer == 1); assert(dialog.signature == 0xFFFF); dialog.helpID = stream.Read32(); dialog.exStyle = stream.Read32(); dialog.style = stream.Read32(); dialog.cDlgItems = stream.Read16(); dialog.x = stream.Read16(); dialog.y = stream.Read16(); dialog.cx = stream.Read16(); dialog.cy = stream.Read16(); assert((stream.Tell() & 0x01) == 0); dialog.menu = ReadSzOrOrd(stream); assert((stream.Tell() & 0x01) == 0); dialog.windowClass = ReadSzOrOrd(stream); assert((stream.Tell() & 0x01) == 0); dialog.title = ReadString(stream); dialog.pointsize = stream.Read16(); dialog.weight = stream.Read16(); dialog.italic = stream.Read8(); dialog.charset = stream.Read8(); assert((stream.Tell() & 0x01) == 0); dialog.typeface = ReadString(stream); //Struct has padding for alignment to DWORD boundary (only if there's other items to read) if(stream.GetRemainingLength() != 0) { auto currentBytePos = stream.Tell() & 0x3; if(currentBytePos != 0) { stream.Seek(4 - currentBytePos, Framework::STREAM_SEEK_CUR); } assert((stream.Tell() & 0x03) == 0); } uint32 itemDataLength = static_cast<uint32>(stream.GetRemainingLength()); if(itemDataLength != 0) { dialog.dialogItemData.resize(itemDataLength); stream.Read(&dialog.dialogItemData[0], itemDataLength); } return dialog; }
CPathTableRecord::CPathTableRecord(Framework::CStream& stream) { m_nameLength = stream.Read8(); m_exLength = stream.Read8(); m_location = stream.Read32(); m_parentDir = stream.Read16(); m_directory = stream.ReadString(m_nameLength); if(m_nameLength & 1) { stream.Seek(1, Framework::STREAM_SEEK_CUR); } }