MESSAGE MAP
1 Messagemap 是宏定義,不是與虛函數(shù)相關(guān)聯(lián)。
2 當(dāng)改變變量時需調(diào)用InValidateRect(),此函數(shù)觸發(fā)onpaint(),然后調(diào)用ondraw().調(diào)用ondraw()時,可現(xiàn)調(diào)用GetclipBox()減少重繪的區(qū)域。Frame第一次調(diào)用ondraw()時先調(diào)用OnInitialUpdata()。
3 CRect 類,中ptInRect()可判斷點是否在rect內(nèi),但是rect必須用device模式,LPCRECT為指向rect結(jié)構(gòu)的指針,但CRect有向LPCRECT的轉(zhuǎn)化函數(shù),可以隱式的轉(zhuǎn)化。GetClientRect()可以得到客戶Rect的大小。
4 映射模式 :MM_TEXT 是用logic模式,屏幕象素為單位。Fixed—Scale 模式 ,Device模式,大小不隨viewpoint即客戶窗口的大小改變。Varible-scale模式,大笑可以隨viewpoint即客戶口的大小改變。
5 可以在消息WM_CLOSE 中判斷文檔是否已經(jīng)保存。
6 cscrollview中設(shè)置滾動條
void CEx06cView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal(800, 1050); // 8-by-10.5 inches
CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2);
CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50);
SetScrollSizes(MM_LOENGLISH, sizeTotal, sizePage, sizeLine);
}
或用SetScaleToFitSize(sizeTotal);代替最后一行。
7 cview中圖像跟windows大小改變
void CMyView::OnDraw(CDC* pDC)
{
CRect rectClient;
GetClientRect(rectClient);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1000, 1000);
pDC->SetViewportExt(rectClient.right, -rectClient.bottom);
pDC->SetViewportOrg(rectClient.right / 2, rectClient.bottom / 2);
pDC->Ellipse(CRect(-500, -500, 500, 500));
}