前言:
这个笔记是去年看这本书的时候记下的,一直仍在电脑里,后来也没看过,今天春节后上班无意间发现了,遂整理出来,方便以后查阅.
第8章:
非模式对话框创建 显示 销毁:
1.m_pDlg=new CMyDlg;
pDlg->Create(IDD_MYDLG);
pDlg->ShowWindow(SW_SHOW);
2.销毁时在PostNcDestroy中调用delete this;
属性表的使用:
1.创建对话框模版,添加类,继承自CPropertyPage
2.由CPropertySheet派生一个属性表类,利用CPropertySheet::AddPage添加属性页
3.由DoModal显示属性表
class CFirstPage::Public CPropertyPage
{
public:
CFirstPage():CPropertyPage(IDD_FIRST_PAGE){};
};
class CMyPropertySheet:public CPropertySheet
{
public:
CFirstPage m_wndFirstPage;
CPropertySheet(LPCTSTR pszCaption,CWnd *pParant=NULL):
CPropertySheet(pszCaption,pParentWnd,0)
{
AddPage(&m_wndFirstPage);
}
};
响应OnApply:
1.在CMyPropertySheet中添加消息 afx_msg void OnApply
2.映射 ON_BN_CLICK(ID_APPLY_NOW,OnApply)
3.消息定义
void OnApply()
{
GetActivePage()->OnOK();
GetActivePage()->SetModified(FALSE);
}
第12章:
在做鼠标命中测试时,要先通过CDC::DPtoLP
OnDraw函数的自动识别:
当滚动事件发生,CScrollView用OnVScroll和OnHScroll来处理消息,调用::ScrollWindow来水平或垂直滚动试图。视图的OnPaint函数被调用,绘制失效部分。在调用OnDraw之前,CView::OnPaint调用虚OnPrepareDC函数,CScrollView覆盖OnPrepareDC并在其中调用CDC::SetMapMode来设置应设模式,调用SetViewportOrg将原点转换为等于水平和垂直滚动位置的值
在OnDraw以外执行CSCrollView窗口中绘制操作时要先将设备描述表传递给OnPrepareDC
CClientDC dc(this);
OnPrepareDC(&dc);
测试单击位置处于逻辑视图的上部还是下部:
void CMyView::OnLButtonDown(UINT nFlags,CPoint point)
{
CPoint pos=point;
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&pos);
//
//CSize GetTotalSize( ) const;
//Call GetTotalSize to retrieve the current horizontal and vertical sizes of the scroll view.
//
CSize size=GetTotalSize();
{
if( ::abs(pos.y)<(size.cy/2) )
{}//Upper
else
{}//Lower
}
}
SetScaleToFitSize实现Zoom To Fit,将整个逻辑视图所放在物理视图中
优化OnDraw,CDC::GetClipBox(CRect)传递给OnDraw的设备描述表对象中被调用,GetClipBox用无效区域矩形的逻辑坐标下的尺寸和位置来初始化CRect
//------------------------------------------------------------------------------------------------------
创建CListView: