MESSAGE MAP
1 Messagemap 是宏定義,不是與虛函數相關聯(lián)。
2 當改變變量時需調用InValidateRect(),此函數觸發(fā)onpaint(),然后調用ondraw().調用ondraw()時,可現(xiàn)調用GetclipBox()減少重繪的區(qū)域。Frame第一次調用ondraw()時先調用OnInitialUpdata()。
3 CRect 類,中ptInRect()可判斷點是否在rect內,但是rect必須用device模式,LPCRECT為指向rect結構的指針,但CRect有向LPCRECT的轉化函數,可以隱式的轉化。GetClientRect()可以得到客戶Rect的大小。
4 映射模式 :MM_TEXT 是用logic模式,屏幕象素為單位。Fixed—Scale 模式 ,Device模式,大小不隨viewpoint即客戶窗口的大小改變。Varible-scale模式,大笑可以隨viewpoint即客戶口的大小改變。
5 可以在消息WM_CLOSE 中判斷文檔是否已經保存。
6 cscrollview中設置滾動條
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));
}