MFC: 孙鑫教程6笔记

这节课的主要内容是讲菜单,分为静态菜单和动态菜单

动态:

CMainFrame::OnCreate

 1 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
 7         | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
 8         !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 9     {
10         TRACE0("未能创建工具栏\n");
11         return -1;      // 未能创建
12     }
13
14     if (!m_wndStatusBar.Create(this) ||
15         !m_wndStatusBar.SetIndicators(indicators,
16           sizeof(indicators)/sizeof(UINT)))
17     {
18         TRACE0("未能创建状态栏\n");
19         return -1;      // 未能创建
20     }
21
22     // TODO: 如果不需要可停靠工具栏,则删除这三行
23     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
24     EnableDocking(CBRS_ALIGN_ANY);
25     DockControlBar(&m_wndToolBar);
26
27     /*CMenu menu;
28     menu.CreatePopupMenu();
29 //    GetMenu()->AppendMenuA(MF_POPUP, (UINT)menu.m_hMenu, "Panda");
30     GetMenu()->InsertMenuA(2, MF_BYPOSITION | MF_POPUP, (UINT)menu.m_hMenu, "Panda");
31     menu.AppendMenuA(MF_STRING, IDM_HELLO, "Hello");
32     menu.AppendMenuA(MF_STRING, 112, "Panda");
33     menu.AppendMenuA(MF_STRING, 113, "Mybole");
34 /*    GetMenu()->GetSubMenu(0)->AppendMenuA(MF_STRING, 114, "welcome");
35     GetMenu()->GetSubMenu(0)->InsertMenuA(ID_FILE_OPEN, MF_BYCOMMAND | MF_STRING, 115, "熊猫");
36     GetMenu()->DeleteMenu(1, MF_BYPOSITION);
37     GetMenu()->GetSubMenu(0)->DeleteMenu(2, MF_BYPOSITION);*/
38
39     /*menu.Detach();*/
40
41     return 0;
42 }

CMainFrame::OnCommand

 1 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
 2 {
 3     // TODO: 在此添加专用代码和/或调用基类
 4     int MenuCmdId = LOWORD(wParam);
 5     //CMenu2View view;
 6     CMenu2View *pView = (CMenu2View*)GetActiveView();
 7     if (MenuCmdId >= IDM_PHONE1 && MenuCmdId < IDM_PHONE1+pView->m_strArray.GetSize())
 8     {
 9         CClientDC dc(pView);
10         dc.TextOutA(0, 0, pView->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));
11         //MessageBox("Test");
12         return TRUE;
13     }
14     return CFrameWnd::OnCommand(wParam, lParam);
15 }

CMenu2View::OnChar

 1 void CMenu2View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4     CClientDC dc(this);
 5
 6     if (0x0d == nChar) {
 7         if (0 == ++m_nIndex) {
 8             m_menu.CreatePopupMenu();
 9             GetParent()->GetMenu()->AppendMenuA(MF_POPUP, (UINT)m_menu.m_hMenu, "PhoneBook");
10             GetParent()->DrawMenuBar();
11         }
12         m_menu.AppendMenuA(MF_STRING, IDM_PHONE1+m_nIndex, m_strLine.Left(m_strLine.Find(‘ ‘)));
13         m_strArray.Add(m_strLine);
14         m_strLine.Empty();
15         Invalidate();
16     }
17     else {
18         m_strLine += (wchar_t)nChar;
19         dc.TextOutA(0, 0, m_strLine);
20     }
21
22
23     CView::OnChar(nChar, nRepCnt, nFlags);
24 }

CMenu2View::OnPhone1

 1 void CMenu2View::OnPhone2()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     dc.TextOut(0, 0, m_strArray.GetAt(1));
 6 }
 7
 8 void CMenu2View::OnPhone1()
 9 {
10     // TODO: 在此添加命令处理程序代码
11     CClientDC dc(this);
12     dc.TextOut(0, 0, m_strArray.GetAt(0));
13 }
14
15 void CMenu2View::OnPhone3()
16 {
17     // TODO: 在此添加命令处理程序代码
18     CClientDC dc(this);
19     dc.TextOut(0, 0, m_strArray.GetAt(2));
20 }
21
22 void CMenu2View::OnPhone4()
23 {
24     // TODO: 在此添加命令处理程序代码
25     CClientDC dc(this);
26     dc.TextOut(0, 0, m_strArray.GetAt(3));
27 }

静态:

CMenuView::OnRButtonDown

 1 void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4     CMenu menu;
 5     menu.LoadMenuA(IDR_MENU1);
 6     CMenu *pPopup = menu.GetSubMenu(0);
 7     ClientToScreen(&point);
 8
 9     //pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
10     pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, GetParent());
11
12     CView::OnRButtonDown(nFlags, point);
13 }

CMainFrame::OnCreate

 1 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
 7         | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
 8         !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 9     {
10         TRACE0("未能创建工具栏\n");
11         return -1;      // 未能创建
12     }
13
14     if (!m_wndStatusBar.Create(this) ||
15         !m_wndStatusBar.SetIndicators(indicators,
16           sizeof(indicators)/sizeof(UINT)))
17     {
18         TRACE0("未能创建状态栏\n");
19         return -1;      // 未能创建
20     }
21
22     // TODO: 如果不需要可停靠工具栏,则删除这三行
23     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
24     EnableDocking(CBRS_ALIGN_ANY);
25     DockControlBar(&m_wndToolBar);
26
27     //GetMenu()->GetSubMenu(0)->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);
28     //GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_CHECKED);
29     //GetMenu()->GetSubMenu(0)->SetDefaultItem(1, TRUE);
30     //GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);
31     //GetMenu()->GetSubMenu(0)->SetDefaultItem(5, TRUE);
32
33     /*CString str;
34     str.Format("x = %d, y = %d", GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CXMENUCHECK));
35     MessageBox(str);
36     m_bitmap.LoadBitmapA(IDB_BITMAP1);
37     GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &m_bitmap, &m_bitmap);*/
38
39     //GetMenu()->GetSubMenu(0)->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
40
41     SetMenu(NULL);
42
43     CMenu menu;
44     menu.LoadMenuA(IDR_MAINFRAME);
45     SetMenu(&menu);
46     menu.Detach();
47
48     return 0;
49 }

