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();
}
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∙.
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
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.)