MESSAGE MAP
1 Messagemap 是宏定义,不是与虚函数相关联。
2 当改变变量时需调用InValidateRect(),此函数触发onpaint(),然后调用ondraw().调用ondraw()时,可现调用GetclipBox()减少重绘的区域。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));
}