MESSAGE MAP相关即ondrow()消息调用顺序

MESSAGE MAP相关即ondrow()消息调用顺序

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模式,屏幕象素为单位。FixedScale 模式 Device模式,大小不随viewpoint即客户窗口的大小改变。Variblescale模式,大笑可以随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));
}

你可能感兴趣的:(MESSAGE MAP相关即ondrow()消息调用顺序)