下面我们给出一个实例,当双击视窗时,它将实现以下功能:
改变原来视窗显示的内容和变量的值;
改变主框架窗口和子框架窗口的标题;
改变状态条的内容;
增加一个菜单的选项;
变化工具条图标。
运行AppWizard,产生一个多文档的名称为Test的工程。
为工程加入ID号为ID_MY_MENU的资源;
为CTestDoc类增加成员变量CString TestText;
class CTestDoc : public Cdocument
{
public:
CString TestText;
};
BOOL CTestDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
TestText="初次进入,未有双击事件!";//初始化TestText;
return TRUE;
}
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(5,5,pDoc->TestText);
}
用ClassWizard为CTestView类增加处理鼠标左键双击事件的函数;
void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CView::OnLButtonDblClk(nFlags, point);
//CTestDoc 的成员变量TestText被重新赋值!
CTestDoc* pDoc = GetDocument();
pDoc->TestText="双击事件发生,变量TestText被重新赋值!";
InvalidateRect(NULL,TRUE);
//变化子框架窗口的标题
CWnd* pParent=
;
pParent->SetWindowText("双击事件发生,变量TestText被重新赋值!这是在子窗口!!");
//变化主框架窗口的标题
AfxGetApp()->m_pMainWnd->SetWindowText("双击事件发生,变量TestText被重新赋值!这是在主窗口!!");
//变化状态条的内容
CStatusBar* pStatus=(CStatusBar*)
AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
if (pStatus) pStatus->SetPaneText(0, "双击事件发生,变量TestText被重新赋值!这是在状态条!!");
//插入新的菜单项目ID_MY_MENU,标题为新菜单
CMenu* pMenu;
pMenu=AfxGetApp()->m_pMainWnd->GetMenu();
pMenu->InsertMenu(-1,MF_BYCOMMAND,ID_MY_MENU,"新菜单");
AfxGetApp()->m_pMainWnd->DrawMenuBar();
//变化工具条
CToolBar*pTool=(CToolBar*)AfxGetApp()->
m_pMainWnd->GetDescendantWindow(AFX_IDW_TOOLBAR);
pTool->SetButtons(NULL,8);
pTool->SetButtonInfo(0,ID_FILE_NEW,TBBS_BUTTON,0);
pTool->SetButtonInfo(1,ID_FILE_OPEN,TBBS_BUTTON,1);
pTool->SetButtonInfo(2,ID_FILE_SAVE,TBBS_BUTTON,2);
pTool->SetButtonInfo(3,ID_SEPARATOR,TBBS_SEPARATOR,4);
pTool->SetButtonInfo(4,ID_EDIT_CUT,TBBS_BUTTON,4);
pTool->SetButtonInfo(5,ID_EDIT_COPY,TBBS_BUTTON,5);
pTool->SetButtonInfo(6,ID_EDIT_PASTE,TBBS_BUTTON,6);
pTool->SetButtonInfo(7,ID_SEPARATOR,TBBS_SEPARATOR,4);
}