MFC程序设计——标尺的例子

来源:互联网 发布:网易房产数据 北京 编辑:程序博客网 时间:2024/06/07 18:02

我们首先看一个例子:

头文件:

//Ruler.h//CMyApp类代表应用程序本身,CMyApp::InitInstance通过构造CMainWindow对象创建一个主窗口;//而CMainWindow的构造函数通过Create创建了在屏幕上显示的窗口;class CMyApp : public CWinApp{public:    virtual BOOL InitInstance ();};class CMainWindow : public CFrameWnd{public:    CMainWindow ();protected:    //CMainWindow::OnPaint()处理所有的画图任务    afx_msg void OnPaint ();    DECLARE_MESSAGE_MAP ()};

源文件:

//Ruler.cpp#include <afxwin.h>#include "Ruler.h"CMyApp myApp;///////////////////////////////////////////////////////////// CMyApp member functionsBOOL CMyApp::InitInstance (){    m_pMainWnd = new CMainWindow;    m_pMainWnd->ShowWindow (m_nCmdShow);    m_pMainWnd->UpdateWindow ();    return TRUE;}///////////////////////////////////////////////////////////// CMainWindow消息映射以及成员函数BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)    ON_WM_PAINT ()END_MESSAGE_MAP ()CMainWindow::CMainWindow (){    Create (NULL, _T ("Ruler"));}void CMainWindow::OnPaint (){    CPaintDC dc (this);          //初始化设备描述表    //设置映射模式    dc.SetMapMode (MM_LOENGLISH);    //设置设备描述表的属性    dc.SetTextAlign (TA_CENTER | TA_BOTTOM);       //设置背景模式,透明    dc.SetBkMode (TRANSPARENT);    // 画标尺的主体    //黄色的画刷被选为设备描述表    CBrush brush (RGB (255, 255, 0));    CBrush* pOldBrush = dc.SelectObject (&brush);    dc.Rectangle (100, -100, 1300, -200);    dc.SelectObject (pOldBrush);    //    // 画散列的刻度线    //    for (int i=125; i<1300; i+=25) {        dc.MoveTo (i, -192);        dc.LineTo (i, -200);    }    for (int i=150; i<1300; i+=50) {        dc.MoveTo (i, -184);        dc.LineTo (i, -200);    }    for (int i=200; i<1300; i+=100) {        dc.MoveTo (i, -175);        dc.LineTo (i, -200);        //CDC::TextOut画出数字标注        CString string;        string.Format (_T ("%d"), (i / 100) - 1);        dc.TextOut (i, -175, string);    }}

注:C语言中的%d代表整型

标尺的应用程序没有采用把要传递给TextOut的字符串硬编码的方法,而是调用了CString::Format 生成标尺上的文本,CString是描述文本字符串的MFC类,对于CString对象而言,Format就能完成文本格式化,而不调用其它的外部函数。