Шустрый

Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007
Репутация: 1 Всего: 2
|
Код | public partial class Form1 : Form { public Form1() { InitializeComponent(); } private ResourceJournal aJournalRes = new ResourceJournal(); private CreateJournalAndWriteRes aCraeteJournal; private void OpenFile(string pPathFile) { aJournalRes.ReadResFile(pPathFile); AddComboBox(aJournalRes.JournalCharterRes); }
private void AddComboBox(List<JournalCharter> pJurnalCharter) { foreach(JournalCharter nameCharter in pJurnalCharter) comboBox1.Items.Add(nameCharter.NameCharter); } private void btCreater_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.Cancel) return; { aCraeteJournal = CreateJournalAndWriteRes.CreateApp(aJournalRes.PathApp = saveFileDialog1.FileName); aCraeteJournal.BeginWrite(aJournalRes, columJournalToolStripMenuItem.Checked); } } private void OpenFileIcon(string pPathFileIcon) { aJournalRes.ResICON = new ResourceIcon(pPathFileIcon); if (aJournalRes.ResICON.ResIconGroup.ResFile.idType != 1) LoadIconFile(""); else LoadIconFile(pPathFileIcon); }
private void LoadIconFile(string pPathFileIcon) { if (pPathFileIcon != "") IconImage.Load(pPathFileIcon); else IconImage.Image = IconImage.ErrorImage; } }
|
Классы ресурсов Код | public class ResourceJournal { public string ResFile { get { return getResFile(); } }
public void ReadResFile(string filePath) { try { using (StreamReader sr = new StreamReader(File.Open(filePath, FileMode.Open), Encoding.Default)) { // ReadNameAndDateReleaseJournal(sr); try { int i = 0; while (!sr.EndOfStream) { _journalCharterRes.Add(new JournalCharter(ReadNameCharter(sr))); try { _journalCharterRes[i++].AddPic(ReadPathPic(sr)); } catch (Exception ex) { MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } catch { MessageBox.Show("Не правильная структура файла:", "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } catch { MessageBox.Show("The file could not be read:", "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } private string ReadNameCharter(StreamReader sr) { string line; while ((line = sr.ReadLine()) != "<-" && line != null) { if (line != "" && line != "->") { return line; } } throw new Exception("File null"); } private string[] ReadPathPic(StreamReader sr) { string line, temp = ""; string[] result; while ((line = sr.ReadLine()) != "<-" && line != null) { if (line != "" && line != "->") { temp += line + "*"; } }
temp = temp.Remove(temp.Length - 1); result = temp.Split('*'); return result; } private List<JournalCharter> _journalCharterRes = new List<JournalCharter>(); public List<JournalCharter> JournalCharterRes { get { return _journalCharterRes; } }
public ResourceJournalStruct ResJournalStruct { get { return new ResourceJournalStruct(getStructRes(), "STRUCT", 1); } }
public List<ResourceBitmape> ResBitmape { get { return CreateResBitmape(_journalCharterRes); } } private List<ResourceBitmape> CreateResBitmape(List<JournalCharter> aJournalCharter) { List<ResourceBitmape> resBit = new List<ResourceBitmape>(); for (int i = 0; i < aJournalCharter.Count; i++) { resBit.Add(new ResourceBitmape(aJournalCharter[i].ArrayPic, "NEW" + (i + 1))); } return resBit; } private string getStructRes() { string result = ""; if (_journalCharterRes.Count == 0) return "";
foreach (JournalCharter jc in _journalCharterRes) { result += jc.NameCharter + "\r" + jc.ArrayPathPic.Count.ToString() + "\r"; } return result; }
private ResourceIcon _resIcon; public ResourceIcon ResICON { get { return _resIcon; } set { _resIcon = value; } }
private string _pathApp; public string PathApp { get { return _pathApp; } set { _pathApp = value; } } private string getResFile() { string result = ""; if (_journalCharterRes.Count == 0) return ""; foreach (JournalCharter jc in _journalCharterRes) { result += jc.NameCharter + "\r"; foreach (string pathPic in jc.ArrayPathPic) { result += pathPic + "\r"; } result += "<-\r->\r"; } return result; } }
public class ResourceJournalStruct { public ResourceJournalStruct(string pStructFile,string pResType, uint pResID) { _resFile = new UTF8Encoding().GetBytes(pStructFile); _ResType = pResType; _ResID = pResID; } private string _pathApp; public string PathApp { get set }
private byte[] _resFile; public byte[] ResFile { get } private string _ResType; public string ResType { get } private uint _ResID; public uint ResID { get } }
public class ResourceBitmape { public ResourceBitmape(List<Image> pArrayResPicFile,string pResType) { _ResType = pResType; _ResID = new List<uint>(); _ArrayResPicFile = new List<byte[]>(); Add(pArrayResPicFile); } private string _pathApp; public string PathApp { get set } private List<byte[]> _ArrayResPicFile; public List<byte[]> ResFile { get set } private string _ResType; public string ResType { get set } private List<uint> _ResID; public List<uint> ResID { get set } private void Add(List<Image> pArrayPic) { MemoryStream ms = new MemoryStream(); uint i=1; foreach (Image pic in pArrayPic) { pic.Save(ms, pic.RawFormat); _ArrayResPicFile.Add(ms.ToArray()); _ResID.Add(i++); } } }
public class ResourceIcon { public ResourceIcon(string pPathIconFile) { _resIconGroup = new ResourceIconGROUP(pPathIconFile, 14, 32512); _resIconDir = new ResourceIconDIR(pPathIconFile, 3, _resIconGroup.ResFile.dwImageOffset); } private ResourceIconDIR _resIconDir; public ResourceIconDIR ResIconDir { get } private ResourceIconGROUP _resIconGroup; public ResourceIconGROUP ResIconGroup { get } }
public class ResourceIconDIR { public ResourceIconDIR(string PathResFile, uint pResType, uint pResID) { _resFile = ReadIconDir(PathResFile); _ResType = pResType; _ResID = pResID; } private string _pathApp; public string PathApp { get set } private byte[] _resFile; public byte[] ResFile { get } private uint _ResType; public uint ResType { get } private uint _ResID; public uint ResID { get }
private byte[] ReadIconDir(string pPathFileIcon) { BinaryReader hFile = new BinaryReader(File.OpenRead(pPathFileIcon)); uint buffersizet = (uint)new FileInfo(pPathFileIcon).Length; byte[] buffer = hFile.ReadBytes((int)buffersizet); hFile.Close(); byte[] buffer2 = new byte[buffersizet - 22]; for (int i = 0; i < buffersizet - 22; i++) { buffer2[i] = buffer[i + 22]; } return buffer2; } }
public class ResourceIconGROUP { public ResourceIconGROUP(string PathResFile, uint pResType, uint pResID) { _resFile = LoadFileIcon(PathResFile); _ResType = pResType; _ResID = pResID; } private string _pathApp; public string PathApp { get set } private GROUPICON _resFile; public GROUPICON ResFile { get } private uint _ResType; public uint ResType { get } private uint _ResID; public uint ResID { get }
private GROUPICON LoadFileIcon(string fileName) { GROUPICON _groupICON = new GROUPICON(); FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); try { _groupICON = LoadStructIcon(fs); fs.Close(); } catch(Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return _groupICON; } finally { if (fs != null) fs.Close(); } return _groupICON; } private unsafe GROUPICON LoadStructIcon(Stream stream) { ICONDIR _iconDir = new ICONDIR(); ICONDIRENTRY _iconDirEntry = new ICONDIRENTRY(); try { **** if (_iconDir.idType != 1) { throw new Exception("Error: The file is not an icon file!"); } *** } finally { } return LoadStructGroupIcon(_iconDir, _iconDirEntry); } private GROUPICON LoadStructGroupIcon(ICONDIR pIconDir, ICONDIRENTRY pIconDirEntry) { GROUPICON _groupICON = new GROUPICON(); *** return _groupICON; } }
|
Класс хранит основную структуру ресурсов. У каждого раздела есть массив картинок. Код | public class JournalCharter { private string _nameCharter; private List<Image> masPic; private List<string> pathPic; public JournalCharter(string pName) { this.NameCharter = pName; masPic = new List<Image>(); pathPic = new List<string>(); }
public string NameCharter { get { return _nameCharter; } set { _nameCharter = value; } } public List<string> ArrayPathPic { get { return pathPic; } } public List<Image> ArrayPic { get { return masPic; } }
public void AddPic(string pPathPic) { try { masPic.Add(Image.FromFile(pPathPic)); pathPic.Add(pPathPic); } catch { throw new Exception("Не найден файл: \r" + pPathPic); } }
public void AddPic(string[] pPathPic) { for (int i = 0; i < pPathPic.Length; i++) { try { masPic.Add(Image.FromFile(pPathPic[i])); pathPic.Add(pPathPic[i]); } catch { throw new Exception("Не найден файл: \r" + pPathPic[i]); } } } }
|
Тут все ясно по названию класса. Код | public class CreateJournalAndWriteRes { private CreateJournalAndWriteRes(string pPathFile) { CreateJurnal(pPathFile); } public static CreateJournalAndWriteRes CreateApp(string pPathFile) { return new CreateJournalAndWriteRes(pPathFile); } private void UpdateResource(IntPtr hUpdate, ResourceJournalStruct pRes) { DllMethods.UpdateResource(hUpdate, pRes.ResType, pRes.ResID, 1049, pRes.ResFile, (UInt32)pRes.ResFile.Length); }
private unsafe void UpdateResource(IntPtr hUpdate, ResourceIcon pRes) { DllMethods.UpdateResource(hUpdate, pRes.ResIconDir.ResType, pRes.ResIconDir.ResID, 1049, pRes.ResIconDir.ResFile, (UInt32)pRes.ResIconDir.ResFile.Length); GROUPICON temp = pRes.ResIconGroup.ResFile; DllMethods.UpdateResource(hUpdate, pRes.ResIconGroup.ResType, pRes.ResIconGroup.ResID, 1049, &temp, (UInt32)sizeof(GROUPICON)); }
private void UpdateResource(IntPtr hUpdate, string strResFile, string strResType, uint nResID) { using (BinaryReader reader = new BinaryReader(File.OpenRead(strResFile))) { long nCount = new FileInfo(strResFile).Length; byte[] bytes = reader.ReadBytes((int)nCount); reader.Close(); DllMethods.UpdateResource(hUpdate, strResType, nResID, 1049, bytes, (UInt32)nCount); } }
private bool AppendResource(IntPtr hUpdate, ResourceJournal aJurnalRes) { try { UpdateResource(hUpdate, aJurnalRes.ResJournalStruct); if (aJurnalRes.ResICON != null && aJurnalRes.ResICON.ResIconGroup.ResFile.idType!=1) UpdateResource(hUpdate, aJurnalRes.ResICON); } catch { return false; } return true; }
public void BeginWrite(ResourceJournal aJurnalRes, bool pVisibleSelectCharter) { try { IntPtr hUpdate = DllMethods.BeginUpdateResource(aJurnalRes.PathApp, false); if (hUpdate != IntPtr.Zero) { DllMethods.EndUpdateResource(hUpdate, !AppendResource(hUpdate, aJurnalRes)); } } catch (Exception ex) { MessageBox.Show("Error:" + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void CreateJurnal(string pFileName) { Stream stream = File.Create(pFileName); stream.Write(global::JournalCreater.Properties.Resources.Journal, 0, global::JournalCreater.Properties.Resources.Journal.Length); stream.Close(); } }
|
Читал вот эту тему http://forum.vingrad.ru/forum/topic-223141/0.html В конце приведет список книг, чтобы научиться писать ОО код. Купил: Мартин Фаулер. Рефакторинг. Улучшение существующего кода. // изучаю ее пока в большой степени С. Макконнелл. Совершенный код. //Тоже читаю... по мере возможности. Читал про классы (АТД понял и догнал, но не догнал про интерфейсы и наследование. Может будет дальше подробнее...(а может туп)). Джошуа Кериевски. Рефакторинг с использованием шаблонов. //Читаю. Т.к. опыт нулевой в применении шаблонов, там хоть и написано, как и где применять, но я не понимаю, как это прикручивать к свой проге. А суть вопроса и состоит в том, чтобы помочь в написании ОО кода. Посмотрите и скажите где что не правильно, где и что можно было использовать... о то опыта нет и как работать с шаблонами не понимаю. Да и вообще я не думаю, что этот код хоть как то отдалена напоминает ОО код. Это сообщение отредактировал(а) Dino99rus - 17.10.2008, 21:59
|