..:: Kurz MFC 5. dφl - Dokument podruhΘ, t°φda CString::..

Dokument

Ve t°etφm dφle, kde jsme se bavili o dokumentu jsem se zapomn∞l zmφnit o dvou virtußlnφch funkcφch. Jsou to CDocument::OnOpenDocument a CDocument::OnSaveDocument. O t∞chto funkcφch se sice v ₧ßdnΘ uΦebnici, kterou jsem Φetl nemluvφ, ale n∞kdy jsou u₧iteΦnΘ. Jak je z°ejmΘ z jejich nßzv∙, volajφ se p°i otevφrßnφ a uklßdßnφ dokumentu. Ob∞ funkce majφ jen jeden parametr a je jφm jmΘno otevφranΘho/uklßdanΘho souboru. V p°edprogramovanΘ verzi otevφrajφ zadan² soubor, vytvß°ejφ objekt t°φdy CArchive a volajφ funkci CDocument::Serialize, kterou znßte z t°etφho dφlu. Pokud je ale p°etφ₧φte, vy°adφte funkci CDocument::Serialize a m∙₧ete si po₧adovan² soubor otev°φt jakoukoli metodou, na kterou jste zvyklφ, a¥ u₧ je to klasickΘ fopen nebo windowsovskΘ CreateFile. Tyto funkce zde vypisovat nebudu, nechßm to na vßs, jen nezapome≥te nevolat funkci p°edka, proto₧e tφm by jste automaticky zavolali i funkci CDocument::Serialize.

DalÜφ v∞c na kterou jsem zapomn∞l je funkce CDocument::SetModifiedFlag(BOOL bModified). Tato funkce se pou₧φvß k nastavenφ p°φznaku zda je dokument modifikovßn. Pokud je tento p°φznak nastaven a pokusφte se dokument uzav°φt, zeptß se vßs aplikace zda jej chcete ulo₧it atd. Tento p°φznak se automaticky ruÜφ p°i ulo₧enφ. Tato funkce se v∞tÜinou volß z pohledu. V naÜem p°φpad∞ je to funkce CMfcView::OnMouseMove p°i p°idßvßnφ dalÜφ Φßry a p°i vracenφ kreslenφ zp∞t (CMfcView::OnEditUndo).

void CMfcView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

LINE line;

CMfcDoc* pDoc = GetDocument();

CClientDC dc(this);

if (blbdown)

{

line.first = ptPrev;

line.second = point;

ptPrev = point;

pDoc->cary.Add(line);

dc.MoveTo(line.first);

dc.LineTo(line.second);

pDoc->SetModifiedFlag(TRUE);

UpdateStatusBar();

}

 

CView::OnMouseMove(nFlags, point);

}

 

void CMfcView::OnEditUndo()

{

// TODO: Add your command handler code here

CMfcDoc* pDoc = GetDocument();

pDoc->cary.RemoveAt(pDoc->cary.GetSize()-1);

Invalidate();

pDoc->SetModifiedFlag(TRUE);

UpdateStatusBar();

}

CString

Tuto t°φdu jsem u₧ v ukßzkovΘm k≤du pou₧il, ale jeÜt∞ jsem po°ßdn∞ nevysv∞tlil, co je zaΦ. A p°itom je to t°φda, kterß se tv∙rc∙m MFC povedla ze vÜech nejvφce. Ani ne tak z hlediska naprogramovßnφ, ale spφÜe proto, ₧e velice usnad≥uje prßci.

Tato t°φda slou₧φ k prßci s textov²mi °et∞zci a dφky nφ nemusφte pro manipulaci s textem pou₧φvat a pamatovat standartnφ funkce, ale staΦφ napsat nap°φklad obyΦejnΘ rovnß se namφsto strcpy. P°itom dφky p°etφ₧enΘmu operßtoru [] m∙₧ete s t°φdou CString pracovat jako by to bylo pole znak∙.

Zßkladnφ operace

Porovnßnφ (zßle₧φ na velikosti pφsmen): ==, <, >, , CString::Compare
Porovnßnφ (nezßle₧φ na velikosti pφsmen): CString::CompareNoCase
P°i°azenφ obsahu jednoho °et∞zce do druhΘho: = (Jeden z operand∙ m∙₧e b²t i ukazatel na char (char*).)
Spojenφ dvou °et∞zc∙: + (Jeden z operand∙ m∙₧e b²t i ukazatel na char (char*).)
P°ipojenφ jednoho °et∞zce na konec druhΘho: += (Jeden z operand∙ m∙₧e b²t i ukazatel na char (char*).)
ZjiÜt∞nφ dΘlky: CString::GetLength

DalÜφ operace

Konverze na LPCTSTR (tj. const char*): Tato konverze je automatickß, tak₧e kdekoli je jako parametr po₧adovßno LPCTSTR m∙₧ete dßt objekt CString.
P°i°azenφ formßtovanΘho °et∞zce: CString::Format (Tato funkce je ekvivalentem sprintf.)
Zφskßnφ bufferu:
Pro zφskßnφ ukazatele char* pou₧ijte funkci CString::GetBuffer jejφ₧ parametr je dΘlka po₧adovanΘho bufferu. Potom nezapome≥te zavolat funkci CString::ReleaseBuffer, kterß takto zφskan² buffer uvolnφ a jeho obsah p°ehraje do CString(u), kter² tento buffer vytvo°il. To se hodφ hlavn∞ pokud volßte n∞jakou funkci, kterß po₧aduje jako parametr char* a m∞nφ obsah bufferu, na kter² teno ukazatel ukazuje a vy chcete pou₧φt pro ulo₧enφ tohoto textu t°φdu CString
A dalÜφ:
T°φda CString obsahuje mnoho dalÜφch v∞cφ, jako p°evod na malß pφsmena, na velkß pφsmena, obrßcenφ po°adφ znak∙, vyhledßnφ pod°et∞zce, nahrazenφ pod°et∞zce, vlo₧enφ pod°et∞zce na urΦenΘ mφsto atd. DoporuΦuji se podφvat do MSDN.

A to je pro tentokrßt vÜe. Tentokrßt nebudu zdrojov² k≤d pro sta₧enφ p°idßvat, proto₧e by se liÜil jen dv∞mi °ßdky a ty snadno dokß₧ete p°idat sami. P°φÜt∞ se koneΦn∞ podφvßme na dialogy. (I kdy₧ jsem jeÜt∞ nevymyslel jak je nejlΘpe vysv∞tlit.)

<<4. dφl    6.dφl>>