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 = "南京熊猫电子装备有限公司";
14     pDC->TextOutA(50, 50, str);
15
16     CSize sz = pDC->GetTextExtent(str);
17
18     str.LoadString(IDS_XIONGMAO);
19     pDC->TextOutA(0, 200, str);
20
21     pDC->BeginPath();
22     pDC->Rectangle(50, 50, 50+sz.cx, 50+sz.cy);
23     pDC->EndPath();
24     pDC->SelectClipPath(RGN_DIFF);
25     //pDC->SelectClipPath(RGN_AND);
26     for(int i = 0; i < 300; i+=10) {
27         pDC->MoveTo(0, i);
28         pDC->LineTo(300, i);
29         pDC->MoveTo(i, 0);
30         pDC->LineTo(i, 300);
31     }
32 }

 1 // CTextView 消息处理程序
 2
 3 int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
 4 {
 5     if (CView::OnCreate(lpCreateStruct) == -1)
 6         return -1;
 7
 8     // TODO:  在此添加您专用的创建代码
 9     CClientDC dc(this);
10     TEXTMETRIC tm;
11     dc.GetTextMetrics(&tm);
12 //    CreateSolidCaret(tm.tmAveCharWidth/8, tm.tmHeight);
13
14     bitmap.LoadBitmap(IDB_BITMAP1);
15     CreateCaret(&bitmap);
16
17     ShowCaret();
18
19     SetTimer(1, 100, NULL);
20     return 0;
21 }

 1 void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4     CClientDC dc(this);
 5     CFont font;
 6     font.CreatePointFont(300, "华文行楷", NULL);
 7     CFont *pOldFont = dc.SelectObject(&font);
 8
 9     TEXTMETRIC tm;
10     dc.GetTextMetrics(&tm);
11     if (0x0d == nChar) {
12         m_strLine.Empty();
13         m_ptOrigin.y += tm.tmHeight;
14     }
15     else if (0x08 == nChar) {
16         COLORREF clr = dc.SetTextColor(dc.GetBkColor());
17         dc.TextOutA(m_ptOrigin.x, m_ptOrigin.y, m_strLine);
18         m_strLine = m_strLine.Left(m_strLine.GetLength()-1);
19         dc.SetTextColor(clr);
20     }
21     else {
22         m_strLine += (wchar_t)nChar;
23     }
24     CSize sz = dc.GetTextExtent(m_strLine);
25
26     CPoint pt;
27     pt.x = m_ptOrigin.x + sz.cx;
28     pt.y = m_ptOrigin.y;
29
30     SetCaretPos(pt);
31     dc.TextOutA(m_ptOrigin.x, m_ptOrigin.y, m_strLine);
32
33     dc.SelectObject(pOldFont);
34
35     CView::OnChar(nChar, nRepCnt, nFlags);
36 }

1 void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
2 {
3     // TODO: 在此添加消息处理程序代码和/或调用默认值
4     SetCaretPos(point);
5     m_strLine.Empty();
6     m_ptOrigin = point;
7     CView::OnLButtonDown(nFlags, point);
8 }

 1 void CTextView::OnTimer(UINT_PTR nIDEvent)
 2 {
 3     // TODO: 在此添加消息处理程序代码和/或调用默认值
 4     m_nWidth += 5;
 5
 6     CClientDC dc(this);
 7     TEXTMETRIC tm;
 8     dc.GetTextMetrics(&tm);
 9     CRect rect;
10     rect.left = 0;
11     rect.top = 200;
12     rect.right = m_nWidth;
13     rect.bottom = rect.top + tm.tmHeight;
14
15     dc.SetTextColor(RGB(255, 0, 0));
16     CString str;
17     str.LoadStringA(IDS_XIONGMAO);
18     dc.DrawText(str, rect, DT_LEFT);
19
20     rect.top = 150;
21     rect.bottom = rect.top + tm.tmHeight;
22     //dc.DrawText(str, rect, DT_RIGHT);
23     dc.DrawText(str, rect, DT_CENTER);
24
25     CSize sz = dc.GetTextExtent(str);
26     if (m_nWidth > sz.cx) {
27         m_nWidth = 0;
28         dc.SetTextColor(RGB(0, 255, 0));
29         dc.TextOut(0, 200, str);
30     }
31
32     CView::OnTimer(nIDEvent);
33 }

时间: 2024-08-01 20:27:40

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

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: 孙鑫教程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 | C

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: 孙鑫教程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 ================================================================================= 程序&进程&线程 ================================================