CMainFrame::OnUpdateEditCut

1 void CMainFrame::OnUpdateEditCut(CCmdUI *pCmdUI)
2 {
3     // TODO: 在此添加命令更新用户界面处理程序代码
4     //if (2 == pCmdUI->m_nIndex)
5     if (ID_EDIT_CUT == pCmdUI->m_nID)
6         pCmdUI->Enable();
7     //pCmdUI->Enable();
8 }

CMainFrame::OnUpdateFileNew

1 void CMainFrame::OnUpdateFileNew(CCmdUI *pCmdUI)
2 {
3     // TODO: 在此添加命令更新用户界面处理程序代码
4 //    if (ID_FILE_NEW == pCmdUI->m_nID)
5 //        pCmdUI->Enable(FALSE);
6     if (0 == pCmdUI->m_nIndex)
7         pCmdUI->Enable(FALSE);
8 }

CMainFrame::OnShow

1 void CMainFrame::OnShow()
2 {
3     // TODO: 在此添加命令处理程序代码
4     MessageBox("MainFrame show!");
5 }

时间: 2024-08-27 04:47:57

MFC: 孙鑫教程6笔记的相关文章

MFC: 孙鑫教程4笔记

这节课主要讲了消息映射和绘画的一些函数,结构体,消息映射使得我们不用去管WindowProc函数的调用,只要在类里面添加消息就可以对操作进行一定的反应了.让MFC变得简单. 绘画的这些函数比较多,到时候可以refer这堂视频 下面是DrawView.cpp里的一些消息映射函数,加成员变量的时候需要在CDrawView的声明中(.h文件)里手动添加变量(视频里可以直接在类视图里添加),然后再构造函数里进行赋值. 1 void CDrawView::OnLButtonDown(UINT nFlags

MFC: 孙鑫教程3笔记

CTestApp如何调用WinMain函数: 先调用CTestApp theApp; 再调用CTestApp constructor 再调用CTestApp的基类CWinApp的constructor (appcore.cpp, 地址C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\src\mfc) CWinApp constructor调用了appmodul.cpp里的_tWinMain函数,这里太复杂,看不出来 _tWinMa

MFC: 孙鑫教程11笔记

一.图形的保存与重绘 感觉没什么意义,不过CPtrArray还是比较有用的 图形的重绘要调用OnDraw函数 二.窗口滚动条 1. 在CGraphicView.cpp的文件中CView改成CScrollView.将基类CView改成了CScrollView. 三.坐标空间,映射方式,设备坐标与逻辑坐标的转换 没明白.. 这一节都是将画图,基本用不到..

MFC: 孙鑫教程1笔记

typedef struct tagMSG { HWND hwnd; UNIT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; int WINAPI WinMain { HINSTANCE hInstance; HINSTANCE hPrevInstance; LPWSTR lpCmdLine; int nShowCmd; }; http://msdn.microsoft.com/zh-cn/vstudio/

MFC: 孙鑫教程13笔记

一.用CArchive写入读取数据 1 void CFile2View::OnFileWrite() 2 { 3 // TODO: 在此添加命令处理程序代码 4 CFile file("1.txt", CFile::modeCreate | CFile::modeWrite); 5 CArchive ar(&file, CArchive::store); 6 int i = 4; 7 char ch = 'a'; 8 float f = 1.3f; 9 CString str(

MFC: 孙鑫教程5笔记

这节主要讲的是文本编程 1 // CTextView 绘制 2 3 void CTextView::OnDraw(CDC* pDC) 4 { 5 CTextDoc* pDoc = GetDocument(); 6 ASSERT_VALID(pDoc); 7 if (!pDoc) 8 return; 9 10 // TODO: 在此处为本机数据添加绘制代码 11 //CString str("南京熊猫电子装备有限公司"); 12 CString str; 13 str = "南

MFC: 孙鑫教程12笔记

这节课主要讲的是文件操作 一.写文件 1. 在menu里增加项,并产生相应的消息响应函数 2. 响应函数OnWrite里增加: 方法1: FILE *pFile = fopen("1.txt", "w"); fwrite("http://www.panda.org", 1, strlen("http://www.panda.org"), pFile); fclose(pFile); 如果不想关闭文件,可以用fflush(pFi

孙鑫VC++视频教程笔记

写在前面的话:在学习孙鑫老师的VC++视频时,为了加深自己对知识的深入理解,就做了下面的笔记. 第一讲: 第二讲: 第三讲: 第四讲: 第五讲: 第六讲: 第七讲: 第八讲: 第九讲: 第十讲: 第十一讲: 第十二讲: 第十三讲: 第十四讲: 第十五讲: 第十六讲: 第十七讲: 第十八讲: 第十九讲:动态链接库 第二十讲: 孙鑫VC++视频教程笔记,布布扣,bubuko.com

孙鑫VC学习笔记:多线程编程

SkySeraph Dec 11st 2010  HQU Email:[email protected]    QQ:452728574 Latest Modified Date:Dec.11st 2010 HQU ================================================================================= 程序&进程&线程 ================================================